Skip to content

Instantly share code, notes, and snippets.

@wesleybliss
wesleybliss / docker-compose-node-mongo.yml
Created September 9, 2016 21:37
Docker Compose with example App & Mongo
version: '2'
services:
myapp:
build: .
container_name: "myapp"
image: debian/latest
environment:
- NODE_ENV=development
- FOO=bar
volumes:
@wesleybliss
wesleybliss / json.stringify.safe.js
Created February 24, 2017 02:22
Prevent JSON.stringify() from breaking on recursive object references
let cache = []
JSON.stringify( someObject, (key, value) => {
if (typeof value === 'object' && value !== null) {
if (cache.indexOf(value) !== -1) {
// Circular reference found, discard key
return
}
// Store value in our collection
cache.push(value)
}
@wesleybliss
wesleybliss / loader.js
Created April 4, 2025 20:10
Custom ESM loader
import { resolve as resolvePath } from 'path'
import { fileURLToPath } from 'url'
import { stat } from 'fs/promises'
const loggingEnabled = false
const consoleLog = (verb, ...args) => loggingEnabled && console[verb](...args)
const log = {
d: (...args) => consoleLog('log', ...args),
i: (...args) => consoleLog('info', ...args),
@wesleybliss
wesleybliss / currency-flags.dart
Created March 17, 2025 04:45
Map of currency codes to unicode flag symbols
final Map<String, String> currencyFlags = {
"COP": "🇨🇴",
"USD": "🇺🇸",
"AED": "🇦🇪",
"AFN": "🇦🇫",
"ALL": "🇦🇱",
"AMD": "🇦🇲",
"ANG": "🇳🇱",
"AOA": "🇦🇴",
"ARS": "🇦🇷",
@wesleybliss
wesleybliss / html_table_to_csv.js
Created March 17, 2025 04:21
Converts a basic HTML table into a CSV
(function() {
const result = []
const tables = [...document.querySelectorAll('table')]
const quoteRow = cols => ('"' + cols
.map(it => it.textContent || '')
.join('","') + '"')
for (let i = 0, m = tables.length; i < m; i++) {
@wesleybliss
wesleybliss / download_text_as_file.js
Created March 15, 2025 01:53
Download a string as a file
const downloadCsv = (text, filename, encoding = 'text/plain') => {
// text/csv
const blob = new Blob([csvString], { type: encoding })
const url = window.URL.createObjectURL(blob)
const a = document.createElement('a')
a.setAttribute('href', url)
a.setAttribute('download', filename || 'download.txt')
a.style.display = 'none'
@wesleybliss
wesleybliss / squarespace-dns-to-csv.js
Created March 4, 2025 17:45
Backup Squarespace DNS configs to CSV
const section = document.querySelector('[data-testid="desktop-custom-records"]')
const table = section.nextElementSibling.querySelector('table')
const headers = [...table.querySelector('thead')
.querySelector('tr')
.querySelectorAll('th')
].map(it => it.innerText)
const rows = table.querySelector('tbody').querySelectorAll('tr')
const csv = [headers]
for (let i = 0; i < rows.length; i++) {
@wesleybliss
wesleybliss / simple_observer.kt
Created March 4, 2020 16:42
Simple Kotlin Observer Pattern
interface Observer<T> {
fun onChange(newValue: T?)
}
class Observable<T>(initialValue: T? = null) {
// List ov observers watching this value for changes
private val observers = mutableListOf<Observer<T>>()
// The real value of this observer
@wesleybliss
wesleybliss / delete_sequelize_junk_indexes.js
Created February 20, 2023 23:46
Deletes extra junk indexes created by Sequelize when using alter: true
// https://github.com/sequelize/sequelize/issues/8984#issuecomment-738790473
// Here is a workaround to delete new indices after calling sequelize.sync({alter: true});
// Be careful, this will delete all indices of the current database that ends with a number after an underline character (e.g. index_1)
const rawTables = await this.sequelize.query("SHOW TABLES")
const tables = rawTables[0].map(i => i[Object.keys(rawTables[0][0])[0]])
for (const t of tables) {
const rawKeys = await this.sequelize.query(`SHOW INDEX FROM ${t}`)
@wesleybliss
wesleybliss / postgres_find_missing_indexes_1.sql
Last active February 20, 2023 23:42
Find all missing indexes (version #1)
-- https://stackoverflow.com/a/33293747/717949
-- NOTE: the WHERE condition at the end can be removed for smaller tables
-- check for FKs where there is no matching index
-- on the referencing side
-- or a bad index
WITH fk_actions ( code, action ) AS (
VALUES ( 'a', 'error' ),
( 'r', 'restrict' ),