Skip to content

Instantly share code, notes, and snippets.


Stuart Langridge stuartlangridge

View GitHub Profile
stuartlangridge / transcript
Created July 19, 2022 19:48
PHP version of imul
View transcript
# this file is $a, $b, expected answer for imul($a, $b)
$ cat tests/imul.txt
-1, -2, 2
1, 2, 2
-1, 2, -2
1, -2, -2
-0, 0, 0
#!/usr/bin/env python3
Find "tubewhacks"; words or phrases whose letters appear in all but a single tube station's name
Yeah, I'm just here to ruin the fun of thinking them up, by applying code to the problem. Sorry.
import os
import textwrap
stuartlangridge /
Created August 13, 2021 15:04
A small script for Ian Lloyd. Pass text to it on stdin and it outputs that same text with spelling errors highlighted. Change the highlight characters at the top if you need to.
#!/usr/bin/env python3
import sys, subprocess
HIGHLIGHT_AFTER = "👈" # if you just want a highlight before, make this ""
cmd = ["aspell", "pipe"]
# add any extra options given to our command to the aspell command
if len(sys.argv) > 2:
cmd += sys.argv[1:]
for line in sys.stdin.readlines():
# feed the line to aspell; will throw obvious error on failure
stuartlangridge /
Created July 27, 2021 18:02
Unsubscribe from all Github repos for a specific org
#!/usr/bin/env python3
Github won't let you say "don't subscribe me to new repos" for
one specific org only. You can either turn off autosubscribe
for everything, or for nothing.
This is extremely annoying if you're added to a very busy
new organisation, most of which you don't care about. This is
because you don't want to turn off all autosubscriptions -- if your
friend adds you to her new repo as a committer, you still want
stuartlangridge /
Created July 26, 2021 19:47
Parse FabioLolix/LinuxTimeline to get the chain of ancestry for Linux distros and find the longest
#!/usr/bin/env python3
import requests
from requests_cache import CachedSession as MySession
MySession = requests.Session
def unstring(s):
stuartlangridge /
Created February 20, 2021 19:29
Pub quiz question: which country has produced the most million selling popstars per square km?
#!/usr/bin/env python3
import requests
import requests_cache
import urllib.parse
import os.path
requests_cache.install_cache(os.path.join(os.path.dirname(__file__), 'million_sellers'))
stuartlangridge /
Created May 26, 2020 23:33
A deno script to make a single plain HTML file version of the deno manual

Note that this is a very quick thing. In particular, it only handles two levels of documentation in the manual, and it doesn't include images. Both would need to be fixed for this to actually be useful; however, this was entirely sufficient to drop a copy onto my phone where I could read it while my stupid mobile operator pretends to fix my network, sigh, etc.

stuartlangridge /
Created November 28, 2019 12:19
stuartlangridge / example.js
Last active November 13, 2019 21:43
Exporting an SVG from Figma and identifying which SVG elements in the exported file correspond to which objects in Figma
View example.js
const getSvgNamesForNodes = () => {
// this is guesswork. When Figma has two nodes with the same name (say, "Union"),
// it serialises them into SVG with names "Union" and "Union_2", but it's not
// clear which one becomes "Union" and which "Union_2". It is theorised that this
// is done in the same order that .findAll returns, so we make use of that.
// Figma might decide to change this at any time, of course. It would be much
// nicer if there were an SVG export option which also serialised getPluginData()
// data as data-* attributes in the output SVG, but there isn't, yet.
let names = {};
let nameIndices = {};
import numpy as np
import glob
import markdown
import re
from bs4 import BeautifulSoup
def make_pairs(corpus):
for i in range(len(corpus)-1):
yield (corpus[i], corpus[i+1])