Skip to content

Instantly share code, notes, and snippets.

View tjklemz's full-sized avatar

Thomas Klemz tjklemz

View GitHub Profile
@tjklemz
tjklemz / vimrc
Last active January 9, 2023 21:42
let loaded_matchparen=1
set number numberwidth=5
set tabstop=2 softtabstop=2 expandtab shiftwidth=2 smarttab
set list
set listchars=tab:▸\ ,trail:·,nbsp:⎵
set background=dark
@tjklemz
tjklemz / rules.txt
Last active March 31, 2022 23:17
The Hunger Games - Zoo Disaster coding problem
antelope eats grass
big-fish eats little-fish
bug eats leaves
bear eats big-fish
bear eats bug
bear eats chicken
bear eats cow
bear eats leaves
bear eats sheep
chicken eats bug
@tjklemz
tjklemz / count.c
Last active January 27, 2022 03:25
numSplits solution without arrays
#include <stdio.h>
#define hash(c) 1 << (c - 'a')
int numSplits(char * s) {
unsigned int n = 0, l = 0, r = 0, i = 0, j = 0, cur = 0;
while (s[i]) {
r |= hash(s[i++]);
}
// http://www.cse.yorku.ca/~oz/hash.html
const hash = str => {
let h = 0
for (let i = 0; i < str.length; ++i) {
h = (33 * h) ^ str.charCodeAt(i) // seems no one knows why 33
}
return h
}
const HackMap = () => {
@tjklemz
tjklemz / jira-desc.js
Last active March 26, 2021 00:31
Get Jira Sprint Ticket Descriptions
var issues = $('.ghx-issues')[0]
var getData = (issues, selectors) => {
return selectors.map(([sel, name, getter]) => {
return Array.from(issues.querySelectorAll(sel)).map(item => ({
[name]: getter ? item[getter] : item.innerText
}))
}).reduce((items, next) => items.map((item, j) => ({...item, ...next[j]})))
}
var result = getData(issues, [['.ghx-summary', 'title'], ['.ghx-key', 'ticket'], ['.ghx-type', 'type', 'title']])
@tjklemz
tjklemz / settings.json
Last active November 23, 2021 19:03
VS Code Settings
{
"breadcrumbs.enabled": false,
"city-lights-icons-vsc.hidesExplorerArrows": true,
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 5000,
"editor.acceptSuggestionOnCommitCharacter": false,
"editor.autoClosingBrackets": "never",
"editor.autoClosingOvertype": "never",
"editor.autoIndent": "keep",
"editor.autoSurround": "never",
# Certs https://stackoverflow.com/a/55249339/958007
function setup-certs() {
local cert_path="$HOME/.certs/all.pem"
local cert_dir=$(dirname "${cert_path}")
[[ -d "${cert_dir}" ]] || mkdir -p "${cert_dir}"
security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain > "${cert_path}"
security find-certificate -a -p /Library/Keychains/System.keychain >> "${cert_path}"
export GIT_SSL_CAINFO="${cert_path}"
export AWS_CA_BUNDLE="${cert_path}"
export NODE_EXTRA_CA_CERTS="${cert_path}"
@tjklemz
tjklemz / partout.js
Created August 11, 2020 21:06
Partout: Simple command line parser for Node
/*
partout([
'artifact',
{ name: 'output', defaultValue: '.' },
{ name: 'platform', flag: true, parse: true }
], '-p darwin app'.split(' '))
*/
const identity = (value) => value;
@tjklemz
tjklemz / gi
Created June 25, 2020 21:47
Git Remote Branch Switcher
#!/usr/bin/env bash
command -v ipt &>/dev/null || npm i -g ipt
git fetch origin
name=$(git branch -r --sort=-committerdate | grep '^\s*origin/' | grep -v 'HEAD' | sed 's/^[[:space:]]*origin\///' | ipt -a -S 20)
if [[ -z "$name" ]]; then
exit 1
fi
@tjklemz
tjklemz / list-licenses.js
Last active November 9, 2018 22:48
Lists licenses of all direct dependencies in a monorepo (assumes packages folder). Will parse any License file if there is one and gives short format. Useful for About dialogs.
var fs = require('fs')
var path = require('path')
var cwd = typeof __dirname === 'undefined' ? process.cwd() : __dirname
var repos = fs.readdirSync('./packages').map(path => cwd+'/packages/'+path).filter(path => fs.lstatSync(path).isDirectory()).concat([cwd])
var getParent = (p, n = 1) => p.split(path.sep).slice(0, -n).join(path.sep)
var allDeps = repos
.map(repo => repo+'/package.json')
.filter(p => fs.existsSync(p))
.map(package => Object.keys(require(package).dependencies).map(dep => {
delete require.cache[dep]