Skip to content

Instantly share code, notes, and snippets.

@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 / 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 / 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 / sorted-iterable-map.js
Last active September 30, 2023 13:41
sorted-iterable-map: iterate with a for-loop over a JavaScript Map sorted by value attributes with a custom iterator using function* and yield*
// In the example: sort descending by 'activeUsers' attribute of the value object
var countries = new Map();
countries.set('DE', { name: 'Germany', activeUsers: 15000 });
countries.set('PL', { name: 'Poland', activeUsers: 13900 });
countries.set('UK', { name: 'United Kingdom', activeUsers: 14500 });
console.log('without iterator:');
for (let [key, info] of countries) {
@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 / fedora-fix-grub2-after-kernel-update.md
Last active December 31, 2023 10:12
Fedora - fix grub2 after kernel update with invalid environment block error

Sometimes an update of the kernel breaks your current grub2. You will see an error like /usr/bin/grub2-editenv: error: invalid environment block during execution of the update procedure.

In that case don't restart your machine because it is most likely that this will fail and then you'll have to fix it using chroot from a Live Media. Instead, immediately after the update showing up the error, fix it by executing the following as root:

dnf reinstall grub2-efi-x64 shim-x64
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
@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.:

@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 / 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 / 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.