Skip to content

Instantly share code, notes, and snippets.

View jmakeig's full-sized avatar

Justin Makeig jmakeig

View GitHub Profile
@jmakeig
jmakeig / sparse_timeseries.sql
Last active September 15, 2023 22:51
Use case: Timeseries data that’s stored densely, but needs to be reported sparsely, i.e. with explicit zeros for missing periods. (RIGHT JOIN for the win!)
-- PostgreSQL 14
SELECT
days AS observation_date,
-- Explicitly coalescing missing values to zero.
-- This logic will be use case-dependent.
coalesce(metrics.metric, 0) AS metric
FROM
-- Replace this with the dense metrics table
(values ('2023-01-01'::date, 111111), ('2023-06-15'::date, 222222)) AS metrics (observation_date, metric)
@jmakeig
jmakeig / split-json-array.sh
Last active March 23, 2023 15:43
Split a file containing a JSON Array into one file per item
#!/usr/bin/env bash
# Splits a file that contains a top-level JSON Array
# into individual files, one per item, named sequentially
# https://stedolan.github.io/jq/download/
jq -c .[] "$1" | awk '{print > (NR ".json")}'
@jmakeig
jmakeig / example.js
Last active January 6, 2023 06:30
JSDoc can’t describe some generic functions declared in Typescript
/** @typedef {{name: string; title: string; description: string; sets: any[]; }} Workout */
/** @typedef {{name: string; instructions: string;}} Exercise */
/** @typedef {"en" | "fr" | "de" | "jp" | "zh" | "he"} Lang */
/** @typedef {string | {[L in Lang]?: string}} Message */
/** @typedef {{for: string, message?: Message}} ValidationResult */
/**
* @template Entity
* @typedef {{(condition: {(entity: Entity): boolean}, id: string, message: Message): {(entity: Entity): ValidationResult[]}}} RuleCreator<Entity>
@jmakeig
jmakeig / callback.js
Last active November 19, 2022 23:59
JSDoc/Documentation.js examples
/**
* A success callback for {@link ResultProvider} that receives the result from
* the {@link documents#probe}.
* @callback documents#probeResult
* @since 1.0
* @param {documents.DocumentDescriptor} document - a sparse document descriptor with an exists
* property that identifies whether the document exists
*/
/**
* Probes whether a document exists; takes a configuration
@jmakeig
jmakeig / clean.css
Last active May 23, 2022 18:43
BBEdit Markdown stylesheet (~/Library/Application Support/BBEdit/Preview CSS/clean.css)
body {
font-family: "Helvetica Neue", Helvetica, sans-serif;
font-size: 12pt;
line-height: 1.45;
padding: 0 1rem;
max-width: 60em;
}
a {
color: rgba(0, 122, 255, 1);
}
@jmakeig
jmakeig / table.html
Last active February 12, 2022 19:30
Default table CSS
<!DOCTYPE html>
<html>
<head>
<title>Progenitor Mock-up</title>
<style type="text/css">
table {
position: relative; /* Needed for sticky headers */
width: 100%;
@jmakeig
jmakeig / curl-error-handling.sh
Created June 24, 2014 05:50
Capture 4xx and 5xx errors as errors with cURL
#! /bin/bash
# --fail: exit with 22 for an HTTP error response
# --show-error: write a message to stderr on failure, even with --silent
# --silent: don't show progress or errors
# -i: include headers in output
curl --fail --show-error --silent -i http://httpstat.us/"$1" 1>/dev/null
if [[ $? != 0 ]] ; then
echo "error"
exit 1
@jmakeig
jmakeig / timer.css
Created December 29, 2021 20:56
Timer CSS animation
svg {
display: inline-block;
height: 90px;
width: 90px;
}
svg.timer {
transform: rotate(-90deg);
overflow: visible;
}
circle.gague {
@jmakeig
jmakeig / fy-date-converter.xlsx
Created July 2, 2020 22:54
Calendar date to MarkLogic fiscal year conversion
="FY"&IF(MONTH(G2)=1, YEAR(G2), YEAR(G2)+1) & "Q"&IF(MONTH(G2)=1, 4, FLOOR((MONTH(G2)+1)/3,1))
@jmakeig
jmakeig / marklogic-eval.sh
Last active May 9, 2020 11:42
Evaluates JavaScript against MarkLogic from the command line
#!/usr/bin/env bash
# Pipes stdin as the JavaScript body of a REST Client API eval request
#
# Usage:
# cat mycode.sjs | marklogic-eval.sh
# pbpaste | marklogic-eval.sh
cat <(echo 'javascript=') <(cat -) | curl http://localhost:8000/v1/eval \
--digest -u admin:admin -X POST \