Skip to content

Latest commit

 

History

History
1153 lines (969 loc) · 62.7 KB

README.md

File metadata and controls

1153 lines (969 loc) · 62.7 KB

links

Build Status Python version used for testing Code style: black

Links to programming related resources I found useful or interesting. A personal "awesome list".

You can find out more about me at: pawroman.dev

All the links are tested after every commit and daily using lychee via GitHub Actions, but if you see anything that's not working, please let me know!

Table of Contents


Prelude

Some of my favourite quotes:

"Craftsmanship over Crap"
-- Uncle Bob

"… with proper design, the features come cheaply. This approach is arduous, but continues to succeed."
-- Dennis Ritchie

"Code is a way you treat your coworkers. We interact through the things we make."
-- Michael Feathers

"Theory is when you know everything but nothing works.
Practice is when everything works but no one knows why.
In our lab, theory and practice are combined: nothing works and no one knows why."


Other Lists

Algorithms

Articles:

Books:

Other:

Architecture and Programming Patterns

Anti-patterns:

Visualizing Architecture:

Assorted "How Stuff Works"

Career Development

Code Quality and Good Practices

The Clean trilogy from Robert C. Martin ("Uncle Bob"):

  1. Clean Code (book)
  2. The Clean Coder (book)
  3. Clean Architecture (book)

Programming overall:

Principles:

Principle aggregates / manifestos:

Code quality measures:

Legacy / Refactoring / Maintenance:

Other:

Command Line Tools

  • ArchiveBox - Your personal (self-hosted) webpage archive.
  • bandwhich - Display current network utilization by process, connection and remote IP/hostname.
  • bat - Syntax and git-aware cat clone, with automated paging.
  • ctop - top for containers.
  • DBCLI - Collection of great CLI database clients, e.g. pgcli, mycli etc.
  • direnv - Per dir/project env var management. You can use it to activate Python virtual envs, store development environment credentials, personal access tokens, etc. It "just works" and is fast, compared to some other tools.
  • dive - Inspect Docker images, layer by layer. Useful to search for spurious/unneeded files.
  • dua - Aka. dua-cli. A (fast!) disk usage analyzer and cleaner. Also has a nice interactive mode.
  • eza - Better than ls. Also has a tree-like switch (-T). A maintained fork of exa.
  • fd - Better than find.
  • gdb-dashboard - Makes GDB so much better.
  • git-quick-stats - Get simple statistics for your repo.
  • grex - Generate regular expressions matching provided inputs.
  • htop - Excellent process viewer.
  • HTTPie - cURL for humans. An easy to use CLI HTTP client. Uses Python + requests. Also see xh.
  • hyperfine - CLI benchmarking tool.
  • iredis - Featureful Redis CLI client with syntax highlight and completions.
  • kubectx - Switch between Kubernetes contexts (clusters) and namespaces easily.
  • kubetail - Aggregate logs from multiple Kubernetes pods.
  • lazydocker - CLI dashboard for Docker and Docker Compose.
  • lychee - A fast and featureful link checker.
  • Midnight Commander (mc) - The best file manager.
  • mosh - Like ssh, but with local echo and roaming. Good for poor connections.
  • mtr - Better than ping.
  • ncdu - Disk usage analyzer.
  • ripgrep - Fast file content searcher.
  • rmlint - Free up disk space (e.g. duplicate files).
  • sd - A simpler, more intuitive sed replacement.
  • speedtest-cli - Speedtest from a command line.
  • stern - Tail multiple k8s logs (like kubetail) but more quickly (and optionally in JSON format).
  • storm - Manage SSH connections (.ssh/config).
  • tealdeer - A very fast tldr client.
  • thefuck - Correct the previous command.
  • tmux - A terminal multiplexer, more user-friendly than screen.
  • tokei - Count the number of source lines, quickly.
  • topgrade - Upgrade just about everything using one single command.
  • watchexec - Execute a command when a path is modified.
  • xh - A HTTPie clone in Rust. Much faster startup time compared to the original.

GUI tools

I'm not a big fan of GUI, but there are a few good ones I use:

  • PosteRazor - Print posters (e.g. large images spanning multiple paper pages)
  • QDirStat - Analyze disk usage by directory / file type.

Linux Desktop specific:

  • Gestures - A simple GUI for libinput-gestures. Easily assign touchpad multi-touch gestures to arbitrary actions. Also has a useful wiki.

Data

Books

  • Designing Data-Intensive Applications - Excellent book that acts as a guide to modern data engineering (and distributed systems). Explains the basic concepts, as well as theory and practical concerns. Doesn't get too specific regarding the software vendors. Highly recommended.

Date and time

Storage Formats:

  • Delta Lake - A promising new "data lake" format, based on parquet. Widely supported across vendors, frameworks and programming languages.

Databases

Design and Web

Distributed Systems and Cloud Computing

Also see the Data section.

Docker

Eye Candy

Fonts

Programming fonts I found the most eye-pleasing and readable.

  • Hack - My font of choice. Very easy on the eyes, and very unambiguous.

Themes

git

git help

Go

  • The Zen of Go - Go is Go. A few pointers for idiomatic Go code.

Hardware and CPUs

Latency visualized:

Precision of IEEE 754 Floating Point Values (credit: Wikipedia):

Kubernetes

kubectl quick reference:

  • kubectl Cheat Sheet - Handy kubectl cheat sheet
    • Also very useful: kubectl explain -- see: kubectl explain — #HeptioProTip
    • kubectl api-resources -- show all object kinds, their short names and API groups (empty API group means v1).
  • API exploration:
    • kubectl explain pod
    • kubectl explain pod.spec.volumes.persistentVolumeClaim -- explain nested specs/objects
  • Authorization:
  • Generating YAMLs quickly:
  • Getting all objects:
    • kubectl get all [-n NAMESPACE] [-l LABEL=VALUE,LABEL2!=VALUE]

Recipes / how-tos:

Linux

Management / dealing with people

Books and Resources:

  • Turn the Ship Around! - Great book on management from a US Navy captain. Straight to the point, down-to-earth and genuinely interesting (it's a true story and there's a nuclear submarine involved).

    Focuses on leader-leader approach to management and patterns to introduce it in an organization.

  • Manager's Playbook - Heuristics for effective management.

Articles / blog posts:

Talks:

Timezone tools:

  • Every Time Zone - A readable time zone overview. Useful for scheduling meetings.

Estimating time:

Talking about technical debt with business people:

(From Kent Beck's twitter: https://web.archive.org/web/20191028001516/https://twitter.com/KentBeck/status/1187766114706542593 )

  • "Investing in improving structure" over "Paying off technical debt"
  • "Resilience & Scaling" over "Technical debt work"
  • "Upgrade" over "Refactoring"
  • Playing Business cards:
    • Reduce cost (including time cost to market and shipping new features)
    • Protect revenue (including preventing disasters)
    • Increase revenue (selling more, adding new features)

Open Source Programs:

Networking

  • Endlessh - SSH tarpit server.

  • Reserved IP addresses - List of reserved and special purpose addresses (Wikipedia).

    Private IPv4 network ranges:

    10.0.0.0/8     : 10.0.0.0    - 10.255.255.255
    172.16.0.0/12  : 172.16.0.0  - 172.31.255.255
    192.168.0.0/16 : 192.168.0.0 - 192.168.255.255
    

    Other commonly used network ranges:

    Default Docker bridge network
    172.17.0.0/16  : 172.17.0.1   - 172.17.255.255
    

Privacy

Articles

Resources

  • Pi-hole - Your custom DNS server, with a lot of features. Can run on a Raspberry Pi.
  • privacytools.io - A grab-bag of resources for the privacy-minded.
  • WireGuard - The next-generation, fast & easy to use VPN.

Productivity

Programming Languages

Resources for no particular language, useful for comparing them.

Python

Resources related to the Python programming language.

Note that you should only be using Python 3, as Python 2 will retire (early 2020): Python 2.7 Countdown

Also see: Status of Python branches

Python learning

Python internals and advanced topics:

Python libraries

  • aio-libs - A collection of asyncio compatible libraries.
  • attrs - Alternative to 3.7's dataclasses.
  • Beautiful Soup - Pythonic HTML/XML parsing.
  • bleach - Sanitize untrusted strings so that they are HTML safe.
  • click - Command line argument parser and then some.
  • delta-rs (aka. deltalake) - A library for interacting with the Delta Lake format, written in Rust.
  • httpx - Requests-inspired HTTP client with both sync and async APIs.
  • irc3 - IRC client based on asyncio.
  • janus - Queue class that bridges the worlds of threading and asyncio.
  • Jinja2 - The only Python template engine worth your time.
  • Lark - Fast parsing library. Good alternative to pyparsing.
  • lxml - A very fast and featureful (e.g. can use XPath), albeit a bit low-level XML and HTML parsing library.
  • NetworkX - Graph ("network") manipulation and analysis library. Comprehensive yet simple and easy to use.
  • Numba - JIT compiler for NumPy code. Produces very fast code.
  • pathlib - Excellent standard library module for filesystem path manipulation.
  • Pendulum - A date/time library with nice API.
  • psutil - Swiss army knife for process management and system monitoring.
  • pydantic - Pythonic data validation. Supports dataclasses and has a mypy plugin. Perfect for settings/configs and wherever data validation is required.
  • pydeps - Visualize Python module dependencies.
  • pyjwt - Work with JSON Web Tokens (JWT).
  • PyPDF2 - Read and manipulate (e.g. merge) PDF files.
  • PySnooper - Poor man's debugger for Python.
  • pytest - The only Python test runner worth using these days.
  • quamash - Use asyncio with Qt event loop.
  • requests - The HTTP library for Python.
  • tqdm - Nice progress bar library and command line tool.
  • WebSockets - asyncio compatible, no-frills WebSocket client/server.
  • xdoctest - Better doctest, with pytest integration.
  • xmltodict - Extract data from XML just like JSON.
  • yarl - URL parsing and manipulation library. Better API (immutable) compared to furl.

Less known, but very useful things in the standard library:

Python news and community

Python tools

  • austin - Profiler / stack frame sampler, with TUI and optional Web UI.
  • IPython - An enhanced Python shell.
    • ipdb - IPython-enabled debugger.
  • line_profiler - Profile Python line-by-line.
  • memory_profiler - Profile Python memory usage line-by-line.
  • py-spy - A low-overhead sampling Python profiler.
  • pyflame - Flame graph profiler based on ptrace (Linux only).
  • ruff - An extremely fast Python linter, written in Rust.
  • scalene - A high-performance CPU and memory profiler for Python.

Rust

Rust learning

Meta: book of Rust books:

Quick references / cheatsheets:

Get started with Rust:

Intermediate:

Advanced:

Evangelism:

Rust libraries

  • assert_cmd - Easily test CLI applications.
  • camino - UTF-8 Path and PathBuf, for when low-level nitty-gritty details of the OS-specific path encoding don't matter.
  • cmd_lib - Makes running shell commands from Rust very succinct.
  • humantime - Parse and format human-readable date/times and durations.
  • parking_lot - Synchronization primitives faster than standard library.
  • PyO3 - Expose Rust libraries to Python, and interact with Python from Rust. Widely used and well-supported.
  • reqwest - Async HTTP client library, with a blocking mode. Featureful and well documented.
  • rust-phf - Generate hash tables using perfect hash functions at compile time.
  • serde - The (de)serialization framework for Rust. Extremely well done.
  • static_assertions - Static (compile time) assertions, for API stability and const expressions.
  • structopt - Parse CLI args (with env var fallbacks) easily, by defining a struct. Reduces CLI args parsing logic to virually zero. Recently merged into clap.
  • wiremock - Excellent HTTP mocking library, e.g. for testing HTTP clients. Async compatible.

Less known, but very useful things in the standard library:

Rust news and community

  • caniuse.rs - List and search features introduced in each version of Rust (including future ones!).
  • Rust Forge - Rust release dates and many useful links related to the project.
  • Rust Reddit
  • This Week in Rust - Weekly Rust newsletter, archive available online.

Rust posts and talks

Breaking things:

  • Rust in an instant - A cautionary post about monotonic time and linker symbol shadowing (no_mangle).

Rust tools

  • cargo-binstall - An effort to bring standardized binary installation to Rust tools. Can save you some compilation time in the CI.
  • cargo-bloat - Find out what takes most of the space in your executable.
  • cargo-fuzz - Fuzzing Rust code.
  • cargo-semver-checks - Check for Rust semver violations.
  • std::dbg - Standard library debug macro, to replace ad-hoc println! debugging. Stabilized in 1.32.0.

Shell

  • Defensive BASH Programming - Good practices for Bash scripting. (Archived from a defunct blog).
  • gitstatus - Faster git status alternative for shells.
  • oh-my-zsh - ZSH configuration framework.
  • starship - Fast, featureful shell prompt. Compatible with many shells. The new version (0.45.0+) provides a lot more configuration options compared to previous versions.

Testing

Static Analysis

  • static-analysis - "A curated list of static analysis tools for all programming languages, config files, build tools, and more."

Visualization

Links related to data visualization.