Skip to content

Instantly share code, notes, and snippets.

@vadimkantorov
vadimkantorov / gmail_takeout_emails.py
Last active October 21, 2018 17:40
Print all email addresses found in a Gmail's takeout *.mbox archive
import sys
import re
import mailbox
emails = set()
for message in mailbox.mbox(sys.argv[1]).itervalues():
for k, v in message.items():
if k.lower() in ['from', 'to', 'cc']:
emails |= set(re.split(r''' |<|>|"|,|\t''', v))
@vadimkantorov
vadimkantorov / splittabs.py
Last active March 22, 2019 00:50
Split URL lists by categories
# Use Chrome Session Buddy plugins to export and import tab URL lists
# alias splittabs='python3 <(curl -s https://gist.githubusercontent.com/vadimkantorov/ab9acf28bdb0b5f3423973106a4d13a5/raw)'
# splittabs session_buddy.txt --noperc
import sys
input_file_path, noperc = sys.argv[1], (sys.argv + [None])[2] == '--noperc'
lines = set(filter(bool, open(input_file_path)))
def flt(name, lines, contains = []):
@vadimkantorov
vadimkantorov / gmail_inbox_unread.txt
Created March 24, 2019 09:27
Search for unread emails in Inbox folder on GMail
in:inbox is:unread category:primary
@vadimkantorov
vadimkantorov / dump_twitter_followers_following.py
Last active May 3, 2022 16:49
Dump Twitter bio of followed accounts
# Does not work because of https://github.com/twintproject/twint/issues/1011
# # Prerequisite: https://github.com/twintproject/twint
# # Usage: dump_twitter_followed_bio vadimkantorov > followed.txt
# # Takes 1h for 2500 followed accouns
# # alias dump_twitter_followed_bio='twint --following --user-full -u'
# Works:
# Save in Chrome HAR session of scrolling the Followers / Following timeline
import argparse
@vadimkantorov
vadimkantorov / split_audio_by_silence.sh
Last active May 3, 2022 16:40
Script to split audio files by silence
set -e
# for f in *.m4a; do ffmpeg -i "$f" -af "silenceremove=stop_periods=-1:stop_duration=0.2:stop_threshold=-40dB:window=1" -y "nosilence/$f"; done
for f in $1/*.wav; do
fname=$(basename $f)
segdir=segments.$fname
rm -rf $segdir
mkdir $segdir
for channel in 0 1; do
@vadimkantorov
vadimkantorov / duration.sh
Last active May 3, 2022 16:40
Bash alias for audio/video file duration
# https://superuser.com/questions/650291/how-to-get-video-duration-in-seconds
# Usage: duration myfile.wav
alias duration="ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1"
# mkdir -p sample; find segments.* -name '*.wav' -type f | while read filename; do echo "$(duration $filename) $filename"; done | grep "^5\." | while read duration_ filename_; do cp $filename_ sample; done
@vadimkantorov
vadimkantorov / reludropoutinplace.py
Last active August 6, 2022 15:54
PyTorch module for inplace fused ReLU and Dropout
import torch
class ReLUDropout(torch.nn.Dropout):
def forward(self, input):
return relu_dropout(input, p = self.p, training = self.training, inplace = self.inplace)
def relu_dropout(x, p = 0, inplace = False, training = False):
if not training or p == 0:
return x.clamp_(min = 0) if inplace else x.clamp(min = 0)
@vadimkantorov
vadimkantorov / split_audio_by_silence.py
Last active September 5, 2023 19:16
Python script using webrtcvad for splitting an audio file into voice segments
# Usage: python3 split_audio_by_silence.py -i input_audio.m4a -o segments
# will save segments in mp3 format into the segments directory
# based on https://github.com/mozilla/DeepSpeech/tree/master/examples/vad_transcriber
# Dependencies: webrtcvad
import os
import argparse
import collections
import subprocess
import webrtcvad
@vadimkantorov
vadimkantorov / polynomial_decay_lr.py
Last active August 11, 2019 11:55
Polynomial decay learning rate scheduler for PyTorch (ported from OpenSeq2Seq and TensorFlow)
import torch
# ported from https://github.com/NVIDIA/OpenSeq2Seq/blob/master/open_seq2seq/optimizers/lr_policies.py and https://www.tensorflow.org/api_docs/python/tf/train/polynomial_decay
class PolynomialDecayLR(torch.optim.lr_scheduler._LRScheduler):
def __init__(self, optimizer, decay_steps, power = 1.0, begin_decay_at = 0, end_lr = 0.0, warmup_steps = 0, last_epoch = -1):
self.decay_steps = decay_steps
self.power = power
self.begin_decay_at = begin_decay_at
self.end_lr = end_lr
self.warmup_steps = warmup_steps
@vadimkantorov
vadimkantorov / novograd.py
Last active August 25, 2019 08:33
NovoGrad optimizer in PyTorch
# ported from https://github.com/NVIDIA/OpenSeq2Seq/blob/master/open_seq2seq/optimizers/novograd.py
# paper: https://arxiv.org/abs/1905.11286
# a recent NVidia's implementation in PyTorch: https://github.com/NVIDIA/DeepLearningExamples/blob/master/PyTorch/SpeechRecognition/Jasper/optimizers.py
import torch
class NovoGrad(torch.optim.Optimizer):
def __init__(self, params, lr=1.0, betas = (0.95, 0.98), eps=1e-8, weight_decay=0.0, dampening=False):
defaults = dict(lr=lr, betas=betas, eps=eps, weight_decay=weight_decay, dampening=dampening)
super(NovoGrad, self).__init__(params, defaults)