Skip to content

Instantly share code, notes, and snippets.

Thomas Grainger graingert

Block or report user

Report or block graingert

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View Dockerfile
FROM ubuntu:xenial
COPY ./apt-keys.pub /tmp/apt-keys.pub
RUN echo "deb http://ppa.launchpad.net/deadsnakes/ppa/ubuntu xenial main" > /etc/apt/sources.list.d/deadsnakes.list \
&& apt-key add /tmp/apt-keys.pub && rm /tmp/apt-keys.pub \
&& apt-get update && apt-get install -y --no-install-recommends libgtk2.0 libwebkitgtk-3.0 \
build-essential python2.7-dev python3.7-dev python3.7-venv python-virtualenv \
libjpeg8 libtiff5 libsdl1.2debian libnotify4 freeglut3 libsm6 \
libgl1-mesa-glx libgstreamer-plugins-base0.10 libwebkit2gtk-4.0-37 git \
&& rm -rf /var/lib/apt/lists/*
@graingert
graingert / import_finder.py
Last active Apr 10, 2019
import_finder.py
View import_finder.py
import pathlib
import ast
def _packages(path):
return _include_parents(path.with_suffix('').parts)
def _include_parents(parts):
p = list(parts)
View eslint.py
import json
with open('./foo.json') as df:
dump = json.load(df)
for f in dump:
fp = f['filePath']
rules = ', '.join(sorted(set(m['ruleId'] for m in f['messages'])))
if not rules:
continue
@graingert
graingert / repl.scala
Created Dec 20, 2017 — forked from fedesilva/repl.scala
Voldemort types in scala
View repl.scala
f@omoikane:~$ scala
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_31).
Type in expressions to have them evaluated.
Type :help for more information.
scala> :load Workshop/mine/scala-misc/voldemort.scala
Loading Workshop/mine/scala-misc/voldemort.scala...
defined module Dungeon
scala> val nemesis = Dungeon curse "fedesilva"
View ajaxcall.js
map.on('click', function(event){
var x1_wgs;
var y1_wgs;
async function ajax(x,y){
const data = $.ajax({
url:'/geocoding/egsa_2_wgs.php?x='+x+'&y='+y,
async:true,
type:'GET',
View List.js
class List {
constructor() {
this.arr = undefined;
this.length = 0;
this.inLength = 0;
this.dirty = false;
this.prev = undefined;
}
push(v) {
@graingert
graingert / Dockerfile
Created Jun 26, 2017 — forked from tabiodun/Dockerfile
Dockerfile for tabiodun/selenium-chrome-headless
View Dockerfile
FROM selenium/node-base:3.4.0-dysprosium
USER root
ARG CHROME_VERSION="google-chrome-beta"
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \
&& apt-get update -qqy \
&& apt-get -qqy install \
@graingert
graingert / gist:bf23f6f4193679272307cc2c1ac1e763
Created May 15, 2017 — forked from colin-kiegel/gist:b35d278d6ed5251dfa85
regex replace multi-line + in multiple files
View gist:bf23f6f4193679272307cc2c1ac1e763
$FILES="*.rs"
$REGEX="s#(.*)\n(.*)/\2\n\1/"
find . -name "$FILES" | xargs perl -0777 -pi -e '$REGEX'
# flag: -0777 tells perl to read the file as a whole
# replace '-pi' with '-pi.bak' to create backups
@graingert
graingert / LICENSE
Last active Mar 30, 2017
iserror.js
View LICENSE
The MIT License (MIT)
Copyright (c) 2016 Thomas Grainger.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
View EitherReadsExample.scala
import JsEither._
case class Page(id: Int, name: String, screen_name: String, is_closed: Int, photo_50: String, photo_100: String, photo_200: String)
object Page {
implicit val format = Json.format[Page]
}
case class Profile(id: Int, first_name: String, last_name: String)
object Profile {
implicit val format = Json.format[Profile]
You can’t perform that action at this time.