Skip to content

Instantly share code, notes, and snippets.

View josiahbryan's full-sized avatar

Josiah Bryan josiahbryan

View GitHub Profile
/**
* This is a simple wrapper script that orchestrates the PlanetScale API
* so we can synchronize our schema changes via DDL to a dev branch and
* automatically release them.'
*
* This was created for my own project using my own ORM (https://github.com/josiahbryan/yass-orm)
* but the PlanetScale API operations below should be easily reusable
* for other scenarios.
*
* The main flow looks something like:
@josiahbryan
josiahbryan / Wangdd22RelayClient.js
Last active July 17, 2022 01:44
Simple controller for use with the Wangdd22 Ethernet Relay
//
// Simple controller for use with the Wangdd22 Ethernet Relay, available on Amazon for ~$35
//
// See https://www.amazon.com/dp/B01MRQTFMJ?psc=1&ref=ppx_yo2ov_dt_b_product_details
//
// Special thanks to commentors on the product listing:
// Python Client: https://www.amazon.com/gp/customer-reviews/RAEHN60VSX3LV/ref=cm_cr_dp_d_rvw_ttl?ie=UTF8&ASIN=B01MRQTFMJ
// Config format: https://www.amazon.com/gp/customer-reviews/R19ZMADG7S2GX2/ref=cm_cr_dp_d_rvw_ttl?ie=UTF8&ASIN=B01MRQTFMJ
//
// This client just turns on/off the relays, doesn't handle config, but could easily be added thanks to the info
@josiahbryan
josiahbryan / BottomPanel.jsx
Last active November 11, 2021 01:15
react-draggable-bottom-panel - Draggable Bottom Panel for React using react-spring and react-use-gesture
/*
# About BottomPanel
Renders a bottom panel which exposes a custom amount of content
at the bottom of the screen in a "closed" state, along with an animated
drag handle. The panel can then be "swiped" / "dragged" open by clicking
or touching anywhere in the panel. The drag handle will animate smoothly
between open/closed arrow states. The max open size of the panel can
also be customized, defaults to entire window height. The BottomPanel
wraps any children provided in a custom content area with overflow
@josiahbryan
josiahbryan / transcode-test.js
Last active February 26, 2020 09:25
Test of transcoding with beamcoder
// Revised 2/26/20 with a video filter to try using setpts - didn't help...
// Ticket ongoing at https://github.com/Streampunk/beamcoder/issues/36
const beamcoder = require('beamcoder');
async function main() {
// Get this file from http://dl5.webmfiles.org/big-buck-bunny_trailer.webm
let demuxer = await beamcoder.demuxer('file:./big-buck-bunny_trailer.webm');
let decoder = beamcoder.decoder({ demuxer, stream_index: 0 });
const inVideoStream = demuxer.streams[0];
// console.log(JSON.parse(JSON.stringify(inVideoStream)));
@josiahbryan
josiahbryan / faceEnvWorkerPatch.js
Last active October 7, 2022 18:31
Use this to make face-api.js work in a WebWorker
// From: https://github.com/justadudewhohacks/face-api.js/issues/47
// This is needed because face-api.js does not support working in a WebWorker natively
// Updated Dec 1 2020 to work on latest Chrome (tested in WebWorkers on Chrome Mobile on Android / Google Pixel 3 as well)
self.Canvas = self.HTMLCanvasElement = OffscreenCanvas;
// self.HTMLCanvasElement.name = 'HTMLCanvasElement';
// self.Canvas.name = 'Canvas';
self.CanvasRenderingContext2D = OffscreenCanvasRenderingContext2D;
/*
Aerostat Beam Coder - Node.js native bindings for FFmpeg.
Copyright (C) 2019 Streampunk Media Ltd.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
@josiahbryan
josiahbryan / video-audio-encode-test.js
Last active February 1, 2022 00:21
Fixed based on feedback
/*
Aerostat Beam Coder - Node.js native bindings for FFmpeg.
Copyright (C) 2019 Streampunk Media Ltd.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
@josiahbryan
josiahbryan / FpsAutoTuner.js
Created March 19, 2019 20:52
FpsAutoTuner.js - Auto-optimize the FPS of your application
/**
* FpsAutoTuner works by measuring the FPS (which you tell it by calling
* `countFrame()`) and then every so often (at `tuningInteval`ms), it compares
* that measured FPS to the `fpsTarget`. When the measured FPS goes below `fpsTarget` less
* `tuningMargin`, the `fpsTarget` will be decreased by
* `tuningRate` and the `callback` will be execute with the new `fpsTarget`. Likewise,
* when the measured FPS exceeds `fpsTarget` less `tuningMargin`, then `fpsTarget`
* will be increased by `tuningRate` and `callback` will be called with the new target.
*
* Example usage:
@josiahbryan
josiahbryan / debundle-sfc.js
Last active September 10, 2018 01:53
Really Simple Single-File-Component Support for Ember 3.x+
"use strict";
const fs = require('fs');
/**
Really Simple Single-File-Component Support for Ember 3.x+
By Josiah Bryan <josiahbryan@gmail.com> 2018-09-07
(Posted for discussion at https://discuss.emberjs.com/t/really-simple-single-file-component-support-for-ember-3-x/15438)
Hey everyone! I'm designing a new hobby project, and I really wanted to work with single file
import Ember from 'ember';
/**
@function LiveDependantListMixinFactory
@param listPropertyName {String} or {Object} - if a string, will be the name
of the destination property that you can use in your template as the list.
If this param is an object with at least `{selectAs,from}` defined,
it will be used as the values for the following args (they will be overwritten
with values from the object)
@param fromStoreModel - ember-data model name to select from