Skip to content

Instantly share code, notes, and snippets.

View ZachSaucier's full-sized avatar
💻
I have a lot to be humble about.

Zach Saucier ZachSaucier

💻
I have a lot to be humble about.
View GitHub Profile
function draw_arrow(context, x, y, angle, magnitude) {
const head_length = 10;
const dx = Math.cos(angle) * magnitude;
const dy = Math.sin(angle) * magnitude;
const end_x = x + dx;
const end_y = y + dy;
context.beginPath();
context.moveTo(x, y);
context.lineTo(end_x, end_y);
context.lineTo(end_x - head_length * Math.cos(angle - Math.PI / 6), end_y - head_length * Math.sin(angle - Math.PI / 6));
@ZachSaucier
ZachSaucier / .zshrc
Created April 2, 2024 19:08
Create and navigate to a new git branch from any other branch
gb() {
git checkout main
git pull
git branch "$1"
git checkout "$1"
}
const hrefs = [...document.querySelectorAll('.albumThumb a[href*="playlist.view?id="]')].map((e) => e.href);
let lastPlaylistId = -1;
hrefs.forEach((e) => {
const id = parseInt(new URL(e)?.searchParams?.get('id'));
if (id > lastPlaylistId) {
lastPlaylistId = id;
}
});
for (let i = 1; i <= lastPlaylistId; i++) {
let index = i;
@ZachSaucier
ZachSaucier / svelte.config.js
Created January 24, 2024 16:54
Multiple sites in one Svelte project in order to share components
// apps/website-1/svelte.config.js
import { createSvelteConfig } from 'config/svelte.js'
import adapter from '@sveltejs/adapter-cloudflare'
export default createSvelteConfig({
adapter: adapter(),
alias: {
$sections: 'src/sections',
},
@ZachSaucier
ZachSaucier / index.html
Created December 4, 2023 23:07
devtools-detect console.info animation setup
<script type="module" defer>
import devtools from '/devtools-detect.js';
const consoleInfoAnimation = () => {
// console.info animation here
};
const handleDevtoolsChange = (e) => {
if (e.detail.isOpen) {
consoleInfoAnimation();
@ZachSaucier
ZachSaucier / doubly-linked-list.ts
Last active May 6, 2023 18:58
A (comprehensive?) implementation of doubly linked lists using TypeScript.
// Note: This doubly linked list implementation is meant to cover most any use
// case of doubly linked lists. You likely don't need all of the functions
// included for your use case.
class DoublyLinkedListNode<T> {
public value: T;
public next?: DoublyLinkedListNode<T>;
public prev?: DoublyLinkedListNode<T>;
constructor(value: T) {
interface YearDropdownPluginConfig {
text: string;
theme: string;
date: Date;
yearStart: number;
yearEnd: number;
}
const yearDropdownPlugin = function ({
text = "",
float dist = 0.5*0.5 - (m.x * m.x + m.y * m.y);
float t = mix( dist / border, 1., max(0., sign(dist - border)) );
gl_FragColor = mix(color0, color1, t);
import os, glob, eyed3
os.chdir("./")
for file in glob.glob("*.mp3"):
filename = os.path.basename(file)
if " - " in filename:
artist, track = filename.split(' - ')
if "".__eq__(track):
track = artist
artist = ""
{
"Chill funk": [
"Snakehips - On & On",
"GRiZ - Wonder Why",
"Joe Cocker - Feelin' Alright.mp3",
"Daft Punk - Solar Sailer (Pretty Lights Remix)",
"Pretty Lights - A Million Tomorrows",
"Atu - Wanna Luv U",
"Pretty Lights - Pretty Lights vs. Led Zeppelin",
"Pretty Lights - Around The Block feat. Talib Kweli",