Skip to content

Instantly share code, notes, and snippets.

View source-c's full-sized avatar
🛡️
I definitely will be slow to respond.

A I source-c

🛡️
I definitely will be slow to respond.
View GitHub Profile
@source-c
source-c / time-helpers.ts
Created October 24, 2024 10:54
Typescript generic time helpers
import {format as dateFmt} from 'date-fns'
export const getRelativeTime = (locale: string, d1: Date, d2: Date = new Date()): string => {
// in milliseconds
const units = {
year: 24 * 60 * 60 * 1000 * 365,
month: 24 * 60 * 60 * 1000 * 365 / 12,
day: 24 * 60 * 60 * 1000,
hour: 60 * 60 * 1000,
minute: 60 * 1000,
@source-c
source-c / generic-helpers.ts
Last active October 24, 2024 11:00
Typescript Generic Helpers
export const isString = (obj: unknown) =>
obj !== undefined
&& obj !== null
&& (obj instanceof String || typeof obj === 'string');
export const isNone = (v?: unknown): boolean => v === undefined || v === null;
export const isUndefined = (v?: unknown): boolean => v === undefined;
export const isBool = val => 'boolean' === typeof val;
export const asBool = (v?: unknown): boolean =>
@source-c
source-c / utility-types.d.ts
Created October 24, 2024 10:41
Typescript Utility Types
type OptionalTypeOrNull<T> = T | undefined | null;
type Nullish = undefined | null;
type Falsy = false | "" | 0 | 0n | Nullish;
type Truthy<T> = T extends Falsy ? never : T;
type AnyCollection = ArrayLike<unknown>;
type AnyObject = { [p: string]: AnyObject | AnyCollection | unknown };
type Maybe<T> = T | Nullish;
type MaybePromise<T> = Promise<T> | T;
type Immutable<T> = {
readonly [K in keyof T]: Immutable<T[K]>;
@source-c
source-c / battery-level-mac
Last active November 6, 2022 16:20
Simple battery level fetch script for MacOS
#!/usr/bin/env bash
current_level=$(pmset -g batt|grep InternalBattery-0|sed -n 's#.*[[:space:]]\([[:digit:]]\{1,\}\)%.*#\1#p')
[[ -z ${current_level} ]] && current_level='--'
echo ${current_level}
@source-c
source-c / jpath-java-repl
Last active November 1, 2022 17:36
JShell shell wrapper for JsonPath repl
#!/usr/bin/env bash
mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get \
-Dartifact=net.minidev:asm:1.0.2 \
-DrepoUrl=https://mvnrepository.com/artifact/net.minidev/asm
exec jshell --class-path \
~/.m2/repository/com/jayway/jsonpath/json-path/2.6.0/json-path-2.6.0.jar:\
~/.m2/repository/net/minidev/json-smart/2.4.7/json-smart-2.4.7.jar:\
~/.m2/repository/net/minidev/asm/1.0.2/asm-1.0.2.jar:\
@source-c
source-c / update-git-repos
Last active February 11, 2023 08:13
update-all-project-repositories
#!/usr/bin/env bash
ALL_REPOS=$(ls -1)
GIT_MAIN_EXECUTABLE="git"
GIT_PULL_CMDLINE="pull --all --ff"
GIT_FOLLBACK="pull --all --rebase"
echo $(pwd)
for i in ${ALL_REPOS}; do
@source-c
source-c / pg-idxs-info.sql
Created September 22, 2022 12:47
PG indexes info
SELECT
t.tablename,
indexname,
c.reltuples AS num_rows,
pg_size_pretty(pg_relation_size(quote_ident(t.tablename)::text)) AS table_size,
pg_size_pretty(pg_relation_size(quote_ident(indexrelname)::text)) AS index_size,
CASE WHEN indisunique THEN 'Y'
ELSE 'N'
END AS "UNIQUE",
idx_scan AS number_of_scans,
@source-c
source-c / pg-queries-durations.sql
Created September 22, 2022 12:43
PG queries durations
SELECT pid, age(clock_timestamp(), query_start), usename, query, state
FROM pg_stat_activity
WHERE state != 'idle' AND query NOT ILIKE '%pg_stat_activity%'
ORDER BY query_start desc;
@source-c
source-c / pg-locks-acquired.sql
Created September 22, 2022 12:40
PG show locks across all tables/queries
select
relname as relation_name,
query,
pg_locks.*
from pg_locks
join pg_class on pg_locks.relation = pg_class.oid
join pg_stat_activity on pg_locks.pid = pg_stat_activity.pid
@source-c
source-c / pg-show-blocked.sql
Created September 22, 2022 12:36
PG list blocked queries/clients
SELECT
activity.pid,
activity.usename,
activity.query,
blocking.pid AS blocking_id,
blocking.query AS blocking_query
FROM pg_stat_activity AS activity
JOIN pg_stat_activity AS blocking ON blocking.pid = ANY(pg_blocking_pids(activity.pid));