Skip to content

Instantly share code, notes, and snippets.

@joostrijneveld
joostrijneveld / 3fmnow.py
Last active September 26, 2016 19:10
Scrape whatever was last played on 3FM (in the current hour)
#! /bin/env python
from bs4 import BeautifulSoup
import requests
URL = "http://www.3fm.nl/welkliedjewasdat"
r = requests.get(URL)
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text, 'lxml')
@joostrijneveld
joostrijneveld / keyedit.c.patch
Created June 23, 2016 15:49
Editing GPG's keyedit.c to allow unsigned UIDs
--- a/g10/keyedit.c
+++ b/g10/keyedit.c
@@ -1877,7 +1877,7 @@ static struct
{ "nrsign", cmdNOP, 0,
N_("sign selected user IDs with a non-revocable signature")},
{ "debug", cmdDEBUG, 0, NULL},
- { "adduid", cmdADDUID, KEYEDIT_NOT_SK | KEYEDIT_NEED_SK, N_("add a user ID")},
+ { "adduid", cmdADDUID, KEYEDIT_NOT_SK, N_("add a user ID")},
{ "addphoto", cmdADDPHOTO, KEYEDIT_NOT_SK | KEYEDIT_NEED_SK,
N_("add a photo ID")},
@joostrijneveld
joostrijneveld / split.sh
Last active December 18, 2015 09:16
Splits a set of PDFs into two folders for TAs to check
TAS=( NAME1 NAME2 )
REST=rest
for ta in ${TAS[@]}; do
mkdir -p $ta;
done
mkdir -p $REST
for f in pdfs/*.pdf
do
@joostrijneveld
joostrijneveld / autoresponder.py
Created May 9, 2015 20:58
Facebook autoresponder plugin for Poezio
from plugin import BasePlugin
class Plugin(BasePlugin):
def init(self):
self.api.add_event_handler('conversation_msg', self.on_msg)
self.api.add_event_handler('private_msg', self.on_msg)
def on_msg(self, msg, tab):
tab.command_say('[Automatic response] I stopped reading Facebook chat. Do try in some other way!')
@joostrijneveld
joostrijneveld / 2015_R1A_B.py
Created April 25, 2015 18:25
The partial solution as listed in the GCJ contest analysis for 2015-R1A-B-small seems to contain an infinite loop
from fractions import gcd
from itertools import count
def naive_get_barber_number(N):
customer = 1;
for T in count(1):
for barber in range(B):
if T % M[barber] == 0:
# at this point N = 0 and customer > 0..
@joostrijneveld
joostrijneveld / scpscreenshots.sh
Created March 3, 2015 10:34
Shell script that watches the desktop for screenshots (OSX default format) and then copies them to a remote using scp, leaving the URL available on the clipboard.
#! /bin/bash
# change the paths on line 9 and 10 to match your specific configuration
/usr/local/bin/fswatch -0 ~/Desktop | while read -d "" event; \
do \
if [[ ${event} == ~/Desktop/Screen* ]] && [[ -e ${event} ]]; then
newname=`cat /dev/urandom | env LC_CTYPE=C tr -dc 'a-zA-Z0-9' | head -c 16`
scp "${event}" example.com:/var/www/files/screenshots/$newname.png > /dev/null
echo -n "http://files.example.com/screenshots/$newname.png" | pbcopy
@joostrijneveld
joostrijneveld / homer.py
Created October 30, 2014 12:07
Homer Simpson using Turtle graphics, transcribed from http://youtu.be/UnLz7CaBSFU
from turtle import *
def Homer():
tShirt()
mouth()
rightEye()
face()
eyePositioning()
leftEye()
ear()
@joostrijneveld
joostrijneveld / triangles.py
Created October 21, 2014 12:39
This file contains the solution to Problem 67 of Project Euler
#! /usr/bin/env python
with open('p067_triangle.txt') as f:
triangle = [[int(y) for y in x.strip().split(' ')] for x in f.readlines()]
upsidedown = list(reversed(triangle))
rowpairs = zip(upsidedown, upsidedown[1:])
for bot, top in rowpairs:
for i, x in enumerate(top):
top[i] = x + max(bot[i], bot[i+1])
print(triangle[0][0])
@joostrijneveld
joostrijneveld / risk.py
Last active August 29, 2015 14:06
Computes if/when it makes sense for the defending player in Risk to choose to throw only one die (if allowed).
#! /usr/bin/env python
def printmatrix(matrix):
""" source:
http://stackoverflow.com/questions/13214809/pretty-print-2d-python-list """
s = [[str(e) for e in row] for row in [['['+str(n)+']' for n in range(1, 7)]]+matrix]
lens = [len(max(col, key=len)) for col in zip(*s)]
fmt = '\t'.join('{{:{}}}'.format(x) for x in lens)
table = ['['+str(n)+"]\t"+fmt.format(*row) for (row, n) in zip(s, range(0, len(s)+1))]
@joostrijneveld
joostrijneveld / gpg2qrcodes.sh
Created May 20, 2014 19:43
Producing printable QR codes for persistent storage of GPG private keys
# Heavily depends on:
# libqrencode (fukuchi.org/works/qrencode/)
# paperkey (jabberwocky.com/software/paperkey/)
# zbar (zbar.sourceforge.net)
# Producing the QR codes:
# Split over 4 codes to ensure the data per image is not too large.
gpg --export-secret-key KEYIDGOESHERE | paperkey --output-type raw | base64 > temp
split temp -n 4 IMG
for f in IMG*; do cat $f | qrencode -o $f.png; done