Skip to content

Instantly share code, notes, and snippets.

View knadh's full-sized avatar

Kailash Nadh knadh

View GitHub Profile
/*
Kailash Nadh (http://kailashnadh.name)
localStorageDB
September 2011
A simple database layer for localStorage
License : MIT License
*/
@knadh
knadh / zsh-elapsed-time.md
Last active February 20, 2024 22:29
Elapsed and execution time for commands in ZSH

Elapsed and execution time display for commands in ZSH

Append this to your ~/.zshrc file.

function preexec() {
 timer=$(($(date +%s%0N)/1000000))
@knadh
knadh / netstat-conn-group.sh
Created September 10, 2017 07:58
Group and list all TCP connections (local address) by port and number of connections
netstat -ntu | awk ' $4 ~ /^[0-9]/ {print $4}' | sort | uniq -c | sort -n
# Rehashed from http://www.commandlinefu.com/commands/view/8767/netstat-with-group-by-ip-adress
@knadh
knadh / voltdb-direct-download.md
Created August 28, 2018 05:17
VoltDB Community Edition direct download
@knadh
knadh / redis-protocol.go
Created February 16, 2019 10:14
Go function for generation Redis raw protocol for importing with redis-cli --pipe
package main
import (
"fmt"
"bytes"
"strconv"
)
// toRedisProto converts a Redis command, represented by a slice of
// bytes, where each element of the slice represents a chunk of the
@knadh
knadh / nats-cluster-multiple-publisher-failover.md
Created March 21, 2019 08:02
Running multiple active publishers on a NATS cluster for failover avoding message duplication

Running multiple active publishers on a NATS cluster for failover while avoding message duplication

NATS is an excellent, clustered, full-mesh PubSub messaging system, highly performant and a cakewalk to setup. Full mesh means every node (servers and clients) knows about every other node, which is great, but makes it tricky to have multiple publishers on hot standby, for high availability of publishers (not the NATS network), while avoiding duplicate pubs.

Here --no-advertise comes in handy if we're willing to sacrifice the automatic meshing and discovery mechanism. This may be acceptable in setups where only a fixed set of NATS servers run in a cluster and whose addresses (either IPs or hostnames) are known.

--no-advertise

The gnatsd --no-advertise flag makes a NATS server not advertise itself automatically to the mesh. For other nodes to discover --no-advertise nodes, the --routes have to be explicitly specified. If there are N servers, there should be N routes.

Unable to get cluster admin: kafka: controller is not available

If you get this error and don't want to waste hours trying to debug why kaf is unable to communicate with a Kafka cluster, make sure you have an entry in the hosts file for the system's hostname that resolves to self (127.0.0.1), if your cluster is running locally.

@knadh
knadh / go-graceful-reload.go
Last active July 14, 2020 05:30
Example of gracefully shutting down and re-loading / restarting a Go app on SIGHUP retaining the same PID
// program
package main
import (
"fmt"
"log"
"os"
"os/signal"
"syscall"
"time"
@knadh
knadh / listmonk-upgrade-v0.7.0-alpha.sql
Created July 26, 2020 15:06
Schema changes to upgrade to listmonk v0.7.0-alpha
ALTER TABLE media DROP COLUMN width, DROP COLUMN height;
ALTER TABLE media ADD COLUMN provider TEXT NOT NULL;
DROP TABLE IF EXISTS settings CASCADE;
CREATE TABLE settings (
key TEXT NOT NULL UNIQUE,
value JSONB NOT NULL DEFAULT '{}',
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
DROP INDEX IF EXISTS idx_settings_key; CREATE INDEX idx_settings_key ON settings(key);
INSERT INTO settings (key, value) VALUES
@knadh
knadh / go-redis-struct-scan.go
Last active January 24, 2021 10:06
A Redis reply to struct scanner for go-redis/redis
package cacheman
import (
"errors"
"fmt"
"reflect"
"strconv"
"strings"
)