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 / 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 {
@trvswgnr
trvswgnr / main.rs
Last active August 5, 2023 05:47
crab sync services
/*
[dependencies]
tokio = {version="1", features=["full"]}
*/
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
use std::time::Duration;
use tokio::time::sleep;
@trvswgnr
trvswgnr / SyncService.test.ts
Last active August 7, 2023 07:31
daxxer challenge 2
import { SyncService } from './SyncService';
import type {
EventId,
UserId,
EventFromA,
} from './types';
import { describe, beforeEach, it, expect } from '@jest/globals';
import { QueueService, LogService, BService, MonitorService, CacheService } from './mock-services';
@trvswgnr
trvswgnr / async_cb.rs
Last active July 26, 2023 04:57
async callback fn rust
use futures::Future;
async fn async_fn_with_async_cb<T: Future>(f: fn(String) -> T) -> T::Output {
// we do some shit here and then end up with a string
let x = "`this is the result of something`".to_string();
f(x).await
}
#[tokio::main]