Skip to content

Instantly share code, notes, and snippets.

@jiaaro
jiaaro / retirement calc.md
Last active December 3, 2022 18:51
A Simple, Easy-to-edit Retirement Saving Calculator (in python)

Retirement Calculator

  • ages are in years
  • contribution, and savings are in dollars
  • avg_annual_return is a ratio, so 1.07 is a 7% annual return

let's say I'm 25 years old, I am going to contribute $2000/yr in bonds (~5% return), and I've already invested $5700 in bonds

import asyncio
async def sum_queue_vals(q):
result = 0
while True:
val = await q.get()
if val is None:
break
result += val
return result
@jiaaro
jiaaro / controller.lua
Last active June 11, 2021 11:18
gamepad emulation of playdate crank
-- uses:
-- https://github.com/rxi/classic
-- https://github.com/rxi/lume
local Object = require 'classic'
local lume = require 'lume'
---@class Controller
local Controller = Object:extend()
local function getStickAngle(x, y)
@jiaaro
jiaaro / async_children_with_cleanup.sh
Last active May 7, 2021 23:38
Run some commands asynchronously in bash and then make sure to kill the child processes if the user kills the process with CTRL-C (or similar)
#!/bin/bash
trap "exit" INT TERM # Convert INT and TERM to EXIT
trap "kill 0" EXIT # Kill all children if we receive EXIT
# Run stuff in the background
sleep 3 &
sleep 4 &
# Find child processes and wait for them to finish so this script doesn't
@jiaaro
jiaaro / process_coinbase_export.py
Last active April 27, 2021 20:02
Coinbase Export: Parse and Process "Convert" Transactions
import csv
csv_path = "/path/to/Coinbase-xxxxx-TransactionsHistoryReport-2021-03-13-22-28-28.csv"
outcsv_path = csv_path + ".processed.csv"
with open(csv_path, "r") as fi, open(outcsv_path, "w") as fo:
r = csv.reader(fi)
w = csv.writer(fo)
for i, row in enumerate(r):
if row and row[-1].startswith("Converted"):

How to use:

  1. (On a mac) Launch "Script Editor"
  2. Change the language to javascript if needed
  3. Paste the code from wine-launcher.jxa
  4. Save with the file format "Application", and uncheck "Show startup screen" and "Stay open after run handler" (I recommend putting it in your user/Applications directory)
  5. Make sure wine is installed, you can use homebrew
  6. Right click an ".exe" file, choose "Get Info", and then change the "Open with" application to your Wine app that you just made. To make it work for all .exe files, click "Change All…" afterward.

Now you can double click any exe and it'll launch in wine :)

@jiaaro
jiaaro / konami.lua
Last active June 8, 2020 15:07
Love2d Konami Code module
--[[
Example use:
function love.keypressed(key)
konami(key, function()
love.window.showMessageBox("Konami", "the konami code was entered")
end)
end
]]
local MAX_DELAY = 1.5
@jiaaro
jiaaro / setup_local_codebuild_testing.sh
Last active March 27, 2020 18:44
Set up local testing for codebuild
#!/bin/bash
docker --version
if [[ $? != 0 ]]; then
brew cask install docker
fi
echo "Make sure you have $HOME/bin in your PATH"
mkdir -p ~/bin/
curl https://raw.githubusercontent.com/aws/aws-codebuild-docker-images/master/local_builds/codebuild_build.sh > ~/bin/codebuild_build.sh
@jiaaro
jiaaro / getjson.js
Last active January 9, 2019 09:10
super simple implementation of getJSON
function getJSON(url, cb) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.onreadystatechange = function() {
if (xhr.status != 200 || xhr.readyState != 4) return;
cb(JSON.parse(xhr.responseText));
}
xhr.send();
};
@jiaaro
jiaaro / script.bash
Created April 24, 2013 14:45
Embed Python in a bash script
#!/bin/bash
export FOO=100
python - <<END
import os
print "foo:", os.environ['FOO']
END