Skip to content

Instantly share code, notes, and snippets.

View daniel-sc's full-sized avatar

Daniel Schreiber daniel-sc

View GitHub Profile
@daniel-sc
daniel-sc / reddit-report.html
Last active August 31, 2026 20:21
ContextVeil Reddit field notes and launch report
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="A first-principles Reddit launch report for ContextVeil v1.0.0.">
<link rel="icon" href="data:,">
<title>ContextVeil / Reddit field notes</title>
<style>
:root {
@daniel-sc
daniel-sc / complexity-report.html
Created August 27, 2026 12:02
ContextVeil repository simplification report
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="A deep simplification analysis of the ContextVeil repository, with concrete scope, code, requirements, testing, and documentation recommendations.">
<link rel="icon" href="data:,">
<title>ContextVeil: A Leaner Path to V1</title>
<style>
:root {
@daniel-sc
daniel-sc / remap.ts
Created May 6, 2025 08:25
This script converts minified JavaScript stack traces into human-readable ones using source maps. It fetches remote .js files, resolves their sourceMappingURL (or falls back to .map), loads the source maps, and rewrites each stack frame with original file names, line/column positions, and (if available) function names. Compatible with Bun, Node.…
#!/usr/bin/env node
/**
* Portable stacktrace remapper for Node.js, Bun, and Deno (with --compat).
* Usage:
* bun run remap.ts <stacktrace-file>
* node --experimental-fetch remap.ts <stacktrace-file>
* deno run --compat --allow-net --allow-read remap.ts <stacktrace-file>
*/
@daniel-sc
daniel-sc / zoho-batch-send.ts
Last active March 31, 2025 09:59
This TypeScript script reads client_id and client_secret from CLI parameters, retrieves an OAuth access token from Zoho, and schedules emails to a list of recipients with a random delay. The email content and recipient list are read from local files.
import {readFileSync} from 'fs';
const args = process.argv.slice(2);
const clientIdIndex = args.indexOf('--client_id');
const clientSecretIndex = args.indexOf('--client_secret');
const subjectIndex = args.indexOf('--subject');
const fromAddressIndex = args.indexOf('--from_address');
const delayIndex = args.indexOf('--delay');
if (clientIdIndex === -1 || clientSecretIndex === -1 || subjectIndex === -1 || fromAddressIndex === -1) {
@daniel-sc
daniel-sc / rename-images.sh
Last active December 29, 2024 20:10
rename images (jpg, heic) to have filenames matching capturing date
#!/bin/bash
# Use first argument as directory, default to current directory if not provided
IMAGE_DIR=${1:-$(pwd)}
# Change to the directory
cd "$IMAGE_DIR"
# Loop through HEIC, heic, JPG, and jpg files
for file in *.[hH][eE][iI][cC] *.[jJ][pP][gG] *.[jJ][pP][eE][gG]; do
@daniel-sc
daniel-sc / migrate-ngrx-action-classes.ts
Last active January 29, 2024 11:47
Automatically migrate NgRx action classes to creator functions
import {readdirSync, readFileSync, writeFileSync} from 'fs';
import {resolve} from 'path';
import * as ts from 'typescript';
/// original action class name to type enum
const actionMapping = new Map<string, {enumType: string; constructorParams: Param[]}>();
/// this matches only a limited nesting of brackets - it uses lookaheads as performance fix for catastrophic backtracking:
const bracketMatcherPart = '\\(((?:[^()]*(?=[()])|\\((?:[^()]*(?=[()])|\\((?:[^()]*(?=[()])|\\((?:[^()]*(?=[()])|\\([^()]*(?=[()])\\))*\\))*\\))*\\))*)\\)';
@daniel-sc
daniel-sc / cover_sun_blueprint.yaml
Last active July 27, 2026 17:05
Homeassistant blueprint to close/open covers depending on sun position and weather
# see https://community.home-assistant.io/t/close-open-curtain-cover-blinds-based-on-sun-and-weather/584240
blueprint:
name: cover sun
description: Close cover when sun is shining and open when stops. This considers weather (sunny, partly cloudy), sun position (elevation, azimuth) and temperature.
domain: automation
source_url: https://gist.github.com/daniel-sc/074465be04dd9a793cba5b841ab63f83
input:
cover_entity:
name: cover
@daniel-sc
daniel-sc / bitbucket-to-teams-webhook.js
Created April 5, 2023 09:49
Deno script that can be deployed to https://deno.com/deploy and registered as a bitbucket webhook to notifiy new PRs in a MS Teams channel.
import { Application, Router } from 'https://deno.land/x/oak/mod.ts';
// Load environment variables
const PORT = 8080;
const TEAMS_WEBHOOK_URL = 'https://XYZ.webhook.office.com/webhookb2/XYZ';
const TARGET_USERNAME = 'xyz';
if (!TEAMS_WEBHOOK_URL || !TARGET_USERNAME) {
throw new Error('Missing required environment variables.');
}
const minCharCode = Math.min(...'aAzZ019-_.:,'.toUpperCase().split('').map(c => c.charCodeAt(0)));
const maxCharCode = Math.max(...'aAzZ019-_.:,'.toUpperCase().split('').map(c => c.charCodeAt(0)));
const alphabetSize = maxCharCode - minCharCode + 2;
console.log(minCharCode, maxCharCode, alphabetSize, Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER);
function toNumber(char) {
return char.toUpperCase().charCodeAt(0) - minCharCode + 1;
}
@daniel-sc
daniel-sc / compact.js
Last active February 2, 2025 19:06 — forked from BlakeGardner/compact.js
Compact all collections inside of a MongoDB database
// This script loops though all collections of all db in a MongoDB and runs the compact operation on them
// Simply paste this into the Mongo shell
db.getMongo().setReadPref('secondary');
db.getMongo().getDBNames().forEach(function(dbName) {
if (["local", "admin", "system", "config"].indexOf(dbName) < 0 /* && dbName > "config"*/) {
var subject = db.getSiblingDB(dbName);
subject.getCollectionNames()
.filter(c => ['system.users', 'system.roles'].indexOf(c) < 0)
.forEach(function (collectionName) {