Skip to content

Instantly share code, notes, and snippets.

@bigjosh
bigjosh / aa-perisalsis.ino
Created October 30, 2025 17:50
AA LED animation for Room Service
#include <FastLED.h>
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
// Configuration for 3 LED strings
const int NUM_STRINGS = 3;
// String 1 - Pin D4
#define LED_PIN_1 4
@bigjosh
bigjosh / GdsTemplate1.bt
Created September 16, 2025 02:51
GDSII Template for 010 Editor
//--- 010 Editor v12.0 Binary Template
//
// File: GDSII.bt
// Author: Gemini
// Version: 2.2
// Purpose: To parse GDSII (Graphic Data System) stream files hierarchically.
// File Mask: *.gds, *.gdsii
// ID Bytes: 00 06 00 02
// History:
// 2.2 2025-09-12 - Fixed 'ReadBytes' error in GDSReal8 struct.
@bigjosh
bigjosh / BB EXtractor.ahk
Created August 7, 2024 05:00
A horrible AutoHotKey script to semi-automate the extraction of a directory full of Blackberry IPD backup files using BlackBerry Extractor.
#Requires AutoHotkey v2.0
^j::
{
WinActivate "BlackBerry Backup Extractor"
WinWaitActive "BlackBerry Backup Extractor"
ControlClick "WindowsForms10.BUTTON.app.0.282af8c_r12_ad11"
Sleep 100
REM Move all of the files from a recently inserted USB drive to a directory on a local hard drive.
REM Edit these to set the correct paths for your USB drive and the location where you want the files to end up.
set "SRC=J:\RECORD"
set "DST=D:\Users\josh\Documents\OrsonEar"
REM This should be set up inside Task Schedualer to run on the follwoing event:
REM Log : Microsoft-Windows-DeviceSetupManager/Admin
REM Source : DeviceSetupManager
REM Event ID : 112
VOR=0 (Voice Activation On=1; Off=0. I prefer continuous capture. Bits are free.)
LED=0 (Led On after 10 Sec=1; Led Off after 10 Sec=0. I turn the LED off to save battery and not be anoying in the dark)
SEG=300 (File Segment Time=1~999, I use 300 mins=5 hours per segment)
TIME=20231121181704 (Set this to the current time before saving the file. I use GMT)
/*
* Below is a a modified version of the TI MSP430 LCDE_01 example named `msp430fr413x_LCDE_01.c`
* It simply displays the numbers 1-6 on the built-in LCD display on the MSP-EXP430FR4133 Lanuchpad.
*
* I could not find any ultra-low power examples of an MSP430 driving and LCD, so I started with
* the TI code and kept updating it to try to use less power using things I noticed in the datasheets.
*
* I was able to drop the current usage from 200uA down to less than 1uA without any noticable change in functionality.
*
* I hope to write a full article about this and other MSP430 power optimization techniques on josh.com soon.
@bigjosh
bigjosh / NoPartsBatteryGauge.c
Last active April 7, 2022 09:51
Sample code for a no parts, no pins, no power supply voltage detection on ATTINY84
/*
* NoPartsBatteryGuageAVR.c
*
* This is a simplified demonstration of how to detect power supply voltage by using the on chip
* analog-to-digital converter to measure the voltage of the internal band-gap reference voltage.
*
* The code will read the current power supply voltage, and then blink an LED attached to pin 6 (PA7).
*
* 1 blink = 1 volts <= Vcc < 2 volts (only applicable on low voltage parts like ATTINY84AV)
* 2 blinks = 2 volts <= Vcc < 3 volts
/*********************************************************************
This is an example for our nRF52 based Bluefruit LE modules
Pick one up today in the adafruit shop!
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
MIT license, check LICENSE for more information
// put your main code here, to run repeatedly:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
void setup() {
// put your setup code here, to run once:
main();
@bigjosh
bigjosh / nbits2target.js
Last active June 1, 2021 01:15
Convert bitcoin `nBits` field into a hex string value for `target` using only string functions
// Returns a 64 char (256 bit) hex string of the target
// Based on https://developer.bitcoin.org/reference/block_chain.html#target-nbits
function nbits2target( nbits ) {
const significand = nbits & 0x00ffffff;
const exponent = nbits >>> (8*3);
// (all `*2` are becuase calcuations are in bytes, but in string 1 byte = 2 letter places)
const fixed6SigString = (significand.toString(16)).padStart( 3*2 , "0");