Skip to content

Instantly share code, notes, and snippets.

View stuartlangridge's full-sized avatar

Stuart Langridge stuartlangridge

View GitHub Profile
@stuartlangridge
stuartlangridge / million_sellers_by_country.py
Created February 20, 2021 19:29
Pub quiz question: which country has produced the most million selling popstars per square km? https://twitter.com/dsquareddigest/status/1363092145301827586
#!/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'))
#https://www.officialcharts.com/chart-news/the-best-selling-singles-of-all-time-on-the-official-uk-chart__21298/
@stuartlangridge
stuartlangridge / README.md
Last active November 25, 2020 18:30
Gimp 2.8 Sprite Sheet from layer groups (python-fu)

A thing to convert a Gimp image of multiple layered sprites into a sprite sheet.

The way I make pixel art sprites is this: imagine you're drawing, say, a knight. I have all the frames for that knight in one great big Gimp XCF image, organised into groups.

So there's a layer group called "Running"; this defines a whole sprite, in multiple frames. In there, there's a set of layer groups, one per frame, called "Running 1" to "Running 9" (for example). In "Running 1", there's one or more layers which all go together to form that one single frame. This works out neatly because you can make an individual frame out of a few different parts, and edit those parts separately. This makes it easy to copy unchanging parts from one frame to the next, while just changing the bits that are different.

@stuartlangridge
stuartlangridge / README.md
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
stuartlangridge / README.md
Created November 28, 2019 12:19
SCRIPT-8
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])
@stuartlangridge
stuartlangridge / mpnames.py
Created January 31, 2018 17:22
A simple script to count UK MPs, since Parliament began, by first name, so I could post https://twitter.com/sil/status/958750576900296706
#!/usr/bin/env python3
"""Daft script to count MPs by first name.
Expects to find people.json from https://github.com/mysociety/parlparse/tree/master/members
Run as "python3 mpnames.py Keir" or similar.
Written to answer Jess Phillips' question at https://twitter.com/sil/status/958750576900296706
"""
import json, pprint, sys
fp = open("people.json", encoding="utf-8")
data = json.loads(fp.read())
fp.close()
~/Scra+/ralight-configs $ python3 -c "import json; print(json.load(open('broken-config.json')))"
[snip]
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 10 column 20 (char 151)
~/Scra+/ralight-configs $ python3 -c "import yaml; print(yaml.safe_load(open('broken-config.yaml')))"
[snip]
yaml.scanner.ScannerError: while scanning a simple key
in "broken-config.yaml", line 9, column 5
could not found expected ':'
in "broken-config.yaml", line 10, column 18
@stuartlangridge
stuartlangridge / coalition2017.py
Created June 9, 2017 10:25
Work out possible coalitions for the UK 2017 general election
"""2017 general election
Given the vote totals, we have a hung parliament. Work out how coalitions
might be put together and display possibilities.
"""
import itertools
# vote totals correct as of about 10.30am Friday 9th June 2017
votes= {
'Conservative': 318, 'Sinn Fein': 7, 'DUP': 10,
'Sylvia Hermon': 1, 'Plaid Cymru': 4, 'Labour': 261, 'SNP': 35,
@stuartlangridge
stuartlangridge / unsong-initials-lcs.py
Created May 7, 2017 13:38
Calculate longest subsequences from Unsong's chapter initials to get a hint about what, if anything, it's a notarikon for
#!/usr/bin/env python3
"""Parses the text of Unsong, and the list of chapter initials, and finds
longest common subsequences. The idea here is that if the notarikon formed
by the first letter of each chapter conceals a secret message, then perhaps
parts of that message have already been revealed in the book... so if there
were "NIEAC" is somewhere in the list of chapter initials, then that probably
stands for "Nothing Is Ever A Coincidence", as per the many times that phrase
is mentioned. Idea from 75thTrombone at
https://www.reddit.com/r/unsong/comments/69k1im/preemptive_final_exam_suggestion/
This script calculates those substrings. The answers are not all that promising.

Keybase proof

I hereby claim:

  • I am stuartlangridge on github.
  • I am sil (https://keybase.io/sil) on keybase.
  • I have a public key ASDGq9mbJlRG62EgMM5EdILRa4w4G3NimkeoCWxL6bQbQwo

To claim this, I am signing this object: