Skip to content

Instantly share code, notes, and snippets.

@bag-man
bag-man / XMLReader.ts
Last active July 11, 2019 11:53
A class wrapper around libxmljs, for reading values with XML namespaces
import { Document, Element, parseXml } from 'libxmljs';
import { VError } from 'verror';
export class XMLReader {
private document: Document;
private namespaces: Record<string, string>;
constructor(inputXml: string) {
try {
this.document = parseXml(inputXml);
@bag-man
bag-man / recursive-factory.ts
Last active October 25, 2019 17:00
Generate recursive typed functions
import { deepEqual } from 'assert'
type RecursiveFn<T> = (xs: T[], out?: T[]) => T[]
type OperatorFn<T> = (T: T, xs: T[], out: T[]) => T | void
type FactoryFn = <T>(fn: OperatorFn<T>) => RecursiveFn<T>
const recursiveFactory: FactoryFn = <T>(fn: OperatorFn<T>) => {
const recursive: RecursiveFn<T> = (xs, out = []) => {
const x = xs.shift()
@bag-man
bag-man / command.sh
Last active May 23, 2021 17:22
mrkoll.se scraper
SEEDPERSON=$1
rm output.csv
urls=$(curl -s "$SEEDPERSON" | grep /person/ | grep -v Sammanf | grep grannHeader | sed -r 's/.*href=(.*)>/\1/g' | sed 's/>.*$//' | sed 's/^\//https:\/\/mrkoll.se\//')
#echo "Url, First Name, Last Name, Address, Appt. No., Postcode, DoB, Gender, Res. Since, Phone" >> output.csv
for url in $urls
do
echo -n "$url," >> output.csv
curl -s "$url" | grep -E '(tel:|block_col1)' -A 47 | grep span | sed '/tel:/q' | sed -E 's/<div class=history_span/\n<div class=history_span/' | grep -vE '(history_span|f_head1|förnamn|f_line1|mellannamn)' | sed 's/<[^>]*>//g' | sed -E 's/ lgh ([0-9]{4})/\nlgh \1\n/' | sed s/-XXXX// | sed -r '/^\s*$/d' | sed 's/^herre/M/'| sed 's/^tjej/F/' | sed 's/^dam/F/' | sed 's/^kvinna/F/' | sed 's/^man/M/' | sed '6,7d;' | dos2unix | paste -s -d ',' >> output.csv
@bag-man
bag-man / counter.py
Created May 31, 2021 16:19
Blackjack card counter
#!/bin/python3
import curses
import sys
import os
from math import floor
decks = 6
bet_unit = 10
def main(win, decks):
@bag-man
bag-man / Kabul.md
Last active April 4, 2026 20:01
Rules for the card game "Kabul"

Kabul

This is a game I was taught by some friends in Sweden, they called it Kabul, but I think it might have another name as Googling for it returned no similar results. I decided to write down the rules as it's actually a pretty great game!

EDIT: It was originally called Cabo, backstory here: https://treyhunner.com/2015/06/cabo-card-game/

Card values

  • Joker: -1
  • Red Kings: 0
  • Ace: 1
@bag-man
bag-man / connect.sh
Last active November 13, 2025 03:04
Scripts for doing winlink on Linux with pat and a Lab599 TX500
# Connect to a known RMS and retry every five minutes
RMS=${1-ardop:///OE5XIR?freq=14104}
DELAY_MIN=${2-5}
DELAY=$((60 * $DELAY_MIN))
SOUND_CARD=$(ardopcf -m 2> /dev/null | grep PnP | grep -o '[[:digit:]]\+' | head -n 1)
rigctld -m 2050 -r /dev/ttyUSB0 -d /dev/ttyUSB0 -p /dev/ttyUSB0 -P RTS -s 9600 &
ardopcf 8515 plughw:$SOUND_CARD,0 plughw:$SOUND_CARD,0 -m > /dev/null 2>&1 &
sleep 2