the full playlist is on youtube
- introducing anthony explains!
- python cli tested with pytest - (beginner to intermediate)
- python @decorators - (intermediate)
- my favorite python str method! (beginner - intermediate)
- how to make a simple github PR (beginner)
- the python @property decorator (beginner - intermediate)
- python type(x).__name__ vs x.__class__.__name__ (intermediate)
- python return annotations: NoReturn vs None (intermediate)
- what's wrong with python's blank except:? (beginner - intermediate)
- how I use selenium + html/css to make thumbnails (intermediate)
- python: raising Error without parens (intermediate)
- python's tricky
for ...: else:
statement (beginner - intermediate) - python's
pass
statement (beginner - intermediate) - shell bling strings! (beginner - intermediate)
- setting up an ubuntu focal virtual machine (beginner - intermediate)
- python executable zipapps (intermediate)
- pretty python profiling (intermediate)
- python implicit string joining (beginner - intermediate)
- postmortem debugging in python (beginner - intermediate)
- configuration management (devops) (intermediate)
- how to pronounce PyPI (beginner)
- all python argument / parameter types (beginner - intermediate)
- what is a tty? (beginner - intermediate)
- introduction to markdown (beginner)
- how do I get started in open source? (beginner)
- a flake8 plugin from scratch (intermediate)
- finding regressions with git bisect (intermediate)
- pytest's parametrize (beginner - intermediate)
- python curses "hello world" (beginner - intermediate)
- git: empty initial commit (beginner - intermediate)
- dockerfile RUN : \ && syntax (beginner)
- python variable unpackings (beginner - intermediate)
- docker: ADD «url» considered harmful? (intermediate)
- what is a shebang (#!)? (beginner - intermediate)
- what is test driven development? (beginner - intermediate)
- python single vs double quote strings! (beginner)
- git: ignoring noisy whitespace changes (beginner - intermediate)
- git: useful trick for pushing branches (beginner - intermediate)
- python github actions w/ tox and pre-commit (intermediate)
- releasing a python package to pypi (beginner - intermediate)
- virtualenv vs. venv (beginner - intermediate)
- implementing --version with importlib.metadata (intermediate)
- string formatting in python (beginner - intermediate)
- introduction to tox (beginner - intermediate)
- python argparse tutorial (beginner - intermediate)
- typing __getitem__ (python / mypy) (intermediate)
- fixing a git mistake with reflog (intermediate)
- introduction to python typing + mypy (beginner - intermediate)
- python packaging: src layout (intermediate)
- three ways to edit git commits (intermediate)
- stdin / stdout / stderr (beginner - intermediate)
- hacker mode tmux debugging (intermediate)
- regular expressions crash course (beginner - intermediate)
- web security: what is a csrf exploit? (intermediate)
- python: functools.lru_cache (beginner - intermediate)
- python __future__ "module" (beginner - intermediate)
- undoing an accidental git commit (intermediate)
- python packaging: basic setup.py and declarative metadata (intermediate)
- what is deadsnakes? (beginner - intermediate)
- getting started with programming (beginner)
- git show (+ some tips!) (beginner)
- python star imports (beginner - intermediate)
- intro to apt (debian / ubuntu) (beginner + intermediate)
- correct conditional arguments in bash (beginner - intermediate)
- using the python __import__ builtin correctly (intermediate)
- special paths: ~, ~user, ., .. (beginner)
- protip: exiting really fast! (beginner)
- python: Ellipsis (...) and typing (beginner - intermediate)
- git cherry-pick (intermediate)
- customizing the python repl (intermediate)
- what is PATH? (beginner - intermediate)
- python packaging: data files (intermediate)
- a virtualenv from nothing! (beginner - intermediate)
- tox --devenv (beginner - intermediate)
- python packaging: optional dependencies (intermediate)
- regexes: capture groups (beginner - intermediate)
- python typing: why not self? (intermediate)
- generator basics (+typing) (beginner - intermediate)
- stop using
git add .
(beginner - intermediate) - why not global pip / virtualenv? (intermediate)
- bash hash cache! (beginner - intermediate)
- git: a checked-in directory (intermediate)
- typing: exception types (intermediate)
- why you should end a file in a newline (beginner)
- git workflow: branch name collisions (intermediate)
- sort your imports! (beginner - intermediate)
- what is the underscore (_) for? (beginner)
- python curses: color (intermediate)
- semantic versioning (beginner - intermediate)
- file modes and chmod (beginner - intermediate)
- making a regex not match itself! (intermediate)
- I run 'rm -rf /' and see what happens (beginner - intermediate)
- git fetch (--prune) (beginner - intermediate)
- top 10 new things in python3.9 (beginner - intermediate)
- testing functools.lru_cache with pytest! (beginner - intermediate)
- git: commit message pro tip (beginner - intermediate)
- typing: what is Type[X]? (intermediate)
- python debugger crash course: pdb / breakpoint (beginner - intermediate)
- why pytest.mark.usefixtures? (intermediate)
- git apply and manual stashing (intermediate)
- intro to python namedtuples! (beginner - intermediate)
- namedtuple to json and other pitfalls (intermediate)
- how namedtuple works (advanced)
- why python -m pip? (beginner - intermediate)
- fixing NameError / TypeError in python type annotations (intermediate)
- why backslash in triple-quoted-strings """\ (intermediate)
- what's (wrong with) hacktoberfest? (beginner)
- pure python windows .exe (no compiler!) (intermediate)
- python dist-packages vs. site-packages (intermediate)
- testing optional python dependencies (intermediate)
- typing: why main() -˃ int (beginner - intermediate)
- debugging with dir() (+__dir__) (beginner - intermediate)
- python: pretty headers with str.center (beginner)
- don't put passwords in commands! (beginner - intermediate)
- python: comma, = assignment! (beginner - intermediate)
- python typing: re.match and Optional (intermediate)
- python: .sort() vs sorted(...) (beginner - intermediate)
- python typing: @property (beginner - intermediate)
- python: 4 ways to set namedtuple defaults (intermediate)
- what is the /opt directory? (beginner - intermediate)
- git: visualizing main line commits (intermediate)
- bash: passing string as stdin (beginner - intermediate)
- python: what is __slots__ and __dict__ (intermediate)
- why __slots__ = () (namedtuples) (intermediate)
- how do editable pip installs work? (intermediate)
- what is argv (and argc)? (beginner - intermediate)
- is python with types faster? (intermediate)
- bash: multiple lines to stdin with heredocs (beginner - intermediate)
- a python plugin system via entrypoints (intermediate)
- git diff A...B (3 dots) (beginner - intermediate)
- faster than git clone! (beginner - intermediate)
- python: len(x) vs x.__len__() (beginner - intermediate)
- python typing: Final / @final (intermediate)
- python: raw (NOT REGEX) r'strings' (beginner - intermediate)
- a "hello world" python C extension (intermediate - advanced)
- making python releases less painful with abi3 (intermediate - advanced)
- useful interview datastructures: defaultdict (beginner - intermediate)
- reset a clone with git clean! (beginner - intermediate)
- with + context managers (part1: the hard way) (intermediate - advanced)
- with + context managers (part2: the easy way) (intermediate)
- how @contextmanager works (with/contexts part 3) (advanced)
- is python's round() broken? (beginner)
- useful interview datastructures: Counter (beginner - intermediate)
- easy fake objects with python's SimpleNamespace (beginner - intermediate)
- what is a git tag? (beginner - intermediate)
- python: typing *args / **kwargs (intermediate)
- python typing: Optional is not optional! (intermediate)
- mypy's "implicit optional" (and why I disable it) (intermediate)
- customize ANY website (beginner - intermediate)
- python: more advanced breakpoint() usage (intermediate)
- what is docker and how does it work? (intermediate)
- docker run: always use --rm! (beginner - intermediate)
- what is sass vs scss? (beginner)
- repeatedly checking command output (beginner - intermediate)
- why do asset urls have hex segments? (beginner - intermediate)
- python cffi tutorial (intermediate - advanced)
- python regex: \d gotcha! (beginner - intermediate)
- customizing "command not found" (intermediate)
- why
docker build --pull
? (intermediate) - useful commands:
pstree
(beginner - intermediate) - don't use os.system! (beginner - intermediate)
- python: all about comprehensions! (beginner - intermediate)
- python: os.exec* vs subprocess (intermediate)
- python typing: @overload (intermediate)
- structural subtyping in python with Protocol! (intermediate)
- what is virtualenvwrapper + quick start (beginner - intermediate)
- github tweak: custom tab width (beginner)
- what is advent of code? (beginner)
- what is atomicity (intermediate)
- python: what is
nonlocal
(intermediate) - python typing: Literal (intermediate)
- counting in binary / 2s complement (beginner - intermediate)
- oops I typed
git git ...
again (beginner - intermediate) - python: binary search the easy way (interview tips) (intermediate)
- pytest: parametrize permutation (intermediate)
- more powerful than control-C (beginner - intermediate)
- pytest: testing exceptions (beginner - intermediate)
- what is a pager / less ? (beginner - intermediate)
- python: naming and underscores (beginner - intermediate)
- what is the bang (!) in git aliases (beginner - intermediate)
- python typing: aliases (beginner - intermediate)
- argparse: making a command wrapper (parse_known_args) (intermediate)
- bash protip: fc "fix command" (beginner - intermediate)
- python integer literal underscores! (beginner)
- what is
git -C ...
(intermediate) - bash: pushd / popd (beginner - intermediate)
- what is
cd -
/git checkout -
(beginner) - typing: Protocol + @runtime_checkable (intermediate)
- what is a singleton? (and python patterns) (intermediate - advanced)
- python: conditional context and ExitStack (intermediate)
- python deque (useful interview datastructures) (intermediate)
- images in the terminal? what is a sixel (beginner - intermediate)
- useful tools: uq (beginner - intermediate)
- git: cleaning up merged branches (beginner - intermediate)
- python: decorating a class (intermediate)
- python: class-based @decorators (intermediate - advanced)
- intro to git lfs (intermediate)
- python scoping (beginner - intermediate)
- docker: deleting files makes your image bigger! (intermediate)
- getting started with packer (intermediate)
- all about xargs ! (beginner - intermediate)
- bash "strict mode": -euo pipefail (beginner - intermediate)
- 3 ways to clear / fix the terminal (beginner)
- python is compiled? (+ disassembler) (intermediate)
- what is a boolean trap? (programming antipattern) (beginner - intermediate)
- python: str.translate (intermediate)
- python easter eggs: __future__ braces (beginner)
- the
wc
command (beginner) - debugging python segfaults with gdb (intermediate - advanced)
- interview question: 4 / 7 swap (beginner - intermediate)
- github actions vulnerability or "why bug bounties are a scam" (intermediate)
- python easter eggs: antigravity (beginner)
- python insertion-ordered dicts (beginner - intermediate)
- python @decorator stacking (intermediate)
- typing: dealing with import cycles (beginner - intermediate)
- python easter eggs: easiest hello world! (beginner)
- what is dynamic programming? (beginner - intermediate)
- unix commands: fold (beginner)
- listing only directories with
ls
(beginner) - github tip: getting perma-links (beginner)
- finding python source code and docs (beginner)
- how I sped up python's tokenize module by 25% (intermediate)
- python: why is -c faster than -m? (intermediate)
- python: {...} is faster than dict(...) (intermediate)
- showing actual file bytes with hexdump (beginner - intermediate)
- python: how do any / all work? (beginner)
- python: why str('foo') (python 2 / 3 compat) (beginner - intermediate)
- bash: /bin/[ is an executable ? (intermediate)
- the
install
command (beginner - intermediate) - 3 ways to fix an accidental git commit to main (beginner - intermediate)
- don't use time.time() for performance measurement (beginner - intermediate)
- how to search a repo using
git grep
(beginner) - the 2 modes of python's str.split (beginner)
- python: what are *splat **args? (intermediate)
- why doesn't flake8 mark this import as unused? (beginner - intermediate)
- pathlib is slow? how I improved black's caching by 40x (intermediate)
- how to make a virtualenv from cpython source (intermediate)
- enable tab completion in pdb! (beginner)
- sed command basics (beginner - intermediate)
- what pythons should I support? (beginner - intermediate)
- python: what is assert? (beginner)
- python: shlex module (beginner - intermediate)
- python: what is hashability? (intermediate)
- python: why object() in this code? (intermediate)
- intro to terraform (intermediate)
- git rebase (and git rebase -i) (intermediate)
- testing output with pytest (beginner - intermediate)
- python: exception catching and isinstance gotcha (beginner - intermediate)
- one-off 3rd party mypy types (intermediate)
- PS1, coloring, and fixing weird wrapping (beginner - intermediate)
- python match statement (PEP 634) (intermediate - advanced)
- NotImplemented vs NotImplementedError (beginner - intermediate)
- packaging python typed code (intermediate)
- interview questions: anagrams (beginner - intermediate)
- python: functools.partial (beginner - intermediate)
- speed up git in big repos with this trick (beginner)
- correct
apt-get
for ubuntu / debian in docker (intermediate) - what is podman vs docker (beginner - intermediate)
- a file even root can't delete! (chattr) (intermediate)
- python: yield from (beginner - intermediate)
- pytest: xfail vs xpass and all test statuses (beginner - intermediate)
- python easter eggs: __peg_parser__ (beginner)
- what is the XDG base directory specification? (intermediate)
- move a virtualenv! (intermediate)
- atomic file replacement (os.rename vs os.replace) (intermediate)
- floats are broken? (+3 solutions in python!) (beginner - intermediate)
- how I find standard python type signatures (beginner - intermediate)
- python curses: mouse integration (intermediate)
- the
rlwrap
command (beginner - intermediate) - can cpython be 76% faster by changing hash()? (no) (intermediate)
- what is a .pth file? (intermediate)
- nesting context managers with classes (intermediate)
- a FREE stateful cron using aws (intermediate)
- what are git submodules? (intermediate)
- programmable nintendo switch controller (intermediate)
- python typing: object vs Any (intermediate)
- python typing: NotImplemented is a bool? (intermediate)
- the
find
command (beginner - intermediate) - use the clipboard from the terminal (beginner)
- pgrep / pkill commands (beginner - intermediate)
- SUPER FAST cpython with mypyc (intermediate)
- updating a forked repository (beginner - intermediate)
- docker takes so much disk! (beginner - intermediate)
- python: traceback basics + raise from (beginner - intermediate)
- git: check in executable file (+ on windows) (beginner - intermediate)
- line buffering vs. block buffering (intermediate)
- the
comm
command! (intermediate) - man pages for git subcommands (beginner - intermediate)
- flake8: avoiding F401 in __init__.py (beginner - intermediate)
- top 10 new things in python 3.10 (beginner - intermediate)
- what is a deadletter queue? (intermediate)
- atomically replace / delete directories (intermediate - advanced)
- ☃.com and punycode / idna (beginner - intermediate)
- how to get pip for deadsnakes / docker pythons (intermediate)
- @staticmethod / @classmethod (beginner + advanced)
- date.today() is twice as slow as datetime.now().date()??? (intermediate)
- simple python dockerfile w/ flask (intermediate)
- python typing: Generator[T, S, R] (intermediate)
- python: explicit relative imports (intermediate)