Skip to content

Instantly share code, notes, and snippets.

View deeuu's full-sized avatar

Dominic Ward deeuu

View GitHub Profile
@deeuu
deeuu / getbibs.py
Created June 7, 2017 22:03 — forked from wcaleb/getbibs.py
The Pandoc filter and shell script I use to make a bibliography file from my BibTeX note files. See http://wcm1.web.rice.edu/plain-text-citations.html
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Pandoc filter that grabs the BibTeX code block from each note file
# and then uses bibtexparser to add a "short title" entry in the "note" field,
# appending finished BibTeX entry to a bibliography file.
from pandocfilters import toJSONFilter, CodeBlock
# https://github.com/sciunto/python-bibtexparser
import bibtexparser
@deeuu
deeuu / wav_to_flac.sh
Last active May 4, 2018 10:21
Traverse a directory tree, converting all wav files (which will be deleted) to flac
find $1 -name "*.wav" -exec sh -c 'sox "$1" --bits 16 "${1%.*}.flac"; rm "$1"' _ {} \;
@deeuu
deeuu / num_rows.py
Created July 17, 2018 07:34
SQLAlchemy: number of rows
# https://stackoverflow.com/questions/10822635/get-the-number-of-rows-in-table-using-sqlalchemy
num_rows = session.query(MyTable).count()
@deeuu
deeuu / rclone_empty_dirs.xsh
Last active August 8, 2018 16:43
xonsh script to list all directories on a remote that do not contain files (but may contain folders), via rclone
import re
rclone_remote_path = 'drive:/temp'
dirs = re.findall('\d+:\d+:\d+\ +-1\ +(.*?)\n',
$(rclone lsd -R @(rclone_remote_path)))
file_dirs = re.findall('\d+\ +(.*\/?(?=\/))',
$(rclone ls @(rclone_remote_path)))
@deeuu
deeuu / lower_case_all.py
Last active September 4, 2018 09:46
Python function to lower case all sub-directories and files in a directory
def lower_case_all(dirname):
import os
for dirpath, dirs, files in os.walk(dirname, topdown=False):
for filename in files:
os.rename(os.path.join(dirpath, filename),
os.path.join(dirpath, filename.lower()))
for adir in dirs:
@deeuu
deeuu / tag_version.xsh
Last active December 9, 2019 14:03
Xonsh script for tagging (and pushing the tag) the version of a python package as recorded in __version__.py
about = {}
with open($(find . -d 2 -name '__version__.py').strip()) as f:
exec(f.read(), about)
tag_version = f"v{about['__version__']}"
git tag @(tag_version)
git push origin @(tag_version)
@deeuu
deeuu / install_julia.xsh
Last active February 26, 2019 21:49
Install julia
version = "1.1.0"
major, minor, patch = version.split('.')
wget f"https://julialang-s3.julialang.org/bin/linux/x64/{major}.{minor}/julia-{version}-linux-x86_64.tar.gz"
tar -xvf f"julia-{version}-linux-x86_64.tar.gz"
cp -r f"julia-{version}" /opt/
ln -sf f"/opt/julia-{version}/bin/julia" /usr/local/bin/julia
rm -r f"julia-{version}-linux-x86_64.tar.gz" f"julia-{version}"
echo "Done: Type 'julia'"
@deeuu
deeuu / auto_gopass.xsh
Created December 4, 2018 16:44
Gopass autocompletion for xonsh
sudo echo $(gopass completion bash) > /etc/bash_completion.d/gopass
@deeuu
deeuu / folders-to-gphotos-albums.xsh
Last active March 9, 2019 17:42
Xonsh script wrapper around upload-gphotos to upload all personal image/video folders to google-photo albums
# see https://github.com/3846masa/upload-gphotos
import argparse
import os
parser = argparse.ArgumentParser()
parser.add_argument('--folder',
help='Folder of images. Can contain subdirectories')
parser.add_argument('--username', help='Your Google Photos username')
parser.add_argument('--password', help='Your Google Photos password')
parser.add_argument('--ftypes', nargs='+',
@deeuu
deeuu / jsonconfigparser.py
Last active May 29, 2019 16:50
JSON for quick config file
class JSONConfigParser():
import collections
Option = collections.namedtuple('Option', 'type is_required default')
def __init__(self):
self._expected = {}
def add_option(self, option, type, is_required=False, default=None):
self._expected[option] = self.Option(type, is_required, default)