Tools

Developer cheatsheets, CLI references, and useful patterns I keep coming back to. Copy, paste, adjust. Updated whenever I learn something new.

CLI

4 items

Git

Git commands I always have to look up

# Branch
git checkout -b new-branch          # create & switch
git switch -c new-branch            # modern way
git rebase main                     # rebase onto main
git cherry-pick <commit>           # pick specific commit
git stash -u                       # include untracked files

# Undo
git commit --amend                  # change last commit msg
git reset --soft HEAD~1            # undo commit, keep staged
git reset --mixed HEAD~1           # undo commit, unstaged
git reset --hard HEAD~1            # undo commit, discard all
git revert <commit>                # create reverting commit

# Browse
git log --oneline -20
git log --graph --oneline --all    # visualize branches
git diff HEAD~3..HEAD
git diff main..feature
git blame path/to/file
git show <commit>:path/to/file     # file at commit

# Submodules
git submodule add <url> <path>
git submodule update --init --recursive
#git#version-control

Docker

Docker commands I actually use

# Build & Run
docker build -t myapp .
docker run -d -p 3000:3000 --name myapp myapp
docker compose up -d
docker compose -f prod.yml up -d

# Inspect
docker ps -a                       # all containers
docker images
docker logs -f <container>
docker exec -it <container> sh
docker inspect <container>
docker stats --no-stream          # live stats once

# Clean
docker system prune -f
docker container prune -f
docker image prune -f
docker rm $(docker ps -aq)
docker rmi $(docker images -q)
docker volume prune

# Network
docker network ls
docker network create mynet
docker run --network mynet ...

# Multi-stage
FROM node:20-alpine AS builder
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder/dist ./usr/share/nginx/html
#docker#containers

Linux

Common shell commands for daily work

# Disk & Memory
df -h /                      # disk usage
du -sh *                    # dir sizes (human)
du -sh /* 2>/dev/null | sort -h | tail -10
free -h                      # memory

# Network
ss -tulnp                   # listening ports
curl -I <url>               # check headers
wget -qO- <url>             # fetch quietly
nc -zv host 80              # test port
mtr google.com              # traceroute

# Process
ps aux | grep <name>
top / htop                  # monitor
kill -9 <pid>
nohup cmd &                 # background
Ctrl+Z; bg                  # suspend then bg
watch -n1 'command'         # repeat every 1s

# Files
find . -name "*.log" -mtime +7
tar -czf archive.tar.gz dir/
rsync -avz src/ dest/
chmod +x script.sh

# Text
grep -r "pattern" . --include="*.ts"
awk -F',' '{print $1}' file.csv
sed -i 's/old/new/g' file
cat file | jq '.'            # pretty json
#linux#shell

npm / Node

npm and Node.js CLI essentials

# Packages
npm install <pkg>
npm install -D <pkg>         # dev dependency
npm install <pkg>@<version>
npm uninstall <pkg>
npm update <pkg>

# Run
npm run dev                  # dev script
npm run build
npm run test

# Package info
npm info <pkg>
npm view <pkg> versions
npm ls                        # installed

# npx
npx create-next-app@latest
npx tsc --init
npx playwright install

# Node
node -e "console.log('hello')"
node --inspect index.js
node --version
nvm use 20                   # node version manager
#node#npm#javascript
🌐

Web Dev

5 items

CSS Grid

CSS Grid layout patterns that actually work

/* Holy Grail layout */
.parent {
  display: grid;
  grid-template-columns: 250px 1fr 250px;
  grid-template-rows: auto 1fr auto;
  min-height: 100vh;
}

/* Responsive grid */
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 1.5rem;
}

/* Span tricks */
.item { grid-column: span 2; }
.item { grid-row: 2 / 4; }
.item { grid-column: 1 / -1; /* full width */ }

/* Place items center */
.wrapper {
  display: grid;
  place-items: center;
}

/* Subgrid */
.parent {
  display: grid;
  grid-template-columns: 1fr 2fr;
}
.child {
  grid-column: span 2;
  display: grid;
  grid-template-columns: subgrid;
}
#css#layout#grid

Flexbox

Flexbox patterns I use constantly

/* Center everything */
.container {
  display: flex;
  justify-content: center;
  align-items: center;
}

/* Space between columns */
.row {
  display: flex;
  gap: 1rem;
}
.row > * { flex: 1; }

/* Sticky footer */
.page {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}
.content { flex: 1; }
.footer { margin-top: auto; }

/* Wrap with gaps */
.cards {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}

/* Vertical stack */
.vstack { display: flex; flex-direction: column; gap: 1rem; }

/* Equal height columns */
.row { display: flex; }
.row > * { flex: 1; }
#css#flexbox#layout

Regex

Regex patterns for everyday use

# Common patterns

# Email
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}

# URL
https?://[^s/$.?#].[^s]*

# Chinese chars
[一-鿿]

# Trim whitespace
^s+|s+$

# Numbers only
^d+(.d+)?$

# Capture groups
(d+)-(w+)  → match[1]=digits, match[2]=word

# Lookahead/lookbehind
foo(?=bar)    # foo followed by bar
(?<=foo)bar   # bar preceded by foo
(?!bar)foo    # foo NOT followed by bar

# Replace examples (JS)
str.replace(/(\d+)/g, '#$1')
str.replace(/(\w+)/g, (_, p) => p.toUpperCase())
#regex#text

HTTP Headers

Useful curl commands and header references

# Common headers
curl -I https://example.com         # headers only
curl -v https://example.com          # verbose
curl -X POST https://api.com \
  -H "Content-Type: application/json" \
  -d '{"key":"value"}'

# Auth
curl -H "Authorization: Bearer <token>" \
     -H "X-API-Key: <key>"

# Common response codes
200 OK | 201 Created | 204 No Content
301 Moved | 302 Found | 304 Not Modified
400 Bad Request | 401 Unauthorized
403 Forbidden | 404 Not Found
429 Too Many Requests | 500 Internal Error

# Cache headers
Cache-Control: max-age=3600
ETag: "abc123"
Last-Modified: Mon, 01 Jan 2024 00:00:00 GMT
#http#network#curl

Chrome DevTools

DevTools tricks I keep forgetting

# Console
$x('//div')           # XPath query
$$('div')             # querySelectorAll
copy(object)         # copy to clipboard
monitor(fn)           # log when function called

# Network
Copy as cURL          # right-click request
Resend from Network   # right-click → Replay

# Elements
Ctrl+Shift+P         # command palette
$0                    # current element
$_                    # last result

# Performance
Ctrl+Shift+P → Show Coverage
Ctrl+Shift+P → Rendering → FPS meter

# Application
Clear storage        # Application tab
View IndexedDB       # Application → IndexedDB

# Network throttling
Ctrl+Shift+P → Network throttling
#devtools#chrome#debug
🤖

AI & Data

3 items

curl + LLM

Call LLM APIs from terminal

# OpenAI-compatible API
curl https://api.openai.com/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [{"role":"user","content":"Hello!"}]
  }'

# Ollama (local)
curl http://localhost:11434/api/chat -d '{
  "model": "llama3",
  "messages": [{"role":"user","content":"Hello!"}]
}'

# Claude (Anthropic)
curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "max_tokens": 1024,
    "messages": [{"role":"user","content":"Hello!"}]
  }'
#ai#llm#api

SQL

Common SQL patterns I keep referencing

-- Window functions
SELECT name, salary,
  SUM(salary) OVER (ORDER BY salary DESC) as running_total,
  RANK() OVER (PARTITION BY dept ORDER BY salary DESC) as rank,
  LAG(created_at, 1) OVER (ORDER BY created_at) as prev
FROM employees;

-- CTE chain
WITH monthly_sales AS (
  SELECT DATE_TRUNC('month', created_at) as month, SUM(amount) as total
  FROM orders GROUP BY 1
),
growth AS (
  SELECT month, total,
    LAG(total) OVER (ORDER BY month) as prev
  FROM monthly_sales
)
SELECT month, total, prev,
  ROUND((total - prev) / prev * 100, 2) as growth_pct
FROM growth;

-- JSON in Postgres
SELECT data->>'name', data->'items'->0 FROM logs;
UPDATE logs SET data = jsonb_set(data, '{status}', '"active"');
SELECT jsonb_array_elements(data->'tags') FROM items;

-- Index
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at DESC);
CREATE INDEX idx_users_email ON users(lower(email));
#sql#postgres#database

Python Scripts

Handy Python one-liners and snippets

# One-liners
python3 -c "print('hello')"
python3 -m http.server 8000
python3 -m json.tool data.json  # pretty print
python3 -c "import this"         # the zen

# Read/write
with open("file.txt") as f: print(f.read())
with open("out.txt", "w") as f: f.write("hi")

# HTTP server
python3 -m http.server 8080 --directory /tmp

# JSON
import json; data = json.load(open("f.json"))
print(json.dumps(data, indent=2, ensure_ascii=False))

# List tricks
[x for x in items if x['active']]
sum(1 for x in lst if condition)
list(set(items))  # dedupe

# Dict
{k: v for k, v in items.items() if v > 0}
{d.get('key', 'default') for d in list}
#python#scripting
🔒

Security

2 items

OpenSSL

SSL/TLS certificate operations

# Check certificate
openssl s_client -connect google.com:443
openssl s_client -connect google.com:443 -servername google.com

# Generate key & CSR
openssl genrsa -out key.pem 2048
openssl req -new -key key.pem -out csr.pem

# Self-signed cert
openssl req -x509 -newkey rsa:4096 \
  -keyout key.pem -out cert.pem \
  -days 365 -subj "/CN=localhost"

# Convert formats
openssl x509 -in cert.pem -inform PEM -outform DER -out cert.der
openssl pkcs12 -export -in cert.pem -inkey key.pem -out bundle.p12

# Check expiry
openssl x509 -in cert.pem -noout -enddate

# Decode CSR
openssl req -in csr.pem -noout -text
#ssl#tls#security

SSH

SSH config and tunnel commands

# Quick connect
ssh user@host
ssh -i key.pem user@host
ssh -p 2222 user@host

# Tunnel
ssh -L 3000:localhost:3000 user@host
ssh -L 5432:localhost:5432 user@host
ssh -R 8080:localhost:80 user@host

# Config ~/.ssh/config
Host prod
  HostName example.com
  User admin
  Port 2222
  IdentityFile ~/.ssh/prod_key
  ProxyJump jump-host

# Copy files
scp file.txt user@host:/path/
scp -r ./dir user@host:/path/
rsync -avz -e "ssh -p 2222" ./dir user@host:/path/

# Keygen
ssh-keygen -t ed25519 -C "my key"
ssh-copy-id user@host
#ssh#remote#security