Skip to content

Instantly share code, notes, and snippets.

@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])
@kongmunist
kongmunist / SerialLogger.java
Created May 20, 2023 19:55
Serial Logging class written for Java/Processing, integrates cleanly on UNIX/MacOS since it relies on unix style system commands
class SerialLogger {
public String portname;
public String filename;
public Process p;
SerialLogger(String portname, String filename) {
this.portname = portname;
this.filename = sketchPath() + "/data/" + filename + ".csv";
}
@kongmunist
kongmunist / infoglobe_esp_demo.ino
Last active November 28, 2022 01:02
Custom control code for the Olympia Infoglobe
// Andy Kong 11/13/22
// Code to control the Olympia Infoglobe message and transitions
// USAGE:
// Type a message > 2 chars into Serial and this script will try to write it out into the Infoglobe's IR LED attached to Pin D2
// To send a String X to the Infoglobe, call infoAddMsg(X);
// Hardware setup can be found here:
// https://andykong.org/blog/infoglobetutorial1/
// https://andykong.org/blog/infoglobetutorial2/