Skip to content

Instantly share code, notes, and snippets.

View mpentler's full-sized avatar

Mark Pentler mpentler

View GitHub Profile
@mpentler
mpentler / tcas_analysis.py
Last active September 21, 2025 20:43
TCAS RA analysis
#!/usr/bin/env python3
import os
import sys
import gzip
import json
import pandas as pd
from datetime import datetime, timedelta
from shapely.geometry import shape, MultiPoint, mapping
from collections import Counter
import argparse
@mpentler
mpentler / safe_listbox.py
Last active July 21, 2025 20:52
CLI Video player Listbox class
# Horrorbox v1.4
# List box used for file panel with bounds checking
import urwid
class SafeListBox(urwid.ListBox):
def keypress(self, size, key):
if key in ('up', 'down'):
focus_pos = self.focus_position
max_pos = len(self.body) - 1
@mpentler
mpentler / file_list_panel.py
Last active July 21, 2025 20:54
CLI Video player file list panel
# Horrorbox v1.4
# File panel class, containing navigation and display functions
import os
import urwid
from ui.safe_listbox import SafeListBox
class FileListPanel:
def __init__(self, root_path, video_extensions):
self.root_path = root_path
@mpentler
mpentler / debug_panel.py
Last active July 21, 2025 20:52
CLI VIdeo player debug panel
# Horrorbox v1.4
# Debug panel class
import urwid
from ui.safe_listbox import SafeListBox
from datetime import datetime
class DebugPanel:
def __init__(self, max_lines=10):
self.max_lines = max_lines
@mpentler
mpentler / horrorbox.py
Last active July 21, 2025 21:16
RPi CLI video player using MPV and GPIO for control (or ssh)
#!/home/pi/horrorbox/bin/python
# Horrorbox v1.4
from ui.debug_panel import DebugPanel
from ui.file_list_panel import FileListPanel
import urwid
import os
import subprocess
import shutil
import RPi.GPIO as GPIO
@mpentler
mpentler / findreplace.py
Created January 1, 2025 15:26
Find replace aircraft database rows from another file
import csv
with open('aircraft.csv', 'r', newline='') as db_csvfile:
db_reader = csv.reader(db_csvfile, delimiter = ';')
db_data = list(db_reader)
with open('replacements.csv', 'r', newline='') as replacements_csvfile:
replacements_reader = csv.reader(replacements_csvfile, delimiter = ';')
replacements_data = list(replacements_reader)
@mpentler
mpentler / zork2.sh
Last active February 24, 2024 02:39
Script for running Zork as multiple possible users
#!/bin/bash
export HOME="/home/pi"
export TERM="linux"
read CALL
CALL=$(echo "$CALL" | tr -d '\r')
mkdir -p "/home/pi/zork/nodesaves/$CALL"
echo "Hello $CALL! Do you wish to load a saved game? [y/N]"
@mpentler
mpentler / adsb-stats.py
Created November 17, 2023 16:16
Adsb stats parser
import time
import json
import time
import os
import json
from contextlib import closing
from urllib.request import Request, urlopen
#--------- URLS for receiver, accepts multiple
urls= ["http://127.0.0.1/tar1090/data/aircraft.json"]
@mpentler
mpentler / feedcheck.py
Last active September 25, 2023 14:17
Feed checker script for IDing feeders with issues
#!/usr/bin/python3
# OARC ADS-B Feed Checker v4 - Mark 2M0IIG with additional help from Roger M7TEE
# This script reads in the readsb and mlat-server clients.json files and presents the information in a clearer manner
# to identify users with issues
import json
import argparse
colour_red = "\033[1m\033[91m***"
colour_yellow = "\033[1m\033[93m***"
@mpentler
mpentler / bpq32.cfg
Last active February 14, 2024 13:09
Current BPQ32 node configuration
SIMPLE
LOCATOR=IO85gw ; Set to your Grid Square to send reports to the BPQ32 Node Map s ystem
MAPCOMMENT=2M0IIG Experimental Node<br>144.9375 | Other bands/modes to follow
EnableM0LTEMap=1 ; new packet node map
NODECALL=2M0IIG-7
NODEALIAS=BRXBRN
SAVEMH=1
NODESINTERVAL=15