Skip to content

Instantly share code, notes, and snippets.

@bag-man
bag-man / Kabul.md
Created December 26, 2022 16:42
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!

Card values

  • Joker: -1
  • Red Kings: 0
  • Ace: 1

Card effects

  • Queen & King: Switch any two cards and look at them
@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 / 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 / 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 / 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 / test.ts
Last active April 16, 2019 09:44
1 + 1 = 2 testing antipattern
// Avoid generating expected results as they are not testing your logic independently
describe('1+1=2 testing antipattern', () => {
describe('add', () => {
const add = (a: number, b: number): number => a + b;
const expected = 1 + 1;
it('should add two numbers', () => {
// This is testing two sets of logic, and doesnt guarantee the correctness of the function
// as the output of expected could also be wrong
expect(add(1, 1)).toEqual(expected);
@bag-man
bag-man / log
Last active April 10, 2019 09:17
nave debug log
+ '[' -z /bin/bash ']'
++ basename /bin/bash
+ shell=bash
+ case "$shell" in
+ shopt -s extglob
+ NODEDIST=https://nodejs.org/dist
+ NAVE_CACHE_DUR=86400
++ curl --version
++ head -n1
+ NAVEUA='nave/curl 7.64.1 (x86_64-pc-linux-gnu) libcurl/7.64.1 OpenSSL/1.1.1b zlib/1.2.11 libidn2/2.1.1 libpsl/0.20.2 (+libidn2/2.1.1) libssh2/1.8.1 nghttp2/1.36.0'
@bag-man
bag-man / keybase.md
Created November 6, 2018 08:32
keybase.md

Keybase proof

I hereby claim:

  • I am bag-man on github.
  • I am bag_man (https://keybase.io/bag_man) on keybase.
  • I have a public key ASDcVWpn_Gzg_zivsjlklILaFDKNDBCaRxiwJdJvvdMIdQo

To claim this, I am signing this object:

@bag-man
bag-man / find-coding-range.js
Created April 21, 2017 14:39
Find a coding sequence in a contig
module.exports = function findCodingRange (codingSeq, contig, reverse) {
let codingLength = codingSeq.length
, start = 0
, end = 0
, selector = 12
, fail = false
start = contig.indexOf(codingSeq.substring(0, selector))
end = contig.indexOf(codingSeq.substring(codingLength - selector, codingLength)) + selector
@bag-man
bag-man / post.md
Created February 4, 2017 00:01
fzf + rgrep + vim mini tutorial

I've always had fzf and ripgrep on my radar, and I've finally gotten around to using them together. Good lord it makes a world of difference, especially when added to Vim as well as Bash.

Add the following snippet to your ~/.bashrc, this add's fzf keybindings to bash and gets fzf to use ripgrep by default for faster searching.

[ -f ~/.fzf.bash ] && source ~/.fzf.bash
export FZF_DEFAULT_COMMAND='rg --files --no-ignore --hidden --follow --glob "!.git/*"'
bind -x '"\C-p": vim $(fzf);'

Okay now what can you do?