Skip to content

Instantly share code, notes, and snippets.


Stephen Holdaway stecman

View GitHub Profile
stecman / YahooHistoricStockApi.php
Last active Oct 22, 2020
PHP classes to get stock data from various Yahoo finance APIs
View YahooHistoricStockApi.php
* Get historic stock symbol information from Yahoo
* Based on
class YahooHistoricStockApi
stecman / AutoCrop.lua
Last active Oct 20, 2020
Lightroom plugin to calculate image crops using OpenCV
View AutoCrop.lua
-- 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 /
Last active Oct 17, 2020
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 performed on 64-bit Linux with a Python 3.6 target.


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 /
Last active Oct 11, 2020
Brother P-Touch PT-P300BT bluetooth driver python

Controlling the Brother P-Touch Cube label maker from a computer

The Brother PTP300BT label maker is intended to be controlled using the official Brother P-Touch Design & Print iOS/Android app. The app has arbitrary limits on what you can print (1 text object and up to 3 preset icons), so I thought it would be a fun challenge to reverse engineer the protocol to print whatever I wanted.

Python code at the bottom if you want to skip the fine details.


Intitially I had a quick peek at the Android APK to see if there was any useful information inside. The code that handles the communication with the printer in Print&Design turned out to be a native library, but the app clearly prepares a bitmap image and passes it to this native library for printing. Bitmaps are definitely something we can work with.

stecman / SwitchOutput.ahk
Last active Sep 18, 2020
AutoHotKey script to toggle audio output device in Asus Xonar Essence STX control panel
View SwitchOutput.ahk
; 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 /
Last active Sep 16, 2020
Linux iptables whitelist country for specific ports
# Run this to update the country whitelist chain in iptables
# This is confingured for New Zealand. Other CIDR ranges can be found at:
# To use this chain, configure iptables to redirect some traffic to it. Eg:
stecman / SConscript
Last active Aug 28, 2020
STM8 WS2812 hacked together demo
View SConscript
import os
# Device definition for the stm8s.h header
# This enables available features of the device library.
# Programmer argument for stm8flash (stlink or stlinkv2)
STM8_PROGRAMMER = "stlinkv2"
# Target device argument for stm8flash
stecman /
Last active Jul 24, 2020
Steam auto trader

Maximum Hax

Automates the UI actions (clicks, typing) to sell Steam trading cards from the Steam web interface. To use this:

  1. Log into your Steam account in Chrome
  2. Go to [Username] -> Inventory
  3. Open the Javascript console (View -> Developer -> Javascript Console)
  4. Paste in the entire script below and press enter
  5. To start selling all trading cards in your inventory, type doHax() in the console and press enter
  6. ...
stecman /
Last active Jun 11, 2020
SCons build script for STM8 / STM8S with SDCC

SCons + SDCC for STM8S

Setting up SCons to build using SDCC was fairly time consuming for someone new to SCons, so here's a basic working config to get you started.

With some tweaking this should also work for other architectures that SDCC supports (z80, z180, mcs51, r2k, etc).

Required software

SCons (build tool)

stecman / monday-for-week.php
Last active Apr 27, 2020
Reliable PHP function to return Monday for week
View monday-for-week.php
* Find the starting Monday for the given week (or for the current week if no date is passed)
* This is required as strtotime considers Sunday the first day of a week,
* making strtotime('Monday this week') on a Sunday return the adjacent Monday
* instead of the previous one.
* @param string|\DateTime|null $date
You can’t perform that action at this time.