Skip to content

Instantly share code, notes, and snippets.

View dcollien's full-sized avatar

David Collien dcollien

View GitHub Profile
import time
import urllib.parse
import hmac
import hashlib
import base64
SB_NAME = "ol-events"
EH_NAME = "ol-user-metrics"
SAS_NAME = "collect-user-metric"
SAS_VALUE = "EXAMPLE-TOKEN"
from datetime import datetime
import re
import string
def to_course_code(course_path, creation_date):
"""
Turns a course path into a short course code.
Max 14 characters (but likely under 10).
Not guaranteed to be unique
but has month/year of creation date, and single character hash
const uncurry = (fn) => (...args) => args.reduce((fn, arg) => fn(arg), fn);
const curry = (fn) => {
const collect = (args, arg) => {
const collected = args.concat([arg]);
return (
collected.length >= fn.length
? fn.apply(null, collected)
: collect.bind(null, collected)
);
};
@dcollien
dcollien / config.py
Last active September 12, 2018 08:18
ESP8266 Traffic Lights
import socket
import network
import time
CONTENT = b"""\
HTTP/1.0 200 OK
<!doctype html>
<html>
@dcollien
dcollien / classify_text.py
Last active August 22, 2018 20:47
Simple Text Classification using NLTK Naive Bayes and TextRank
import nltk
from summa.keywords import keywords
def get_features(text):
# get the top 80% of the phrases from the text, scored by relevance
return dict(keywords(text, ratio=0.8, split=True, scores=True))
def train_texts(classified_texts):
# process the training set
features = []
@dcollien
dcollien / config.py
Last active August 16, 2018 05:52
OAuth2.0 Sign-On for various providers, and retrieving user details: id, name, email, photo
class Config(object):
def __init__(self, **entries):
self.__dict__.update(entries)
self._entries = entries
def __repr__(self):
return "Config(%s)" % str(self._entries)
def __getattr__(self, value):
return None
const WebSocket = require('ws');
const PythonShell = require('python-shell');
const tmp = require('tmp');
const shortid = require('shortid');
const fs = require('fs');
const mkdirp = require('mkdirp');
// TODO clean up code, error handling, watchdog timer
const wss = new WebSocket.Server({ port: 8080 });
infinity = float("inf")
def argmin(seq, fn):
"""Return an element with lowest fn(seq[i]) score; tie goes to first one.
>>> argmin(['one', 'to', 'three'], len)
'to'
"""
best = seq[0]; best_score = fn(best)
for x in seq:
x_score = fn(x)
#!/usr/bin/env python
import pyrax
pyrax.set_setting('identity_type', 'rackspace')
pyrax.set_credentials(RACKSPACE_API_USER, RACKSPACE_API_KEY, region='SYD')
def server_list_generator(detailed=True, search_opts=None, limit=None):
servers = pyrax.cloudservers.servers.list(detailed=detailed,
search_opts=search_opts,
const ContrastTools = {
relLuminance(rgba) {
// http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
var rgb = rgba.slice();
for (var i = 0; i < 3; i++) {
var channel = rgb[i] / 255;
rgb[i] = channel < .03928 ? channel / 12.92 : Math.pow((channel + .055) / 1.055, 2.4);
}