Skip to content

Instantly share code, notes, and snippets.

View trvswgnr's full-sized avatar
:octocat:
hardly workin'

Travis Wagner trvswgnr

:octocat:
hardly workin'
View GitHub Profile
@trvswgnr
trvswgnr / 1_connect_four_winner.sh
Last active August 24, 2023 04:10
check connect four winner
#!/usr/bin/env bash
declare -A board
for ((i=1; i<=7; i++)); do
for ((j=1; j<=6; j++)); do
board[$i,$j]=' '
done
done
check_winner() {
@trvswgnr
trvswgnr / invert_binary_tree.rs
Created August 23, 2023 05:44
invert binary tree neg operator crab
fn main() {
// create a new binary tree
let mut root = TreeNode::new(1);
let left_child = TreeNode::new(2);
let right_child = TreeNode::new(3);
root.set_left(left_child);
root.set_right(right_child);
@trvswgnr
trvswgnr / concurrency.js
Last active January 20, 2024 09:29
run up to n concurrently, catching and returning errs
async function processItems(items, fn) {
const errs = [];
let i = 0;
const workers = Array(25)
.fill()
.map(async () => {
while (i < items.length) {
await fn(items[i++]).catch((e) => errs.push(e));
}
});
@trvswgnr
trvswgnr / ezthredz.ts
Last active August 22, 2023 07:09
easy multithreading w/ worker threads nodejs typescript
import { Worker, isMainThread, parentPort, workerData } from 'worker_threads';
// Worker thread
if (!isMainThread) {
const workerFunction: (input: any) => any = eval(workerData.workerFunction);
const result = workerFunction(workerData.input);
parentPort?.postMessage(result);
}
// Main thread
@trvswgnr
trvswgnr / backup.sh
Last active August 15, 2023 17:07
backup local files to remote
#!/bin/sh
main() {
check_exists "$local_dir" "local directory"
check_exists "$ssh_key" "ssh key file"
log_message "starting backup of $local_dir to $remote_server:$remote_dir"
rsync -avz \
-e "ssh -i $ssh_key" --delete --log-file="$log_file" \
--progress "$local_dir" "$remote_server:$remote_dir" \
|| handle_error "backup failed"
@trvswgnr
trvswgnr / patch.rs
Last active August 13, 2023 23:33
create, apply, compose, and invert patches from file changes
use std::collections::HashMap;
pub fn create_patch(original: &str, modified: &str) -> String {
let original_lines = original.lines().collect::<Vec<_>>();
let modified_lines = modified.lines().collect::<Vec<_>>();
let mut longest_common_subsequences = HashMap::new();
longest_common_subsequences.insert((0, 0), vec![]);
for (i, &original_line) in original_lines.iter().enumerate() {
for (j, &modified_line) in modified_lines.iter().enumerate() {
@trvswgnr
trvswgnr / 1_queue.rs
Created August 12, 2023 07:45
a concurrent fifo queue with a custom doubly-linked list in crablang
use crate::linkedlist::LinkedList;
use std::sync::{Arc, RwLock};
pub struct Queue<T> {
queue: RwLock<LinkedList<T>>,
}
impl<T> Queue<T> {
pub fn new() -> Arc<Self> {
Arc::new(Queue {
@trvswgnr
trvswgnr / BTree.ts
Last active August 10, 2023 06:50
file-based nosql db
class BTreeNode {
keys: number[];
children: BTreeNode[];
numKeys: number;
constructor(private minDegree: number, public isLeaf: boolean) {
this.keys = new Array(2 * this.minDegree - 1);
this.children = new Array(2 * this.minDegree);
this.numKeys = 0;
}
findKey(key: number): number {
@trvswgnr
trvswgnr / tables.sql
Last active August 9, 2023 03:48
daxxer sql challenge
CREATE TABLE workspaces (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
CREATE TABLE users (
id SERIAL,
workspace_id INT NOT NULL,
email VARCHAR(255) NOT NULL,
PRIMARY KEY (workspace_id, id),
@trvswgnr
trvswgnr / SessionManager.ts
Created August 8, 2023 04:35
session management with redis store for user auth
import { randomBytes, createCipheriv, createDecipheriv } from 'crypto';
import { createConnection, Socket } from 'net';
import { promisify } from 'util';
type SessionData = {
userId: string;
expiresAt: number;
};
interface IConfigService {