Skip to content

Instantly share code, notes, and snippets.

View Dan-Q's full-sized avatar
🦆

Dan Q Dan-Q

🦆
View GitHub Profile
@Dan-Q
Dan-Q / geocaching-extent.php
Created April 3, 2024 15:44
Draws the smallest possible convex polygon that surrounds a set of successful geocaching finds/geohashpoint expeditions. See: https://danq.me/geo-limits
<?php
/**
* Given an array of points, returns the convex hull over those points.
*/
function convex_hull_over( array $points ): array {
$cross = function($o, $a, $b) {
return ($a[0] - $o[0]) * ($b[1] - $o[1]) - ($a[1] - $o[1]) * ($b[0] - $o[0]);
};
$pointCount = count($points);
@Dan-Q
Dan-Q / list-detected-woocom-components.user.js
Created April 2, 2024 21:04
Userscript to report WooCom components detected on each visited page, by logging to console.log
// ==UserScript==
// @name WooCom Component Enumerator
// @namespace woo.com.danq.me
// @match https://woo.com/*
// @match https://woocommerce.test/*
// @grant none
// @version 1.0
// @author -
// @description Lists detected WooCom PHP/React components in the console.log as-you-browse.
// ==/UserScript==
SITE = 'https://danq.me/';
NEW_SIZE = 234;
me = document.querySelector(`a[href="${SITE}"]`).closest('li');
before = me.querySelector('.before');
after = me.querySelector('.after');
i = parseInt(after.innerText);
ticker = function(){
i += (i > NEW_SIZE ? -1 : 1);
before.style.setProperty('--data-size', i);
@Dan-Q
Dan-Q / footnotes-for-wordpress.php
Created February 26, 2024 10:01
Include from your theme file. Use [footnote]This is the content of my footnote.[/footnote] to add a footnote.
<?php
/**
* Footnotes
*/
function footnote($atts, $content = '') {
global $footnote_number, $footnote_contents;
$footnote_number ??= 0;
$footnote_contents ??= [];
$footnote_number++;
@Dan-Q
Dan-Q / setup-foundry.sh
Last active September 29, 2023 13:28
Configuration script for a basic setup of FoundryVTT on Debian 12. See https://danq.me/easy-foundryvtt for a full explanation.
# Foundry + Nginx install script for Debian 12
# --------------------------------------------
# Perequisites:
# - unzip - used to decompress Foundry once downloaded
# - nodejs - required to run Foundry
# - nvm - used to install pm2
# - ufw - firewall: used to ensure that connections can only be made to Foundry via Nginx, among other benefits
# - nginx - provides HTTPS frontend to Foundry
# - certbot - gets free SSL certificate, used by Nginx
@Dan-Q
Dan-Q / download-geocache-logs.user.js
Created August 23, 2023 14:59
Userscript to download all of the logs on a Geocaching.com cache page as JSON
// ==UserScript==
// @name Download JSON cachelogs
// @namespace dllogs.geocaching.danq.me
// @match https://www.geocaching.com/geocache/*
// @grant GM_registerMenuCommand
// @version 1.0
// @author Dan Q
// @description Download all logs against a particular Geocaching.com geocache as a JSON file
// ==/UserScript==
@Dan-Q
Dan-Q / WEREWOLV.BAS
Created July 17, 2023 14:43
Source code for the 1985 Amstrad CPC version of Tim Hartnell's Werewolves and Wanderer, as adapted for publication in The Amazing Amstrad Omnibus by Martin Fairbanks.
10 REM WEREWOLVES AND WANDERER
20 GOSUB 2600:REM INTIALISE
30 GOSUB 160
40 IF RO<>11 THEN 30
50 PEN 1:SOUND 5,100:PRINT:PRINT "YOU'VE DONE IT!!!":GOSUB 3520:SOUND 5,80:PRINT "THAT WAS THE EXIT FROM THE CASTLE!":SOUND 5,200
60 GOSUB 3520
70 PRINT:PRINT "YOU HAVE SUCCEEDED, ";N$;"!":SOUND 5,100
80 PRINT:PRINT "YOU MANAGED TO GET OUT OF THE CASTLE"
90 GOSUB 3520
100 PRINT:PRINT "WELL DONE!"
@Dan-Q
Dan-Q / radio.garden-region-bypass.user.js
Last active March 15, 2023 11:57
Userscript to facilitate bypassing the (UK) region lock on radio.garden
// ==UserScript==
// @name radio.garden: bypass region restrictions (e.g. UK)
// @namespace dqne.me.radio.garden
// @match http://radio.garden/*
// @grant none
// @version 1.0
// @author Dan Q <https://danq.me/>
// @description Adds a secondary player interface to radio.garden which still works even on region-blocked radio stations. Allows listening to non-UK stations from the UK.
// @run-at document-idle
// ==/UserScript==
@Dan-Q
Dan-Q / strikecalendar-to-ical.rb
Last active February 23, 2023 15:38
Tool to extract strike action calendar from www.strikecalendar.co.uk and convert to .ics format
#!/bin/env ruby
# Run with e.g.:
# ruby strikecalendar-to-ical.rb > output.ics
# PLEASE READ AND UNDERSTAND SOURCE CODE FIRST: THERE'S A MAJOR SECURITY RISK ON LINE 25
# Dependencies
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
@Dan-Q
Dan-Q / jigidi-helper.js
Last active April 4, 2024 20:31
Experimental under-development code to streamline Jigidi solving.
window.jColors = ['red', 'blue', 'brown', 'orange', 'yellow', 'pink', 'lightblue', 'lightgreen', 'lightgray'];
window.lColors = ['white', 'black', 'purple', 'darkgray', '#009'];
window.lWidths = [5, 10, 20];
window.jCols = parseInt(document.getElementById('info-creator').innerText.match(/(\d+)×/)[1]);
window.jC = 0;
CanvasRenderingContext2D.prototype.putImageData = function(imageData, dx, dy){
const col = window.jC % window.jCols;
const row = Math.floor(window.jC / window.jCols);
this.fillStyle = window.jColors[col % window.jColors.length];
this.fillRect(-1000,-1000,2000,2000);