Skip to content

Instantly share code, notes, and snippets.

@kongmunist
kongmunist / Bluetooth-Company-Identifiers.csv
Last active July 21, 2025 18:58
[Bluetooth Company Identifiers] Company identifiers are unique numbers assigned by the Bluetooth SIG to member companies requesting one. Last updated July 21 2025
0x0000 Ericsson AB
0x0001 Nokia Mobile Phones
0x0002 Intel Corp.
0x0003 IBM Corp.
0x0004 Toshiba Corp.
0x0005 3Com
0x0006 Microsoft
0x0007 Lucent
0x0008 Motorola
0x0009 Infineon Technologies AG
@kongmunist
kongmunist / deepsleep_nrf52840_seeed.ino
Created October 1, 2024 20:39
Gist of the deep sleep current example from https://medium.com/p/732def7d95c3
// The MIT License (MIT)
// Copyright (c) 2019 Ha Thach for Adafruit Industries
#include "SdFat.h"
#include "Adafruit_SPIFlash.h"
// Uncomment to run example with custom SPI and SS e.g with FRAM breakout
// #define CUSTOM_CS A5
// #define CUSTOM_SPI SPI
@kongmunist
kongmunist / fitbit_tz_correction.py
Created February 12, 2024 16:30
Code to correct Fitbit sleep data using Google Timeline data, as described in andykong.org/blog/glocfitbittzcorrection
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# use long/lat at the end of the day to get the timezone, then correct each sleep date's time to UTC.
from timezonefinder import TimezoneFinder
import datetime
import pytz
# how to get offset from UTC from timezone name
pacific_now = datetime.datetime.now(pytz.timezone('US/Pacific'))
pacific_now.utcoffset().total_seconds()/60/60
@kongmunist
kongmunist / attiny_ds3231_minimal_example.ino
Created February 5, 2024 20:54
Code for interfacing the ATtiny 25/45/85 with the DS3231, as described in https://andykong.org/blog/attinyrtc/
#include <TinyWireM.h>
#include "SoftwareSerial.h"
byte ss=0, mi=0, hh=0, wd=6, dd=1, mo=1, yy=0;
const int Rx = 3; // this is physical pin 2
const int Tx = 4; // this is physical pin 3
SoftwareSerial mySerial(Rx, Tx);
void setup() {
@kongmunist
kongmunist / fetcher.py
Created December 7, 2023 10:42 — forked from shion24hub/fetcher.py
fetcher
import os
from datetime import datetime
from logging import INFO, Formatter, StreamHandler, getLogger
from urllib.error import HTTPError
import polars as pl
class Fetcher:
"""
# This file uses the sleep stress file's timestamp to convert each sleep row to its proper timezone
import pandas as pd
import matplotlib.pyplot as plt
import copy
stressFile = "cooked/Stress_Stress Score.csv"
sleepFile = "cooked/Sleep_sleep.csv"
# Each line in sleep has a few time-associated cols: (dateOfSleep, startTime, endTime)
# These are given in the timezone of the user's device and not in UTC
import pandas as pd
import os
import re
# We are loading in a data export from Fitbit.
allExports = "raw/"
curExport = [allExports+x for x in os.listdir(allExports) if os.path.isdir(allExports+x)][0]
curExport = curExport + "/" + [x for x in os.listdir(curExport) if os.path.isdir(curExport+"/"+x)][0]
print(f"Data export we're converting is \n\t{curExport}")
@kongmunist
kongmunist / backtrader_clean.py
Last active October 23, 2023 14:03
Code for Medium article "Accelerating backtesting using index trick"
import backtrader as bt
import pandas as pd
import time
############### Preprocess data
filename = "../data/BTC-USD_15min_2017-4-5.csv"
df = pd.read_csv(filename, header=0, parse_dates=['time'], index_col='time')
############### Create backtrader data feed, set up strategy and broker
# Create Cerebro backtesting instance
@kongmunist
kongmunist / bg.css
Last active September 17, 2023 14:15
In-line translator for highlighted words
.highlight-popup {
position: absolute;
background-color: #0044b3;
color: white;
padding: 4px;
border-radius: 4px;
z-index: 9999;
}
// From the blog post andykong.org/blog/icloudconfusion/
function boxTops(){
HTMLCollection.prototype.toArray = function() { return Array.from(this); }
// Select all the time badges and parse out their total runtime in seconds
a = document.getElementsByClassName('video-text-badge').toArray()
b = a.map((x) => x.innerText)
c = b.map((y) => y.split(":").map((x) => parseInt(x)))
d = c.map((x) => x[0]*60 + x[1])