I hereby claim:
- I am johnstcn on github.
- I am cianjohnston (https://keybase.io/cianjohnston) on keybase.
- I have a public key ASDp1RugXYlzG-JhqP7WCi5z3MeOeIGApgo6KEdM31CRKgo
To claim this, I am signing this object:
#!/usr/bin/env python | |
import csv | |
import argparse | |
import sys | |
from collections import defaultdict | |
helptext = """Merge multiple CSV files using a commonly named column. | |
CSV files must have column headings, but do not need to be sorted. |
#!/usr/bin/env python | |
import argparse | |
import re | |
import grequests | |
def chunks(l, n): | |
"""Yield successive n-sized chunks from l.""" | |
for i in range(0, len(l), n): |
#!/usr/bin/env python | |
import argparse | |
import json | |
import re | |
import sys | |
import GeoIP | |
from collections import Counter |
#!/usr/bin/env python | |
# Author: Cian Johnston <[email protected]> | |
import argparse | |
import itertools | |
def distance(s1, s2): | |
out = abs(len(s1) - len(s2)) | |
for c1, c2 in zip(s1, s2): |
#!/usr/bin/env python | |
import fileinput | |
notes = [' '] + ('A Bb B C C# D Eb E F F# G G#'.split() * 2) | |
chars = ' abcdefghijklmnopqrstuvwy' | |
mapping = dict(zip(chars, notes)) | |
def normalize(c): | |
return c.lower() |
I hereby claim:
To claim this, I am signing this object:
Cian Johnston, July 2017
A couple of weeks ago, I decided I should put my gaming rig to work crypto mining. I did not expect to make any significant profit on this, it was more of a fun project to set up. However, there were a large number of tutorials and guides already out there, and many were more than a year out of date.
This guide assumes the reader already has a crypto wallet set up, is comfortable with Linux and the command line, and knows how to use Google if they run into problems.
The end result is an Ubuntu 16.04 LTS headless server running CUDA ethminer via systemd.
# -*- mode: ruby -*- | |
# vi: set ft=ruby : | |
Vagrant.configure("2") do |config| | |
config.vm.box = "generic/ubuntu2004" | |
config.vm.provision "shell" do |shell| | |
shell.privileged = false | |
shell.path = "provision.sh" | |
end | |
end |
(function({fadeIn="", fadeDuration=5000}={}) { | |
function fadeInPlaylist(playlist, fadeDuration) { | |
playlist.playAll().then(function(p) { | |
let globalVol = game.settings.get("core", "globalPlaylistVolume"); | |
p.sounds.filter(s => s.playing).find(_ => true) | |
.sound | |
.fade(globalVol, { duration: fadeDuration, from: 0}); | |
}); | |
} | |
(function({fadeDuration=5000}={}) { | |
function fadeOutPlaylist(playlist, fadeDuration) { | |
if (!playlist.playing) return; | |
let playingSound = playlist.sounds.filter(s => s.playing).find(_ => true).sound; | |
if (!!!playingSound) return; // should not happen | |
let currVol = playingSound.volume; | |
let globalVol = game.settings.get("core", "globalPlaylistVolume"); | |
if (currVol == 0) return; | |
playingSound.fade(0, { duration: fadeDuration, from: currVol}) | |
setTimeout(() => playlist.stopAll(), fadeDuration); |