Skip to content

Instantly share code, notes, and snippets.

View BenjaminWolfe's full-sized avatar

Benjamin Wolfe BenjaminWolfe

View GitHub Profile
@BenjaminWolfe
BenjaminWolfe / typeform-helpers.js
Created August 23, 2022 14:23
Typeform Helpers
// background
function timer(ms) { return new Promise(res => setTimeout(res, ms)); }
async function keepGoing(direction, i) {
await timer(500);
const directions = {"up": "previous", "down": "next"};
document.querySelectorAll(`[data-qa="fixed-footer-navigation-${directions[direction]}"]`)[0].click()
await timer(500);
let focusQ = document.querySelectorAll('[data-qa-focused="true"]')[0]
let qId = focusQ.getAttribute('data-qa-blockref');
collect_iteratively <- function(x, size = 500, timeout = 3600) {
start_time <- Sys.time()
message("pulling ", size, " records at a time...")
message("starting at ", start_time)
message("will time out at ", start_time + timeout, " (", timeout, "s later)")
con <- x$src$con
sql <- dbplyr::db_sql_render(con, x)
res <- DBI::dbSendQuery(con, sql)
# hacky but fun code to change the RStudio theme every (e.g.) 15 minutes,
# cycling through the themes in the {rsthemes} package.
# https://gist.github.com/BenjaminWolfe/fc00c480f8a7185779669d2895829069
#
# start is 9am on the day rstudio::conf(2021L) kicks off.
# applies the current theme, then starts a timer to change it periodically.
# to rotate less often (or more), adjust theme_period below.
# (fractional minutes may not work.)
# note that breaks are just based on lubridate::round_date logic.
#
@BenjaminWolfe
BenjaminWolfe / curl.R
Last active April 3, 2022 21:31
Create Pages in Notion with R
# See `curl.md`. Here is the R equivalent.
library(httr)
library(jsonlite)
make_page <- function(url, headers, data) {
response <- POST(
url = url,
body = toJSON(data, auto_unbox = TRUE),
config = add_headers(.headers = headers)
@BenjaminWolfe
BenjaminWolfe / np-where-multiple-columns.py
Created April 28, 2021 02:59
How do I use np.where with multiple columns at once?
# how to use np.where with multiple columns at once, even whole data frames?
import numpy as np
import pandas as pd
np.random.seed(42)
df1 = pd.DataFrame(np.random.randint(0, 100, size=(100, 4)), columns=list("ABCD"))
df2 = pd.DataFrame(np.random.randint(0, 100, size=(100, 4)), columns=list("ABCD"))
condition = pd.Series(np.random.choice(a=[False, True], size=100, p=[.1, .9]))
@BenjaminWolfe
BenjaminWolfe / test_chaining_series.py
Last active April 19, 2021 17:50
This is a nice test case to learn to use %timeit, as well as np.random.seed. I needed to do something like df.query, but with a series. Turns out that in at least simple cases it can be easy and fast with .loc and a lambda function.
import numpy as np, pandas as pd
df_len = 1000 # integer multiple of 4
np.random.seed(42)
# create a random data frame
df = pd.DataFrame(
{
"group_a": np.random.randint(0, df_len / 4, size=df_len),
"group_b": np.random.randint(0, df_len / 4, size=df_len),

Say you want to access GitLab.com for work (using your work email address), and you also want to access it for personal reasons (using your personal email address), and you want to do both on the same laptop.

Generate two SSH keys and save them in your ~/.ssh directory. I'll call them work_key and personal_key. As always with SSH keys in GitHub or GitLab, you'll want to generate a public key for each and add it to the corresponding GitLab account.

Then point to both private keys in your ~/.ssh/config file:

@BenjaminWolfe
BenjaminWolfe / nested_got_data.R
Last active August 31, 2020 17:30
Nested Game of Thrones Data - Snowflake + R
library(tidyverse)
library(repurrrsive) # game of thromes dataset
library(listviewer) # jsonedit for pretty viewing
jsonedit(got_chars, mode = "view")
really_nested <- tibble(id = 1:30, nested_stuff = got_chars)
really_nested %>%
hoist(
@BenjaminWolfe
BenjaminWolfe / group-and-fill.R
Last active August 11, 2020 16:18
grouping, ordering, and filling in Python and R
# code to be compared to group-and-fill.py
# task: fill specific columns down, within each group, ordering by the order.
library(tidyverse)
df <- tribble(
~group, ~order, ~attribute_1, ~attribute_2, ~irrelevant,
"a", 0, 1, 1, "hello",
"a", 2, NA, 3, NA , # this one out of ordr
"a", 1, 6, NA, "world",
"b", 0, 2, 7, "foo" ,