Skip to content

Instantly share code, notes, and snippets.

View joshuaulrich's full-sized avatar

Joshua Ulrich joshuaulrich

View GitHub Profile
double64 <-
function(length = 0L, ...)
{
bytes <- 8L
x <- raw(length = bytes * length)
attr(x, "class") <- "ctype"
attr(x, "rtype") <- "double"
attr(x, "bytes") <- bytes
attr(x, "signed") <- TRUE
x
@joshuaulrich
joshuaulrich / nyse_holidays.csv
Created September 8, 2023 21:17
NYSE holidays - early and complete closes
date exchange status start_time end_time holiday_name
2000-01-17 NYSE closed Martin Luther King's Birthday
2000-02-21 NYSE closed Washington's Birthday
2000-04-21 NYSE closed Good Friday
2000-05-29 NYSE closed Memorial Day
2000-07-03 NYSE short day 09:30 13:00 Independence Day
2000-07-04 NYSE closed Independence Day
2000-09-04 NYSE closed Labor Day
2000-11-23 NYSE closed Thanksgiving Day
2000-11-24 NYSE short day 09:30 13:00 Black Friday
@joshuaulrich
joshuaulrich / parse_crsp_file.awk
Created December 12, 2020 15:41
Parse CRSP file into separate files by symbol
#!/usr/bin/awk -f
# GNU Awk 3.1.8
#
# Tutorial:
# http://www.grymoire.com/Unix/Awk.html
#
BEGIN{ FS=","; OFS=","; filename="" }
{
if(NR==1) { # the first record/line is the header
header=substr($0,8) # store to write to each symbol file
@joshuaulrich
joshuaulrich / intraday-sp500.R
Last active April 26, 2023 13:02
Track the S&P 500 throughout the trading day
require(quantmod)
do_chart <- function(symbol) {
quote <- getQuote(symbol)
quote$Close <- quote$Last
xts(OHLCV(quote), quote[,"Trade Time"],
pct_change = quote[,"% Change"])
}
filename <- "intraday-sp500.rds"
update.realtime <-
function(ticker, history = NULL)
{
if (is.null(history)) {
history <- getSymbols(ticker, from = "2018-01-01", auto.assign = FALSE)
}
today <- getQuote(ticker, src = "yahoo")
now <- as.Date(today[,"Trade Time"])
cn <- c("Open", "High", "Low", "Last", "Volume", "Last")
live <- xts(today[, cn], now)
@joshuaulrich
joshuaulrich / squash-and-merge-cli.md
Created November 21, 2019 13:23 — forked from aortbals/squash-and-merge-cli.md
Squash and Merge on the Command line

With the introduction of GitHub's Squash and Merge feature, this has become less prevelant, however it's still useful in scenarios where GitHub's interface is unavailable.

Let's talk through two ways to do a squash and merge on the command line.

Take 1: Interactive Rebase

When to use it

  • When you have not merged master into your feature branch
  • There are no merge conflicts
@joshuaulrich
joshuaulrich / keybase.md
Created September 14, 2019 15:33
Because keybase told me to

Keybase proof

I hereby claim:

  • I am joshuaulrich on github.
  • I am joshuaulrich (https://keybase.io/joshuaulrich) on keybase.
  • I have a public key ASDcjSYFiNY5lotsu7tcXthTsae6mRwUHF1G48R03YG-AQo

To claim this, I am signing this object:

@joshuaulrich
joshuaulrich / bcrypt-password.pl
Last active February 16, 2019 19:27 — forked from evandrix/gist:1076041
Check password against known hashed password and salt
#!/usr/bin/perl
# Usage: read -s PASSWORD && ./bcrypt-password.pl
use Crypt::Eksblowfish::Bcrypt;
# Read password and salt from environment variables
$password = $ENV{PASSWORD};
$salt = "lfVQ/T2N3dhFVvvPro2Hfu"
$encrypted = encrypt_password($password, $salt);
# Extract bcrypt version, cost, salt, and hashed password
@joshuaulrich
joshuaulrich / bench.R
Last active March 29, 2018 14:50 — forked from jimhester/bench.R
getOption benchmark
getOptionOld <- function(x, default = NULL) {
if(missing(default) || x %in% names(options()))
.Internal(getOption(x))
else
default
}
getOptionNew <- function(x, default = NULL) {
ans <- .Internal(getOption(x))
if(is.null(ans)) default else ans
@joshuaulrich
joshuaulrich / do_gc.c
Created January 28, 2018 15:48
Force an R garbage collection from C
void do_gc(SEXP env) {
SEXP s, t;
PROTECT(s = t = allocList(1));
SET_TYPEOF(s, LANGSXP);
SETCAR(t, install("gc")); t = CDR(t);
PrintValue(eval(s, env));
UNPROTECT(1);
}