Skip to content

Instantly share code, notes, and snippets.

View daniel-sc's full-sized avatar

Daniel Schreiber daniel-sc

  • ti&m
  • Offenbach, Germany
  • 20:32 (UTC +02:00)
View GitHub Profile
@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 February 1, 2025 11:29
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
input:
cover_entity:
name: cover
selector:
@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) {
@daniel-sc
daniel-sc / create-test-subtasks.js
Created June 26, 2019 15:21
bookmarklet to automatically create jira subtasks for testing
// convert via https://mrcoles.com/bookmarklet/
var tasks = prompt('Tasks mit Kommas abgetrennt eingeben:', 'Test planen,Testdaten definieren,Tests erstellen,Test durchführen & dokumentieren').split(',');
var match = window.location.pathname.match(/[A-Z]+-[0-9]+/);
if (match[0]) {
var task = match[0];
var match = task.match(/[A-Z]+/);
var project = match[0];
var promises = [];
for (var i = 0; i < tasks.length; i++) {
#!/bin/bash
# copy to: /etc/cron.hourly/check-wlan
# test with: sudo run-parts --test /etc/cron.hourly
if ifconfig wlan0 | grep "inet addr:" ; then
logger "wifi ok"
exit
else
logger "Network down! Attempting reconnection."