Skip to content

Instantly share code, notes, and snippets.

View stecman's full-sized avatar

Stephen Holdaway stecman

View GitHub Profile
@stecman
stecman / SwitchOutput.ahk
Last active September 18, 2020 03:27
AutoHotKey script to toggle audio output device in Asus Xonar Essence STX control panel
; Switch output between headphones and speakers in Asus Xonar STX Control Panel
; On Linux can be done through easily through the ALSA command line tools, but on Windows it's GUI all the way down
;
; This assumes the Xonar Essence STX Audio Center is already running
SetTitleMatchMode, 3 ; Exact match
DetectHiddenWindows, On
ControlWindowTitle := "Xonar Essence STX Audio Center"
@stecman
stecman / nz-whitelist.sh
Last active September 16, 2020 05:33
Linux iptables whitelist country for specific ports
#!/bin/bash
# Run this to update the country whitelist chain in iptables
#
# This is confingured for New Zealand. Other CIDR ranges can be found at:
#
# https://www.ipdeny.com/ipblocks/
#
# To use this chain, configure iptables to redirect some traffic to it. Eg:
#
@stecman
stecman / STM8S_programming_examples.md
Last active January 7, 2024 01:44
STM8S code examples

This is a collection of code snippets for various features on the STM8S family microcontrollers (specifically the STM8S003F3). These are written against the STM8S/A SPL headers and compiled using SDCC.

Some of this controller's functions aren't particularly intuitive to program, so I'm dumping samples for future reference here. These are based on the STM8S documentation:

Run at 16MHz

@stecman
stecman / _stm32f070-libopencm3-usb-clock.md
Last active February 23, 2020 22:21
OpenCM3 USB clock configuration

USB with libopenCM3 on the STM32F070F6

This specific part doesn't work out of the box with the OpenCM3 STM32 F0 USB example/testcase for two reasons:

  • The USB pins (PA11/PA12) are hidden behind a mux on pins PA9/PA10 and need to be switched in. This physically connects the USB peripheral to the pins.
  • The STM32F070 must use an external oscillator to drive the 48MHz USB clock. My design used a 12MHz HSE, which libopencm3 didn't have a built-in clock configuration function for.
@stecman
stecman / config.txt
Last active September 14, 2021 18:39
Raspberry Pi 2 B+ 1440x2560 resolution config
# Enable 1440x2560 resolution (mobile phone screen that expects this orientation)
hdmi_group=2
hdmi_mode=87
hdmi_pixel_freq_limit=400000000
hvs_priority=0x32ff
max_framebuffer_width=1440
max_framebuffer_height=2560
framebuffer_width=1440
framebuffer_height=2560
@stecman
stecman / dump-pyc-with-gdb.md
Last active March 25, 2024 09:20
Dumping all bytecode from a packaged Python application

This is a technique for extracting all imported modules from a packaged Python application as .pyc files, then decompiling them. The target program needs to be run from scratch, but no debugging symbols are necessary (assuming an unmodified build of Python is being used).

This was originally performed on 64-bit Linux with a Python 3.6 target. The Python scripts have since been updated to handle pyc files for Python 2.7 - 3.9.

Theory

In Python we can leverage the fact that any module import involving a .py* file will eventually arrive as ready-to-execute Python code object at this function:

PyObject* PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals);
@stecman
stecman / hackaday-to-md.py
Last active June 30, 2022 02:21
Hackaday.io article to markdown converter for migrating or backing up projects/posts
#!/usr/bin/env python3
# Convert hackaday posts to markdown with images stored nearby
#
# This needs the following modules to run:
#
# - https://github.com/matthewwithanm/python-markdownify
# - https://2.python-requests.org/en/master/
# - https://www.crummy.com/software/BeautifulSoup/
@stecman
stecman / AutoCrop.lua
Last active March 14, 2024 15:56
Lightroom plugin to calculate image crops using OpenCV
-- LR imports
local LrApplication = import("LrApplication")
local LrApplicationView = import("LrApplicationView")
local LrBinding = import("LrBinding")
local LrDevelopController = import("LrDevelopController")
local LrDialogs = import("LrDialogs")
local LrExportSession = import("LrExportSession")
local LrFileUtils = import("LrFileUtils")
local LrFunctionContext = import("LrFunctionContext")
local LrLogger = import("LrLogger")
@stecman
stecman / _NMEA GPS datetime for AVR.md
Last active October 16, 2019 23:29
NMEA GPRMC sentence parsing for low memory microcontrollers: read GPS date and time from UART

Date/time from GPS without storing NMEA string

This is a first pass at reading the date and time from a serial GPS device on a tiny microcontroller. The target device is an ATTiny13A with only 64 bytes of RAM, which isn't enough to store the full 79 characters of a NMEA sentence, so something like minmea wouldn't work (their API passes around full sentence strings).

When compiled with avr-gcc -Os, this is around 500 bytes of program space. The size can be reduced by 100 bytes if the handling of checksums is removed.

@stecman
stecman / BaseModel.php
Last active August 28, 2021 23:41
Phalcon PHP modifiable array assignment of relationships on new objects
<?php
namespace Soulbudget\Model;
use Phalcon\Mvc\Model;
use Soulbudget\Model\Relations\UnsavedRelationList;
/**
* Model that allows read/write access to relation arrays on unsaved instances.
*/