Skip to content

Instantly share code, notes, and snippets.

View szkrd's full-sized avatar

szabolcs kurdi szkrd

  • tralfamadore
View GitHub Profile
@szkrd
szkrd / forward.js
Created February 22, 2022 19:50
Wait for interface to come up then start forwarder to local server (windows).
const net = require('net');
const spawn = require('child_process').spawn;
const ports = [80, 5000];
const sleepSecs = 30;
const interfaceMatcher = /(169\.254\.[\d\.]+)/;
function doForward(listenInterface = '0.0.0.0') {
const server = net.createServer(function (from) {
const to = net.createConnection({ host: '127.0.0.1', port: ports[1] });
from.pipe(to).on('error', (err) => console.log('from error', err.code));
@szkrd
szkrd / watch-log.js
Created July 5, 2021 11:15
watch for changes in a log file in a memory efficient way (like tail -f)
// npm init --yes && npm i -S chalk chokidar split
const fs = require("fs");
const { stat } = require("fs").promises;
const { red, cyan } = require("chalk");
const chokidar = require("chokidar");
const split = require("split");
let config = require("./config.json"); // { okPattern: string, nokPattern: string, logFile: string }
try {
config = require("./config.user.json");
} catch (err) {}
@szkrd
szkrd / taskbar.au3
Last active January 31, 2021 14:23
Calling a dll with autoit
Func ToggleTaskbarAutohide($hide = False)
; this is the message id (from nf-shellapi-shappbarmessage documentation page at microsoft.com)
Local Static $ABM_SETSTATE = 0xA
; these two are message payloads, probably defined as constants in the dll / c lib itself
; a list could be found here: https://stackoverflow.com/a/44746235
Local Static $ABS_AUTOHIDE = 1, $ABS_ALWAYSONTOP = 2
; appbardata will be filled with the results (or prefilled with the input),
; the SHAppBarMessage documentation tells us how it looks:
@szkrd
szkrd / bookmarks-json-to-md.js
Created January 4, 2021 12:58
convert pinboard exported bookmarks json to markdown
const fs = require('fs');
const source = require('./pinboard_export.json');
const uniq = (value, index, self) => self.indexOf(value) === index;
let text = '';
source.forEach(bkm => {
text += `## ${bkm.description}\n`;
if (bkm.extended) text += `${bkm.extended}\n`
text += `${bkm.href}\n`
if (bkm.tags) {
const tags = bkm.tags.split(' ').map(t => {
@szkrd
szkrd / test-utils-json.js
Created September 17, 2020 10:05
Make json snapshots less painful: replace functions/classes with their names (if possible), convert dates to numbers, remove undefined enumerable properties
function logObject(obj) {
let result = JSON.stringify(obj, null, 2);
let hr = '';
for (let i = 0; i < 80; i++) { hr += '-'; }
const lines = result.split('\n');
result = lines.map(line => line.replace(/^(\s+)"([a-zA-Z0-9_$]*)"/, '$1$2')).join('\n');
console.log(`${hr}{{{\n${result}\n}}}${hr}`);
}
function stringifyComplexObjects(obj) {
@szkrd
szkrd / autoConnect.ts
Last active July 19, 2020 09:48
react redux typescript fancy connect (with IDE code completion)
import store, { IState } from '../../actions'
import { connect } from 'react-redux'
const isFunc = (item) => typeof item === 'function'
const isNotFunc = (item) => !isFunc(item)
const filter = (obj, comp) => {
return Object.keys(obj).reduce((acc, key) => {
if (comp(obj[key])) {
acc[key] = obj[key]
}
@szkrd
szkrd / huskify.sh
Last active July 14, 2020 08:54
force install husky (probably v4.x only)
#!/usr/bin/env bash
function addHook() {
echo -e "#!/bin/sh\n# husky" > .git/hooks/$1
echo '. "$(dirname "$0")/husky.sh"' >> .git/hooks/$1
chmod +x .git/hooks/$1
}
DIRNAME="$(basename "${PWD}")"
if [ "${DIRNAME}" = 'server' ] || [ "${DIRNAME}" = 'client' ]; then echo "Do not run this script in the server/client subdir!"; exit 1; fi
if [ ! -f ./node_modules/husky/package.json ]; then echo "Project has no husky?"; exit 2; fi
@szkrd
szkrd / downgrade-all-to-128k-mp3.sh
Created July 4, 2020 19:25
convert all music files recursively to 128k mp3 (and then use cloudbeats or evermusic to stream them)
#!/usr/bin/env bash
read -p "This will RECURSIVELY process all music files and downgrade them; are you sure? " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
[[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1
fi
shopt -s nullglob
# recursively find all music files and then convert them one by one to 128k mp3
find . -type f -iname "*.mp3" -o -iname "*.flac" -o -iname "*.mpc" -o -iname "*.ogg" | while read file; do
cd "$(dirname "${file}")"
@szkrd
szkrd / checkLocaleJsonValidity.js
Created March 2, 2020 14:30
check if locale json file is valid or not (parsable and has unique jeys only) - since git merge may cause headaches
const fs = require('fs');
const path = require('path');
const dir = path.join(__dirname, '/../locales');
fs.readdir(dir, (err, files) => {
files.filter(fn => /\.json$/.test(fn)).forEach(fn => {
fs.readFile(path.join(dir, fn), (err, s) => {
s = s + '';
let lang = {};
try {
lang = JSON.parse(s);
@szkrd
szkrd / record-screen.sh
Created February 19, 2020 20:27
record window on x11 using ffmpeg
#!/usr/bin/env bash
NOCOLOR='\e[0m'
RED='\e[0;31m'
GREEN='\e[0;32m'
YELLOW='\e[1;33m'
CYAN='\e[0;36m'
command -v ffmpeg >/dev/null 2>&1 || { echo >&2 "${RED}ffmpeg not installed!${NOCOLOR}"; exit 1; }
echo -e "You can select a window for ${CYAN}fixed coordinates${NOCOLOR} in 3 seconds."
sleep 3
echo "Select window!"