Skip to content

Instantly share code, notes, and snippets.

View AlexAegis's full-sized avatar
🦔
ʕ•ᴥ•ʔ

Sandor AlexAegis

🦔
ʕ•ᴥ•ʔ
View GitHub Profile
@AlexAegis
AlexAegis / buffered-all-settled.ts
Last active August 4, 2023 08:09
buffered-all-settled.ts
const task = (i: number): Promise<number> =>
new Promise((res, rej) => {
setTimeout(
() => {
if (i % 12 === 0) {
console.log('task reject', i);
rej('nope');
} else {
console.log('task resolve', i);
res(i);
@AlexAegis
AlexAegis / convert_1money_to_wallet.sh
Last active July 30, 2022 11:39
A script to convert a 1Money CSV export into Wallet imports.
#!/bin/sh
# Converts a 1Money export to be used at Wallet
# Converts one Account at a time, places all found accounts into a folder
# called output
# Usage:
# ./convert_1money_to_wallet.sh 1moneyexport.csv
# Import settings:
# Go to https://web.budgetbakers.com/imports
@AlexAegis
AlexAegis / retrieve_npm_packages.sh
Created June 28, 2021 18:05
Recursively pack all dependencies of an npm project
#!/bin/sh
# This script will run npm pack on every dependency and dependencies of a dependency
# on 8 threads. It's useful if you want to then upload everything to a private registry.
mkdir packages
cd packages || exit 1
# There is some unwanted garbage in the output of `npm ls` hence the inverted greps
npm ls --all --registry https://registry.npmjs.org 2> /dev/null |
@AlexAegis
AlexAegis / parse_args.sh
Last active June 16, 2021 21:02
POSIX compliant argument parsing
#!/bin/sh
expand_single_args() {
var="${1#-}" # cut off first, and only dash
while [ "$var" ]; do
next="${var#?}"
first_char="${var%$next}"
echo "-$first_char"
var="$next" # next
done
@AlexAegis
AlexAegis / environment.interface.ts
Created April 8, 2021 12:56
Angular Generic Environment Setup
/**
* Environment shape
*/
export interface Environment {
/**
* Application version, straight from the package.json
*/
version: string;
/**
@AlexAegis
AlexAegis / setup-voicemeeter-routing.md
Last active November 27, 2020 23:39
Streaming audio through VoiceMeeter

Streaming audio through VoiceMeeter Banana

  1. Install VoiceMeeter Banana
  2. Keep the windows default sound output as is. Select where you want to listen as always (Like a headphone)
  3. Select the VoiceMeeter Output as windows default input. (Your microphones and another virtual input will all be routed to this)
  4. Start VoiceMeeter Banana
  5. Select your mic(s) in your hardware outputs, and route them only to channel B (Disable A, this will make sure that you wont hear your own mic)
  6. Let the Virtual Input routed to both A and B channels. (This will let everything that is routed into this virtual channel to be heard by both you and the virtual microphone)
  7. Select as the A1 output the MME variant of your main output (Like your headset. MME lets that sink recieve sound from multiple sources. WDM would take exclusive access which means that you either hear only the sounds you want to share or everything else).
  8. Select any sources in the Windows Sound Mixer
@AlexAegis
AlexAegis / base-model.type.ts
Created October 23, 2020 14:50
Convert relative models to foreign keys
export interface Model {
id: number;
}
export interface FooModel extends Model {
name: string;
}
export interface BarModel extends Model {
name: string;
@AlexAegis
AlexAegis / binary-tree.ts
Created September 23, 2020 13:14
Inverting a binary tree in one line
export class Node<T> {
public left?: Node<T>;
public right?: Node<T>;
public constructor(public value: T) {}
public invert(): Node<T> {
return ([this.left, this.right] = [this.right?.invert(), this.left?.invert()]) && this;
}
public toString(): string {
@AlexAegis
AlexAegis / http-effect.function.ts
Last active August 21, 2020 09:22
Http effect creator for NgRX
import { Actions, ofType } from '@ngrx/effects';
import { ActionCreator } from '@ngrx/store';
import { TypedAction } from '@ngrx/store/src/models';
import { Observable, of } from 'rxjs';
import { catchError, map, switchMap } from 'rxjs/operators';
/**
* It will automatically strip the actions `type` field away before forwarding it
* to the httpCall. This way no accidental type fields are sent anywhere.
*
@AlexAegis
AlexAegis / base.directive.ts
Last active August 21, 2020 02:05
Angular subscription handler, unsubscribes when the component is destroyed
import { OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs';
/**
* Adds a subscription object and a default OnDestroy hook to the child component
*
* If ngOnDestroy is is overriden in the child component don't forget to call
* ```typescript
* super.ngOnDestroy();
* ```