Skip to content

Instantly share code, notes, and snippets.

@greg-randall
greg-randall / trim_old.py
Last active September 17, 2024 14:30
Remove items that aren't from 2024 from a wordpress export.
import xml.etree.ElementTree as ET
# Parse the XML file and get the root
tree = ET.parse('wordpress_export.xml')
root = tree.getroot()
# Find the <channel> element
channel = root.find('channel')
total = 0
@greg-randall
greg-randall / lat-lon-mon.py
Created February 25, 2024 01:00
Human Readable Moon Phase from Latitude & Longitude
from datetime import datetime
from skyfield.api import load
from skyfield.framelib import ecliptic_frame
from tzfpy import get_tz
import pytz
def human_moon(lat, lon):
ts = load.timescale()
# Get the current time in the specified timezone
@greg-randall
greg-randall / gist:b339995a6ba3c4cf8e04ddb392cb8499
Last active June 13, 2024 16:37
Generate QR Code for URL
# --background=00000000 makes a transparent background, to make it easier for placement in other materials
qrencode -s 60 -l H --background=00000000 -o "output.png" "https://www.asdf.com/querty"
pngcrush output.png output_c.png
@greg-randall
greg-randall / role-limiter.php
Created June 12, 2024 18:50
WordPress plugin to limit editing of pages and their children to certain user roles.
<?php
/**
* Plugin Name: Role-Based Page Editor Limitations
* Description: This plugin restricts editing capabilities of specific pages to certain user roles. It dynamically creates roles if they don't exist and assigns them editor capabilities. It then checks if a user with a specific role is trying to edit a page that they're not assigned to, and if so, it removes their editing capabilities for that page. Edit the $role_page_map array to specify which roles can edit which pages.
* Version: 1
* Author: Greg R.
*/
/* For example you want to make it so that some peolple at your company can edit /subpage/ and all the children under that page, so you can create a user role that restricts them to jus that section of the site. */
@greg-randall
greg-randall / crop-to-face.py
Created June 5, 2024 19:58
Crops a folder of headshots to the face that it finds in the image.
import os
import cv2
import matplotlib.pyplot as plt
from PIL import Image
# adjust these variables as necessary
dirname = "pix-for-crop"
put_dirname = "cropped"
simple_crop = False
@greg-randall
greg-randall / generate_audiobook.sh
Last active May 9, 2024 20:06
Audiobook Generator. Takes a text file, splits it up into chunks, runs it through the Edge-TTS, combines the files into a single wav file, and then reencodes into an Opus files for minimum size/maximum quality.
#!/bin/bash
# takes a text file and makes an audiobook of it ex:
# ./generate_audiobook.sh input_book.txt
# a few notes,
# first, you'll need to install edge-tts (pip3 install edge-tts), sox (sudo apt-get install sox), and
@greg-randall
greg-randall / llm_page.py
Last active April 19, 2024 18:37
Generate a headline, keywords, based on some values if you should read the article or not, plus a summary of a given article.
# run like:
# python3 llm_page.py "https://www.cnn.com/2023/12/09/business/cosmcs-mcdonalds-drinks/index.html"
# you can optionally pass in a debug flag as the second argument, like:
# python3 llm_page.py "https://www.cnn.com/2023/12/09/business/cosmcs-mcdonalds-drinks/index.html" True
import json
import requests
from termcolor import cprint
from collections import OrderedDict
from readability import Document
@greg-randall
greg-randall / index.php
Last active April 18, 2024 20:20
HTML Cleaner. Paste dirty html into a field, and it removes nearly all HTML attributes (except the ones you want -- src, href, alt, and a couple others), and formats. Using proper DOMDocument PHP parser.
<?php
/*
Note that the cleaner sends the html to DirtyMarkup for formatting.
Example input:
<div class=WordSection1>
<p class=MsoNormal align=center style='text-align:center'><span
style='font-size:16.0pt;line-height:107%;font-family:"Abadi Extra Light",sans-serif'>Test
Clean<o:p></o:p></span></p>
@greg-randall
greg-randall / page_pull.py
Created April 15, 2024 17:32
Try several methods of getting a webpage, starting with just a basic page download, then using lynx, then using Pyppeteer which runs Chrome.
import requests
import asyncio
from termcolor import cprint
from pyppeteer import launch
from pyppeteer_stealth import stealth
import subprocess
def page_content_vaild(page_content):
excluded_strings = ["Page Not Found", "Human Verification", "About Lynx"]
@greg-randall
greg-randall / gist:a1b02ee046f50d47fa6f2e543ac04085
Created April 6, 2024 12:03
Convert a folder one m4b at a time to opus. Edit line 4 for more or less any file format that contains audio.
#!/bin/bash
# Loop over all m4b files in the current directory
for input in *.m4b
do
# Print a message indicating the file being processed
echo "Processing file $input..."
# Use ffmpeg to convert the m4b file to a wav file
ffmpeg -i "$input" "${input%.*}.wav"