Skip to content

Instantly share code, notes, and snippets.

@tsmx
tsmx / express-param-middleware.js
Last active March 26, 2021 21:48
NodeJS Express - middleware function with custom parameter
var express = require("express");
var app = express();
const setMyInfo = (text) => {
return (req, res, next) => {
req.myInfo = text;
next();
};
};
@tsmx
tsmx / react-counter.md
Last active May 2, 2021 18:39
Counter: a simple React component for animated counting up

Counter: React component for animated counting up

Small React component for counting numbers up to a certain value in a specified duration in ms. Useful for creating animated dashboards etc.

Usage

<Counter countFrom={0} countTo={123} durationMs={400}/>
@tsmx
tsmx / git-build-nodejs-multi-version-coveralls.yml
Last active June 28, 2021 18:51
Building a NodeJS app for multiple node versions with GitHub actions and report test results to Coveralls.
# save as ./github/workflows/git-ci-build.yml
# make sure that 'test-coverage' generates the coverage reports (lcov)
name: git-ci-build
on:
[push]
jobs:
build:
@tsmx
tsmx / gcp_instance_template_multi_nic.md
Last active August 5, 2021 10:29
GCP: instance template with multiple NIC's

GCP Compute Engine instance template creation with multiple NIC's and health-check FW rule

An instance template with more than one NIC obviously can't be created in the GCP web console. But it could easily be achieved using the gcloud CLI with consecutive --network-interface options.

gcloud compute --project=YOUR_PROJECT instance-templates create multi-nic-vm-template --machine-type=e2-micro --network-interface=subnet=projects/YOUR_PROJECT/regions/europe-west3/subnetworks/my-subnet-1,no-address --network-interface=subnet=projects/YOUR_PROJECT/regions/europe-west3/subnetworks/my-subnet-2,no-address --maintenance-policy=MIGRATE --image=my-image-1 --image-project=YOUR_PROJECT --boot-disk-size=10GB --boot-disk-type=pd-standard --boot-disk-device-name=instance-template-1 --no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring --reservation-affinity=any --tags=allow-health-check

In this example I specified two subnets that belong to different VPC's.

@tsmx
tsmx / timeseries-dummydata-csv.sh
Last active November 26, 2021 11:29
Creating time-series dummy mass data CSV file, e.g. for DB stress-test.
#!/bin/bash
# Creates time series dummy data in a CSV with random hourly values.
#
# timeseries: array of name|from|to for the time series
# -> name: name of the series (string)
# -> from: lower limit of the hourly values (number)
# -> to: upper limit of the hourly values (number)
# amount: number of hourly values to create for each series, 24 for one complete day, 24*365 for a year etc.
# startdate: date-time of the first hour
@tsmx
tsmx / froggit-custom-protocols.md
Last active February 6, 2022 20:22
Froggit weather station custom server protocols - Ecowitt and Wunderground

Froggit weather station protocols for custom server

Example output and NodeJS server code snippet for a Froggit weather station when using an own custom server instead of predefined weather services.

My hardware:

  • WH3000SE sensor
  • DP1500 Dongle

Ecowitt protocol type

@tsmx
tsmx / react-counter-func.md
Last active March 21, 2022 16:56
CounterFunc: functional React component for animated counting up using standard hooks

CounterFunc: functional React component for animated counting up using standard hooks

Small functional React component for counting numbers up to a certain value in a specified duration in ms. Useful for creating animated dashboards etc.

Uses React hooks useEffect, useState and useRef. Good example on how to pass props to a useEffect hook without declaring them as dependencies and how to deal with setInterval in functional components.

Usage

<CounterFunc countFrom={0} countTo={123} durationMs={400} />
@tsmx
tsmx / got-authorization-header.js
Last active August 2, 2022 13:43
Set authorization header with bearer-token in got.
const got = require('got');
// get 'url' and 'token'...
got.get(url), {
responseType: 'json',
hooks: {
beforeRequest: [
options => {
options.headers['Authorization'] = 'Bearer ' + token;
@tsmx
tsmx / got-download-stream.js
Last active October 6, 2022 13:40
Stream-download a file with filename from response header (content-disposition) via got package.
const got = require('got');
const stream = require('stream');
const fs = require('fs');
const { promisify } = require('util');
const pipeline = promisify(stream.pipeline);
// instantiate the download stream - use options to set authorization header etc. if needed
let downStream = got.stream('https://example.com/download');
downStream.on('response', response => {
@tsmx
tsmx / nginx-cors-dev-proxy.md
Last active September 18, 2023 07:57
nginx as local proxy to avoid CORS during development

nginx as a proxy to avoid CORS during development

A simple setup for using nginx to avoid CORS errors during local development without the need of code changes.

Local dev situation

Let's assume you are developing a frontend and a backend service belonging together. It's a good practice to have those two projects separated to decouple development, deployment, patching etc.

At the end, both parts mostly would run under one domain but in different contexts, e.g.: