Skip to content

Instantly share code, notes, and snippets.

@khansgithub
Last active July 25, 2024 17:50
Show Gist options
  • Save khansgithub/c7a6bfca57631a4c45e2c75b7b5f881e to your computer and use it in GitHub Desktop.
Save khansgithub/c7a6bfca57631a4c45e2c75b7b5f881e to your computer and use it in GitHub Desktop.

contents


git

global user.email user.name

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

switch user and choose which shell to use

su -s /bin/bash <user>

credential cache helper

git config --global credential.helper cache
git config --local credential.helper cache

git config --global --unset credential.helper

disable credential helper for single command

git clone https://bitbucket.org/<repo>.git --config credential.helper=

s6

list services

ls /run/service/

restart service

s6-svc -r /run/service/svc-openssh-server

docker

get docker

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker

list containers by name

docker ps -a --format "{{.Names}}" 

basic health check

docker run \
    ...
    --health-cmd "set -e;  nc -zv localhost 22; if [ $? -eq 0 ]; then exit 0; else exit 1; fi" \
    --health-interval=10s 
    ...

troubleshooting

Error response from daemon: client version 1.40 is too new...

# set to working version
DOCKER_API_VERSION=1.41

etc

docker ps name and status format

docker ps --format "{{printf \"%-30s %-20s\" .Names .Status}}"
watch 'docker ps --format "{{printf \"%-30s %-20s\" .Names .Status}}"'

python

monkeytype add type hints

# foo.py
import foo.bar
foo.bar.foobar()
monkeytype run foo.py
...
monkeytype apply foo.bar

interactive pdb

import ipdb
ipdb.set_trace()

module structure

https://ianhopkinson.org.uk/2022/02/understanding-setup-py-setup-cfg-and-pyproject-toml-in-python/

├── README
├── pyproject.toml
├── setup.py
└── src
    └── foobar
        └── __init__.py
pyproject.toml
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
setup.py
#! /usr/bin/env python

from setuptools import setup

if __name__ == "__main__":
    setup()

install module develop mode

pip install --editable .
pip install -e .

go

safe map look up

value, exists := foo["bar"]
if (!exists) {}

get go

# https://go.dev/doc/install
wget <tar_from_https://go.dev/doc/install>
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.3.linux-amd64.tar.gz
sudo ln -s /usr/local/go/bin/go /usr/bin/go
#sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.20.3.linux-amd64.tar.gz

linux

jobs

# view jobs
jobs

# send job to background and stop
ctrl  + z

# resume background job
bg [job id]

# switch to job
fg [job id]

# run command as background job
tail -f log.txt &

cd follow sym link

cd -P ./sym-link-dir

list all listening ports and associated services

sudo netstat -tunlp

get umask

stat -c %a foo.txt

tmux

basics

        new window - CTRL + b + c
     switch window - CTRL + b + [0-9]+
  vertical split | - CTRL + b + %
 horizonal split _ - CTRL + b + "
   navigate panels - CTRL + b + ↑ / ↓ / ← / →

rename window / pane

window

CTRL + B + ,

pane

CTRL + B + :
select-pane -T <PANE NAME>

session

minimise session

CTRL + b + d

attach to running session

tmux a

redis

redis-cli

list keys

keys * 

read stream

xrange <key> - + 

find keys and pipe to delete

#             < query >
redis-cli keys rq:res* | awk '{print $1}' | xargs redis-cli del

curl

pass file to curl as data

curl localhost:3000/workflow -X POST  -H 'Content-Type: application/json' --data-binary "@data.json"

nodejs

set NODE_PATH

sometimes when using Node interactive, it might not be able to find global packages. hence it's necessary to set NODE_PATH

export NODE_PATH=$(npm root --quiet -g)

node_modules bin dir

/home/node/app/node_modules/.bin

typescript

installing on corp VM

sudo apt-get update

sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
sudo chmod 644 /etc/apt/keyrings/nodesource.gpg

sudo apt-get update

sudo apt-get install nodejs -y

sudo npm install -g typescript
sudo chwon ubuntu -R /usr/lib/node_modules/typescript 
sudo chwon ubuntu /usr/lib/node_modules/typescript

debug in vscode

// launch.json
{
    "type": "node",
    "request": "launch",
    "name": "ts debug",
    "skipFiles": ["<node_internals>/**"],
    "program": "${workspaceFolder}/src/index.ts",
    "runtimeArgs": ["-r", "ts-node/register", "-r", "tsconfig-paths/register"],
    "console": "internalConsole"
}

// tsconfig.json
{
    "sourceMap": true    
}

transpile multile ts files

// /package.json
{
    "scripts": {
        "start": "nodemon ./src/index.ts"
    },
    "nodemonConfig": {
        "exec": "tsc && ts-node .",
        "ext": "ts"
    }
}

// /src/tsconfig.json
{
    ...
    "include": ["./src/frontend/foobar.ts"]
}

// /src/frontend/tsconfig.json
{
    "compilerOptions": {
        "module": "ES6",
        "target": "ES2017",
        "outFile": "./foobar.js",
        "rootDir": ".",
        "sourceMap": true,
        "noEmit": false
    }
}

stupid front end stuff

appending innerHTML breaks all event listeners

var html_to_insert = "<p>New paragraph</p>";

// with .innerHTML, destroys event listeners
document.getElementById('mydiv').innerHTML += html_to_insert;

// with .insertAdjacentHTML, preserves event listeners
document.getElementById('mydiv').insertAdjacentHTML('beforeend', html_to_insert);

vs code

custom tasks

// example file
// .vscode/tasks.json
{
	"version": "2.0.0",
	"inputs": [
		{
			"id": "imageName",
			"type": "promptString",
			"description": "Enter the image name",
			"default": "my-container-image"
		},
	],
	"tasks": [
		{
			"type": "typescript",
			"tsconfig": "portal/client/tsconfig.json",
			"problemMatcher": [
				"$tsc"
			],
			"group": "build",
			"label": "tsc: build - portal/client/tsconfig.json"
		},
		{
			"label": "Build Image",
			"type": "shell",
			"command": "podman",
			"args": [
				"build",
				"-f",
				"${file}",
				"-t",
				"${input:imageName}:${input:imageTag}"
			],
			"group": {
				"kind": "build"
			}
		}
	]
}

k8

restart deployment

kubectl rollout restart deployment/core-service  -n osna 
@gamma-khan
Copy link

  • pyenv
  • some libraries required
sudo apt-get install -y build-essential curl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev libffi-dev liblzma-dev zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev wget
pyenv install 3.11

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment