Skip to content

Instantly share code, notes, and snippets.

@nikolaybotev
nikolaybotev / deno-hello.ts
Last active October 26, 2024 15:09
Deno serve over unix socket example with socket file cleanup
const socketPath = "/tmp/mock-server";
// Needed if starting with node --watch
try {
await Deno.remove(socketPath);
} catch (e) {
// ignore
}
let server = Deno.serve({ path: socketPath }, (_req) => new Response("Hello, world."));
@nikolaybotev
nikolaybotev / async-iterator-setup.cjs
Last active September 16, 2024 12:36
Setup AsyncIteratorPrototype for Common.js Async Iterator Helpers polyfill on async generators (CommonJS version)
const asyncGeneratorInstancePrototype = Object.getPrototypeOf(async function*(){}());
const AsyncGeneratorPrototype = Object.getPrototypeOf(asyncGeneratorInstancePrototype);
let AsyncIteratorPrototype;
if (AsyncGeneratorPrototype === Object.prototype) {
// Fix-up for babel's transform-async-generator-functions
AsyncIteratorPrototype = {};
const newAsyncGeneratorPrototype = Object.create(AsyncIteratorPrototype);
Object.setPrototypeOf(asyncGeneratorInstancePrototype, newAsyncGeneratorPrototype);
} else {
AsyncIteratorPrototype = Object.getPrototypeOf(AsyncGeneratorPrototype);
@nikolaybotev
nikolaybotev / async-iterator-setup.mjs
Created September 16, 2024 12:03
Setup AsyncIteratorPrototype for Common.js Async Iterator Helpers polyfill on async generators
const asyncGeneratorInstancePrototype = Object.getPrototypeOf(async function*(){}());
const AsyncGeneratorPrototype = Object.getPrototypeOf(asyncGeneratorInstancePrototype);
let AsyncIteratorPrototype;
if (AsyncGeneratorPrototype === Object.prototype) {
// Fix-up for babel's transform-async-generator-functions
AsyncIteratorPrototype = {};
const newAsyncGeneratorPrototype = Object.create(AsyncIteratorPrototype);
Object.setPrototypeOf(asyncGeneratorInstancePrototype, newAsyncGeneratorPrototype);
} else {
AsyncIteratorPrototype = Object.getPrototypeOf(AsyncGeneratorPrototype);
@nikolaybotev
nikolaybotev / xe-rates-to-csv.js
Created March 25, 2023 03:05
Convert XE currency rates JSON to CSV
let c1 = require('./currency-rates-2.json')
console.log('Date,', c1.from, 'to', c1.to)
let c1b = c1.batchList[0]
let ts = c1b.startTime
for (let i = 1; i < c1b.rates.length; i += 1) {
let actualrate = c1b.rates[i] - c1b.rates[0]
console.log(new Date(ts).toLocaleDateString() + ', ' + actualrate)
ts += c1b.interval
@nikolaybotev
nikolaybotev / compound_interest_monthly.js
Created August 24, 2022 13:49
Compute Monthly Compound Interest Payments and Amortization
// Brute force compound interest loan payment calculator
// Inputs
let amount = 100_000 // dollars
let interest = 10 // percent per year
let term = 30 // years
// Monthly Payment
let monthly_interest = (interest / 12) / 100
let no_of_payments = term * 12
@nikolaybotev
nikolaybotev / pi-bootstrap
Last active January 29, 2022 21:43
Raspberry Pi Headless Bootstrap Script
#!/bin/bash
# pi-bootstrap
#
# Setup an Ubuntu Raspberry Pi image for headless boot.
#
# Copyright Nikolay Botev, MIT License
#
# Default settings
@nikolaybotev
nikolaybotev / robinhood-download-crypto-.js
Created December 11, 2021 14:15
Robinhood Crypto Transaction Download Script
(function () {
function toCtDate(event) {
const p2 = s => s.toString().length == 1 ? "0" + s : s;
return `${p2(event.getUTCMonth()+1)}/${p2(event.getUTCDate())}/${event.getUTCFullYear()} ${p2(event.getUTCHours())}:${p2(event.getUTCMinutes())}:${p2(event.getUTCSeconds())}`;
}
const coinMap = {
"Dogecoin": "DOGE",
"Ethereum": "ETH"
}
@nikolaybotev
nikolaybotev / screen-cheatsheet.md
Last active September 29, 2021 17:54
screen Cheatsheet

Screen Cheatsheet

Essentials

Technically all the commands in this section apply to screen sessions. For brevity, we refer to screen sessions as simply screens.

Open a New Screen

screen
@nikolaybotev
nikolaybotev / [email protected]
Last active November 27, 2023 19:58
systemd service to turn off Raspberry Pi LEDs on startup.
[Unit]
Description=Turn Off LED %i
After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c 'echo 0 > /sys/class/leds/%i/brightness'
ExecStop=/bin/sh -c 'echo 255 > /sys/class/leds/%i/brightness'
@nikolaybotev
nikolaybotev / iptables-firewall-config.sh
Created June 11, 2021 04:41
Router Firewall Configuration (iptables)
UPSTREAM_IFACE="${1:-eth1}"
# IPv4 and IPv6
for iptables in iptables ip6tables; do
# :INPUT
# - returning traffic
sudo $iptables -A INPUT -i $UPSTREAM_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
# - ping
sudo $iptables -A INPUT -i $UPSTREAM_IFACE -p icmp -j ACCEPT