diff --git a/playlists.json b/playlists.json index eec71ce..c6d5671 100644 --- a/playlists.json +++ b/playlists.json @@ -1 +1 @@ -{"playlists":[{"playlist_name":"faq","playlist_id":"PLWBKAf81pmOZEPeIV2_pIESK5hRMAo1hR","videos":[{"title":"what is your operating system? why?","url":"https://youtu.be/8KdAqlESQJo"},{"title":"what is your text editor and why is it not vim?","url":"https://youtu.be/WyR1hAGmR3g"},{"title":"how did you get started with programming?","url":"https://youtu.be/zve534AvtrY"},{"title":"when was the first time you were paid to code?","url":"https://youtu.be/Ak8d67Anquo"},{"title":"custom stream deck keyboard (BDN9)","url":"https://youtu.be/p2TyRIAxR48"},{"title":"why you should mute to type passwords","url":"https://youtu.be/OS51yqa2YmA"},{"title":"split keyboard! (kinesis freestyle pro)","url":"https://youtu.be/DZgCUWf9DZM"},{"title":"automatic cat gifs on github approve?","url":"https://youtu.be/2rDNJvHznrM"},{"title":"why I don't use aliases","url":"https://youtu.be/bb-galRcCmo"},{"title":"Good code changed like a ghost!","url":"https://youtu.be/_916x0YkOtU"},{"title":"a 2 key keyboard! (xd002)","url":"https://youtu.be/rBngGyWCV-4"},{"title":"I've moved!","url":"https://youtu.be/hEfACNTD3CU"},{"title":"my 2021 streaming setup","url":"https://youtu.be/18z2v0ZnHG8"},{"title":"computer build as of 2021","url":"https://youtu.be/RaCKnqM2VZc"},{"title":"auto generated art!","url":"https://youtu.be/jVENYWPBrWE"},{"title":"how much do I make as a staff software engineer?","url":"https://youtu.be/tR3d5S5GEeo"},{"title":"I quit.","url":"https://youtu.be/QzZSvznoCEo"},{"title":"why I left stripe","url":"https://youtu.be/Hw_NhNrK8-4"},{"title":"remote software engineering -- my strategies for making it work!","url":"https://youtu.be/6W3aYMoR3W4"},{"title":"why did I start streaming?","url":"https://youtu.be/sgJ6REnnyqk"},{"title":"I let twitch chat change my editor theme -- it was a mistake","url":"https://youtu.be/Q4EjZJE6CNs"},{"title":"why do I have a separate github account for work?","url":"https://youtu.be/ylvOPF5qZ4E"},{"title":"my thoughts on ruff","url":"https://youtu.be/XzW4-KEB664"}]},{"playlist_name":"explains","playlist_id":"PLWBKAf81pmOaP9naRiNAqug6EBnkPakvY","videos":[{"title":"introducing anthony explains! -- #000","url":"https://youtu.be/qvkppppy9K8"},{"title":"python cli tested with pytest - (beginner to intermediate) #001","url":"https://youtu.be/sv46294LoP8"},{"title":"python @decorators - (intermediate) #002","url":"https://youtu.be/WDMr6WolKUM"},{"title":"my favorite python str method! (beginner - intermediate) #003","url":"https://youtu.be/kx6G3nkZTjM"},{"title":"how to make a simple github PR (beginner) #004","url":"https://youtu.be/cysuuUtbC6E"},{"title":"the python @property decorator (beginner - intermediate) #005","url":"https://youtu.be/orp6bhe4i00"},{"title":"python type(x).__name__ vs x.__class__.__name__ (intermediate) #006","url":"https://youtu.be/6rAIttnm3Fs"},{"title":"python return annotations: NoReturn vs None (intermediate) #007","url":"https://youtu.be/-zH0qqDtd4w"},{"title":"what's wrong with python's blank except:? (beginner - intermediate) #008","url":"https://youtu.be/i0GOLe-F27Q"},{"title":"how I use selenium + html/css to make thumbnails (intermediate) #009","url":"https://youtu.be/VABA2rX1I_M"},{"title":"python: raising Error without parens (intermediate) #010","url":"https://youtu.be/gGqRBHHIQGE"},{"title":"python's tricky `for ...: else:` statement (beginner - intermediate) #011","url":"https://youtu.be/8P7lXLXR_3c"},{"title":"python's `pass` statement (beginner - intermediate) #012","url":"https://youtu.be/ANjDsGZZXy8"},{"title":"shell bling strings! (beginner - intermediate) #013","url":"https://youtu.be/fhhznv4E1pI"},{"title":"setting up an ubuntu focal virtual machine (beginner - intermediate) #014","url":"https://youtu.be/qL3xc8hwU7c"},{"title":"python executable zipapps (intermediate) #015","url":"https://youtu.be/HfL2s2JySos"},{"title":"pretty python profiling (intermediate) #016","url":"https://youtu.be/ey_P64E34g0"},{"title":"python implicit string joining (beginner - intermediate) #017","url":"https://youtu.be/5Zto6VYsNsI"},{"title":"postmortem debugging in python (beginner - intermediate) #018","url":"https://youtu.be/s8Nx2frW4ps"},{"title":"configuration management (devops) (intermediate) #019","url":"https://youtu.be/aQTCDoZ4NFg"},{"title":"how to pronounce PyPI (beginner) #020","url":"https://youtu.be/I5OUzCAYst8"},{"title":"all python argument / parameter types (beginner - intermediate) #021","url":"https://youtu.be/aKCfCmSggPg"},{"title":"what is a tty? (beginner - intermediate) #022","url":"https://youtu.be/SYwbEcNrcjI"},{"title":"introduction to markdown (beginner) #023","url":"https://youtu.be/1UodxuXj5Ao"},{"title":"how do I get started in open source? (beginner) #024","url":"https://youtu.be/NFW22q-vI6I"},{"title":"a flake8 plugin from scratch (intermediate) #025","url":"https://youtu.be/ot5Z4KQPBL8"},{"title":"finding regressions with git bisect (intermediate) #026","url":"https://youtu.be/C2C7FTI8nB4"},{"title":"pytest's parametrize (beginner - intermediate) #027","url":"https://youtu.be/aQH7hyJn-No"},{"title":"python curses \"hello world\" (beginner - intermediate) #028","url":"https://youtu.be/2em6MiOpHWk"},{"title":"git: empty initial commit (beginner - intermediate) #029","url":"https://youtu.be/BJ4hkYdb1LI"},{"title":"dockerfile RUN : \\ && syntax (beginner) #030","url":"https://youtu.be/BdxdRlTnPEE"},{"title":"python variable unpackings (beginner - intermediate) #031","url":"https://youtu.be/ObWh1AYClI0"},{"title":"docker: ADD \u00aburl\u00bb considered harmful? (intermediate) #032","url":"https://youtu.be/DazBJeVRA7k"},{"title":"what is a shebang (#!)? (beginner - intermediate) #033","url":"https://youtu.be/g3VxRdtlMoE"},{"title":"what is test driven development? (beginner - intermediate) #034","url":"https://youtu.be/JmMxU8ljiOg"},{"title":"python single vs double quote strings! (beginner) #035","url":"https://youtu.be/TTo5LGXYsH0"},{"title":"git: ignoring noisy whitespace changes (beginner - intermediate) #036","url":"https://youtu.be/qYJWBJvHqj0"},{"title":"git: useful trick for pushing branches (beginner - intermediate) #037","url":"https://youtu.be/bItxrNqJ5UQ"},{"title":"python github actions w/ tox and pre-commit (intermediate) #038","url":"https://youtu.be/KKJL8bM4cis"},{"title":"releasing a python package to pypi (beginner - intermediate) #039","url":"https://youtu.be/Gre2W5z4iLE"},{"title":"virtualenv vs. venv (beginner - intermediate) #040","url":"https://youtu.be/MGTX5qI2Jts"},{"title":"implementing --version with importlib.metadata (intermediate) #041","url":"https://youtu.be/beDG6Ibo2zQ"},{"title":"string formatting in python (beginner - intermediate) #042","url":"https://youtu.be/dTrW8YktDnE"},{"title":"introduction to tox (beginner - intermediate) #043","url":"https://youtu.be/75WBE_qbpGk"},{"title":"python argparse tutorial (beginner - intermediate) #044","url":"https://youtu.be/-Sgw-6a1HjU"},{"title":"typing __getitem__ (python / mypy) (intermediate) #045","url":"https://youtu.be/HESA7oukEqE"},{"title":"fixing a git mistake with reflog (intermediate) #046","url":"https://youtu.be/R8R9_eT2law"},{"title":"introduction to python typing + mypy (beginner - intermediate) #047","url":"https://youtu.be/H5CnZQDKfhU"},{"title":"python packaging: src layout (intermediate) #048","url":"https://youtu.be/sW1qUZ_nSXk"},{"title":"three ways to edit git commits (intermediate) #049","url":"https://youtu.be/2LEn0GQJitM"},{"title":"stdin / stdout / stderr (beginner - intermediate) #050","url":"https://youtu.be/5za6eRdHjpw"},{"title":"hacker mode tmux debugging (intermediate) #051","url":"https://youtu.be/BMn0nSpeITY"},{"title":"regular expressions crash course (beginner - intermediate) #052","url":"https://youtu.be/yFRSpPwrJzQ"},{"title":"web security: what is a csrf exploit? (intermediate) #053","url":"https://youtu.be/MXZhe0KduyE"},{"title":"python: functools.lru_cache (beginner - intermediate) #54","url":"https://youtu.be/K0Q5twtYxWY"},{"title":"python __future__ \"module\" (beginner - intermediate) #055","url":"https://youtu.be/_K4mjPrROGQ"},{"title":"undoing an accidental git commit (intermediate) #056","url":"https://youtu.be/EcciszFDpn8"},{"title":"python packaging: basic setup.py and declarative metadata (intermediate) #057","url":"https://youtu.be/GaWs-LenLYE"},{"title":"what is deadsnakes? (beginner - intermediate) #058","url":"https://youtu.be/Xe40amojaXE"},{"title":"getting started with programming (beginner) #059","url":"https://youtu.be/khqIPspzh4A"},{"title":"git show (+ some tips!) (beginner) #060","url":"https://youtu.be/gFKgEbbQRyQ"},{"title":"python star imports (beginner - intermediate) #061","url":"https://youtu.be/gJJVXB5JLUk"},{"title":"intro to apt (debian / ubuntu) (beginner + intermediate) #062","url":"https://youtu.be/ctGpRWCi8QU"},{"title":"correct conditional arguments in bash (beginner - intermediate) #063","url":"https://youtu.be/hVTrmsqZC38"},{"title":"using the python __import__ builtin correctly (intermediate) #064","url":"https://youtu.be/3V3bv7FsR48"},{"title":"special paths: ~, ~user, ., .. (beginner) #065","url":"https://youtu.be/lyMQASRha9s"},{"title":"protip: exiting really fast! (beginner) #066","url":"https://youtu.be/yLdxwugv4qM"},{"title":"python: Ellipsis (...) and typing (beginner - intermediate) #067","url":"https://youtu.be/yLwvOwTO068"},{"title":"git cherry-pick (intermediate) #068","url":"https://youtu.be/hmMrtfyb1vc"},{"title":"customizing the python repl (intermediate) #069","url":"https://youtu.be/vwu6i0ghwJU"},{"title":"what is PATH? (beginner - intermediate) #070","url":"https://youtu.be/ZpOoRSkm-dQ"},{"title":"python packaging: data files (intermediate) #071","url":"https://youtu.be/bfyIrX4_yL8"},{"title":"a virtualenv from nothing! (beginner - intermediate) #072","url":"https://youtu.be/OXmYKh0eTQ8"},{"title":"tox --devenv (beginner - intermediate) #073","url":"https://youtu.be/flJi2N3dDk0"},{"title":"python packaging: optional dependencies (intermediate) #074","url":"https://youtu.be/yJyo-K7wW2g"},{"title":"regexes: capture groups (beginner - intermediate) #075","url":"https://youtu.be/Cs2V6nRhWL4"},{"title":"python typing: why not self? (intermediate) #076","url":"https://youtu.be/VumItqHMaTA"},{"title":"generator basics (+typing) (beginner - intermediate) #077","url":"https://youtu.be/LjBa9sfJh7U"},{"title":"stop using `git add .` (beginner - intermediate) #078","url":"https://youtu.be/GgIZbO2Hb5s"},{"title":"why not global pip / virtualenv? (intermediate) #079","url":"https://youtu.be/O390_abzo08"},{"title":"bash hash cache! (beginner - intermediate) #080","url":"https://youtu.be/N13XEwdc_2k"},{"title":"git: a checked-in directory (intermediate) #081","url":"https://youtu.be/_qCzcB80fAY"},{"title":"typing: exception types (intermediate) #082","url":"https://youtu.be/22BvsKjHRfQ"},{"title":"why you should end a file in a newline (beginner) #083","url":"https://youtu.be/r5nWtfwK_dk"},{"title":"git workflow: branch name collisions (intermediate) #084","url":"https://youtu.be/XHU3Kvudraw"},{"title":"sort your imports! (beginner - intermediate) #085","url":"https://youtu.be/Sjor8PZXnaw"},{"title":"what is the underscore (_) for? (beginner) #086","url":"https://youtu.be/VKz1aQbNnyI"},{"title":"python curses: color (intermediate) #087","url":"https://youtu.be/M8gC65VgApM"},{"title":"semantic versioning (beginner - intermediate) #088","url":"https://youtu.be/vRSw2f34RRU"},{"title":"file modes and chmod (beginner - intermediate) #089","url":"https://youtu.be/BrBHUosstHg"},{"title":"making a regex not match itself! (intermediate) #090","url":"https://youtu.be/4KLLctC0G6U"},{"title":"I run 'rm -rf /' and see what happens (beginner - intermediate) #091","url":"https://youtu.be/iqqNMZj608s"},{"title":"git fetch (--prune) (beginner - intermediate) #092","url":"https://youtu.be/oj19T3N2NHY"},{"title":"top 10 new things in python3.9 (beginner - intermediate) #093","url":"https://youtu.be/Dtw0QJhepV0"},{"title":"testing functools.lru_cache with pytest! (beginner - intermediate) #094","url":"https://youtu.be/ujRo8n0LsU4"},{"title":"git: commit message pro tip (beginner - intermediate) #095","url":"https://youtu.be/CWrBZeC2Qqs"},{"title":"typing: what is Type[X]? (intermediate) #096","url":"https://youtu.be/_7EXU9cjBkg"},{"title":"python debugger crash course: pdb / breakpoint (beginner - intermediate) #097","url":"https://youtu.be/0LPuG825eAk"},{"title":"why pytest.mark.usefixtures? (intermediate) #098","url":"https://youtu.be/BE2v1VCmGwg"},{"title":"git apply and manual stashing (intermediate) #099","url":"https://youtu.be/4LXTaikZfco"},{"title":"intro to python namedtuples! (beginner - intermediate) #100","url":"https://youtu.be/iqXnBE4htUc"},{"title":"namedtuple to json and other pitfalls (intermediate) #101","url":"https://youtu.be/QOKqvuvA3ok"},{"title":"how namedtuple works (advanced) #102","url":"https://youtu.be/sfDSQSj-uvQ"},{"title":"why python -m pip? (beginner - intermediate) #103","url":"https://youtu.be/gnYdk_U6UQ0"},{"title":"fixing NameError / TypeError in python type annotations (intermediate) #104","url":"https://youtu.be/zH_F2xC0LOk"},{"title":"why backslash in triple-quoted-strings \"\"\"\\ (intermediate) #105","url":"https://youtu.be/WFggulJ81dM"},{"title":"what's (wrong with) hacktoberfest? (beginner) #106","url":"https://youtu.be/dzRTR63Lzx8"},{"title":"pure python windows .exe (no compiler!) (intermediate) #107","url":"https://youtu.be/nzaH5n-Xk64"},{"title":"python dist-packages vs. site-packages (intermediate) #108","url":"https://youtu.be/aEB_EcgTiQo"},{"title":"testing optional python dependencies (intermediate) #109","url":"https://youtu.be/PXu3KCMT3l4"},{"title":"typing: why main() -\u02c3 int (beginner - intermediate) #110","url":"https://youtu.be/Kur4Y7j4vac"},{"title":"debugging with dir() (+__dir__) (beginner - intermediate) #111","url":"https://youtu.be/LxCdn18eGng"},{"title":"python: pretty headers with str.center (beginner) #112","url":"https://youtu.be/88-rhi4CSsg"},{"title":"don't put passwords in commands! (beginner - intermediate) #113","url":"https://youtu.be/SqXOchNKV_c"},{"title":"python: comma, = assignment! (beginner - intermediate) #114","url":"https://youtu.be/WLKi_gPKCp0"},{"title":"python typing: re.match and Optional (intermediate) #115","url":"https://youtu.be/yH6L3UiK9WM"},{"title":"python: .sort() vs sorted(...) (beginner - intermediate) #116","url":"https://youtu.be/JZYWtmxaCeM"},{"title":"python typing: @property (beginner - intermediate) #117","url":"https://youtu.be/Q0K8CKn5htI"},{"title":"python: 4 ways to set namedtuple defaults (intermediate) #118","url":"https://youtu.be/w4o-GT_43Yw"},{"title":"what is the /opt directory? (beginner - intermediate) #119","url":"https://youtu.be/tzOImbBp17c"},{"title":"git: visualizing main line commits (intermediate) #120","url":"https://youtu.be/UjCnvh6uAUs"},{"title":"bash: passing string as stdin (beginner - intermediate) #121","url":"https://youtu.be/Xf_82stIbB8"},{"title":"python: what is __slots__ and __dict__ (intermediate) #122","url":"https://youtu.be/2d3vZhF-2aA"},{"title":"why __slots__ = () (namedtuples) (intermediate) #123","url":"https://youtu.be/BSNd_kxHXL8"},{"title":"how do editable pip installs work? (intermediate) #124","url":"https://youtu.be/gYYi7varbmE"},{"title":"what is argv (and argc)? (beginner - intermediate) #125","url":"https://youtu.be/guJj17ggtXU"},{"title":"is python with types faster? (intermediate) #126","url":"https://youtu.be/mkT3KP2J15I"},{"title":"bash: multiple lines to stdin with heredocs (beginner - intermediate) #127","url":"https://youtu.be/KeO-OGf8Tao"},{"title":"a python plugin system via entrypoints (intermediate) #128","url":"https://youtu.be/fY3Y_xPKWNA"},{"title":"git diff A...B (3 dots) (beginner - intermediate) #129","url":"https://youtu.be/WRXmm-E77aY"},{"title":"faster than git clone! (beginner - intermediate) #130","url":"https://youtu.be/YtK1uOa2VpM"},{"title":"python: len(x) vs x.__len__() (beginner - intermediate) #131","url":"https://youtu.be/KyqiduLIL5k"},{"title":"python typing: Final / @final (intermediate) #132","url":"https://youtu.be/jCf3zi2m56c"},{"title":"python: raw (NOT REGEX) r'strings' (beginner - intermediate) #133","url":"https://youtu.be/RvoKwGekk1s"},{"title":"a \"hello world\" python C extension (intermediate - advanced) #134","url":"https://youtu.be/HrEzCI3jIHw"},{"title":"making python releases less painful with abi3 (intermediate - advanced) #135","url":"https://youtu.be/4uy0c855msk"},{"title":"useful interview datastructures: defaultdict (beginner - intermediate) #136","url":"https://youtu.be/sunYwbKAzI0"},{"title":"reset a clone with git clean! (beginner - intermediate) #137","url":"https://youtu.be/cE9IRYDMoS8"},{"title":"with + context managers (part1: the hard way) (intermediate - advanced) #138","url":"https://youtu.be/ExdtNMnP24I"},{"title":"with + context managers (part2: the easy way) (intermediate) #139","url":"https://youtu.be/ucGpcA9r4hU"},{"title":"how @contextmanager works (with/contexts part 3) (advanced) #140","url":"https://youtu.be/nr_q2y0qxFg"},{"title":"is python's round() broken? (beginner) #141","url":"https://youtu.be/sIObDTFsKyI"},{"title":"useful interview datastructures: Counter (beginner - intermediate) #142","url":"https://youtu.be/FzlJxKRPL-4"},{"title":"easy fake objects with python's SimpleNamespace (beginner - intermediate) #143","url":"https://youtu.be/8XvyHj8ndg8"},{"title":"what is a git tag? (beginner - intermediate) #144","url":"https://youtu.be/34CQxHXzD4w"},{"title":"python: typing *args / **kwargs (intermediate) #145","url":"https://youtu.be/CqafM-bsnW0"},{"title":"python typing: Optional is not optional! (intermediate) #146","url":"https://youtu.be/7XZYlDpSxOU"},{"title":"mypy's \"implicit optional\" (and why I disable it) (intermediate) #147","url":"https://youtu.be/sc1JfhSvSII"},{"title":"customize ANY website (beginner - intermediate) #148","url":"https://youtu.be/Cmz6YGzF0PM"},{"title":"python: more advanced breakpoint() usage (intermediate) #149","url":"https://youtu.be/7TuFty4_WTY"},{"title":"what is docker and how does it work? (intermediate) #150","url":"https://youtu.be/tWvQAxkMaWs"},{"title":"docker run: always use --rm! (beginner - intermediate) #151","url":"https://youtu.be/0vxIyXgkihA"},{"title":"what is sass vs scss? (beginner) #152","url":"https://youtu.be/EPpjU50TYHg"},{"title":"repeatedly checking command output (beginner - intermediate) #153","url":"https://youtu.be/DUxS7zOhu1U"},{"title":"why do asset urls have hex segments? (beginner - intermediate) #154","url":"https://youtu.be/h345YuE3lZ8"},{"title":"python cffi tutorial (intermediate - advanced) #155","url":"https://youtu.be/X5irxO5VCHw"},{"title":"python regex: \\d gotcha! (beginner - intermediate) #156","url":"https://youtu.be/9dnZiCW1OHc"},{"title":"customizing \"command not found\" (intermediate) #157","url":"https://youtu.be/p4cpVggLuJk"},{"title":"why `docker build --pull`? (intermediate) #158","url":"https://youtu.be/BP1v7XXlePM"},{"title":"useful commands: `pstree` (beginner - intermediate) #159","url":"https://youtu.be/Omu4tXtlULU"},{"title":"don't use os.system! (beginner - intermediate) #160","url":"https://youtu.be/oQxTSDh-ECk"},{"title":"python: all about comprehensions! (beginner - intermediate) #161","url":"https://youtu.be/f-Q5VZlPjhI"},{"title":"python: os.exec* vs subprocess (intermediate) #162","url":"https://youtu.be/xTiPODNalrU"},{"title":"python typing: @overload (intermediate) #163","url":"https://youtu.be/rY9NZ-tXiDQ"},{"title":"structural subtyping in python with Protocol! (intermediate) #164","url":"https://youtu.be/QjFChmQHJxk"},{"title":"what is virtualenvwrapper + quick start (beginner - intermediate) #165","url":"https://youtu.be/vnXUBoOqGWQ"},{"title":"github tweak: custom tab width (beginner) #166","url":"https://youtu.be/GYPRBVmw1Pc"},{"title":"what is advent of code? (beginner) #167","url":"https://youtu.be/QAwQ8eKBpYw"},{"title":"what is atomicity (intermediate) #168","url":"https://youtu.be/tmlmCG5egI0"},{"title":"python: what is `nonlocal` (intermediate) #169","url":"https://youtu.be/evYOlT1T7Mo"},{"title":"python typing: Literal (intermediate) #170","url":"https://youtu.be/ZHisrvgF1Wk"},{"title":"counting in binary / 2s complement (beginner - intermediate) #171","url":"https://youtu.be/G1teq9UZ4kM"},{"title":"oops I typed `git git ...` again (beginner - intermediate) #172","url":"https://youtu.be/BkUW2NgfZao"},{"title":"python: binary search the easy way (interview tips) (intermediate) #173","url":"https://youtu.be/icoYNPoTZ44"},{"title":"pytest: parametrize permutation (intermediate) #174","url":"https://youtu.be/QIUrd327tOQ"},{"title":"more powerful than control-C (beginner - intermediate) #175","url":"https://youtu.be/_f8xgOMGO-g"},{"title":"pytest: testing exceptions (beginner - intermediate) #176","url":"https://youtu.be/6nRxZyQwwlE"},{"title":"what is a pager / less ? (beginner - intermediate) #177","url":"https://youtu.be/hxvAEr9Q2A4"},{"title":"python: naming and underscores (beginner - intermediate) #178","url":"https://youtu.be/q1E-d7PvSSY"},{"title":"what is the bang (!) in git aliases (beginner - intermediate) #179","url":"https://youtu.be/-Ur2OGPCZhk"},{"title":"python typing: aliases (beginner - intermediate) #180","url":"https://youtu.be/4zcrkP2VPSs"},{"title":"argparse: making a command wrapper (parse_known_args) (intermediate) #181","url":"https://youtu.be/sCbC8hkg_xs"},{"title":"bash protip: fc \"fix command\" (beginner - intermediate) #182","url":"https://youtu.be/PPovOOA7bdU"},{"title":"python integer literal underscores! (beginner) #183","url":"https://youtu.be/BkKVVRLHE5Y"},{"title":"what is `git -C ...` (intermediate) #184","url":"https://youtu.be/YXDn2qtK8GI"},{"title":"bash: pushd / popd (beginner - intermediate) #185","url":"https://youtu.be/_cYaToOFml8"},{"title":"what is `cd -` / `git checkout -` (beginner) #186","url":"https://youtu.be/sb1itVtABEk"},{"title":"typing: Protocol + @runtime_checkable (intermediate) #187","url":"https://youtu.be/4y94mvp_rYw"},{"title":"what is a singleton? (and python patterns) (intermediate - advanced) #188","url":"https://youtu.be/PBCsN29ZG9A"},{"title":"python: conditional context and ExitStack (intermediate) #189","url":"https://youtu.be/FHixla7BLvI"},{"title":"python deque (useful interview datastructures) (intermediate) #190","url":"https://youtu.be/obXt90bzgJo"},{"title":"images in the terminal? what is a sixel (beginner - intermediate) #191","url":"https://youtu.be/fa9ik_OnLmg"},{"title":"useful tools: uq (beginner - intermediate) #192","url":"https://youtu.be/K8jmAQnPE2c"},{"title":"git: cleaning up merged branches (beginner - intermediate) #193","url":"https://youtu.be/5O8PzE4nJTQ"},{"title":"python: decorating a class (intermediate) #194","url":"https://youtu.be/xwsgV3yAtmw"},{"title":"python: class-based @decorators (intermediate - advanced) #195","url":"https://youtu.be/hTLDC9H1b4Q"},{"title":"intro to git lfs (intermediate) #196","url":"https://youtu.be/c6BRKcO5WxE"},{"title":"python scoping (beginner - intermediate) #197","url":"https://youtu.be/xb_zV3gaDxY"},{"title":"docker: deleting files makes your image bigger! (intermediate) #198","url":"https://youtu.be/4kBfXrE0xpo"},{"title":"getting started with packer (intermediate) #199","url":"https://youtu.be/VvjYePm2UyU"},{"title":"all about xargs ! (beginner - intermediate) #200","url":"https://youtu.be/ED9AUfFrak8"},{"title":"bash \"strict mode\": -euo pipefail (beginner - intermediate) #201","url":"https://youtu.be/9fSkygQ-ZjI"},{"title":"3 ways to clear / fix the terminal (beginner) #202","url":"https://youtu.be/LSEnVCBnKN4"},{"title":"python is compiled? (+ disassembler) (intermediate) #203","url":"https://youtu.be/FPJdre3mbD4"},{"title":"what is a boolean trap? (programming antipattern) (beginner - intermediate) #204","url":"https://youtu.be/CnRkXO_a5mI"},{"title":"python: str.translate (intermediate) #205","url":"https://youtu.be/0kYctEx_O28"},{"title":"python easter eggs: __future__ braces (beginner) #206","url":"https://youtu.be/x7xVjGbObrw"},{"title":"the `wc` command (beginner) #207","url":"https://youtu.be/YmjeLv1RLSc"},{"title":"debugging python segfaults with gdb (intermediate - advanced) #208","url":"https://youtu.be/bXEXE6ywzSA"},{"title":"interview question: 4 / 7 swap (beginner - intermediate) #209","url":"https://youtu.be/PSXlOSJ2lZk"},{"title":"github actions vulnerability or \"why bug bounties are a scam\" (intermediate) #210","url":"https://youtu.be/_fpXyS_i1xE"},{"title":"python easter eggs: antigravity (beginner) #211","url":"https://youtu.be/T7TvWTjp_fw"},{"title":"python insertion-ordered dicts (beginner - intermediate) #212","url":"https://youtu.be/thOgrFA7MzI"},{"title":"python @decorator stacking (intermediate) #213","url":"https://youtu.be/A10RHUCVw6A"},{"title":"typing: dealing with import cycles (beginner - intermediate) #214","url":"https://youtu.be/B5cjckVzY4g"},{"title":"python easter eggs: easiest hello world! (beginner) #215","url":"https://youtu.be/ViNc-g60br8"},{"title":"what is dynamic programming? (beginner - intermediate) #216","url":"https://youtu.be/4tc5MUBjw-g"},{"title":"unix commands: fold (beginner) #217","url":"https://youtu.be/BVuW-kiY_X8"},{"title":"listing only directories with `ls` (beginner) #218","url":"https://youtu.be/rNANZNxEUAo"},{"title":"github tip: getting perma-links (beginner) #219","url":"https://youtu.be/5IDpsBccqLk"},{"title":"finding python source code and docs (beginner) #220","url":"https://youtu.be/DUG77pRVsV8"},{"title":"how I sped up python's tokenize module by 25% (intermediate) #221","url":"https://youtu.be/fYbeK47C5b8"},{"title":"python: why is -c faster than -m? (intermediate) #222","url":"https://youtu.be/YuIZkHawihw"},{"title":"python: {...} is faster than dict(...) (intermediate) #223","url":"https://youtu.be/-v4DmRsL7nc"},{"title":"showing actual file bytes with hexdump (beginner - intermediate) #224","url":"https://youtu.be/FNyo1CSxBrg"},{"title":"python: how do any / all work? (beginner) #225","url":"https://youtu.be/NO8frFR7ZxU"},{"title":"python: why str('foo') (python 2 / 3 compat) (beginner - intermediate) #226","url":"https://youtu.be/qNW-ITqdpfM"},{"title":"bash: /bin/[ is an executable ? (intermediate) #227","url":"https://youtu.be/8kFmJGXa1qk"},{"title":"the `install` command (beginner - intermediate) #228","url":"https://youtu.be/Xk5XRy4OxOM"},{"title":"3 ways to fix an accidental git commit to main (beginner - intermediate) #229","url":"https://youtu.be/4C2lSosT7hc"},{"title":"don't use time.time() for performance measurement (beginner - intermediate) #230","url":"https://youtu.be/hb-12mgQrzM"},{"title":"how to search a repo using `git grep` (beginner) #231","url":"https://youtu.be/2MCtRv1ZIFQ"},{"title":"the 2 modes of python's str.split (beginner) #232","url":"https://youtu.be/6pIPMHP2Lwg"},{"title":"python: what are *splat **args? (intermediate) #233","url":"https://youtu.be/VhDMj5ffGSc"},{"title":"why doesn't flake8 mark this import as unused? (beginner - intermediate) #234","url":"https://youtu.be/gRq3Sb0_dJM"},{"title":"pathlib is slow? how I improved black's caching by 40x (intermediate) #235","url":"https://youtu.be/tFrh9hKMS6Y"},{"title":"how to make a virtualenv from cpython source (intermediate) #236","url":"https://youtu.be/2ETZsYF5c7s"},{"title":"enable tab completion in pdb! (beginner) #237","url":"https://youtu.be/S-Gj0q0O9_E"},{"title":"sed command basics (beginner - intermediate) #238","url":"https://youtu.be/fdRL8xME7bQ"},{"title":"what pythons should I support? (beginner - intermediate) #239","url":"https://youtu.be/w8W6IaaXCBQ"},{"title":"python: what is assert? (beginner) #240","url":"https://youtu.be/v1MtwCPTmBI"},{"title":"python: shlex module (beginner - intermediate) #241","url":"https://youtu.be/fdTHXq6AQ7E"},{"title":"python: what is hashability? (intermediate) #242","url":"https://youtu.be/fQtNXBJp8Q4"},{"title":"python: why object() in this code? (intermediate) #243","url":"https://youtu.be/1n6kWtLrOV4"},{"title":"intro to terraform (intermediate) #244","url":"https://youtu.be/xskzEkoisNE"},{"title":"git rebase (and git rebase -i) (intermediate) #245","url":"https://youtu.be/hv8dhOEzQcM"},{"title":"testing output with pytest (beginner - intermediate) #246","url":"https://youtu.be/dN-pVt7i4Us"},{"title":"python: exception catching and isinstance gotcha (beginner - intermediate) #247","url":"https://youtu.be/dS8rdjZrCaA"},{"title":"one-off 3rd party mypy types (intermediate) #248","url":"https://youtu.be/mKmmZHMwXAY"},{"title":"PS1, coloring, and fixing weird wrapping (beginner - intermediate) #249","url":"https://youtu.be/ngLwml9XI-I"},{"title":"python match statement (PEP 634) (intermediate - advanced) #250","url":"https://youtu.be/Bk-Gn7J6sz4"},{"title":"NotImplemented vs NotImplementedError (beginner - intermediate) #251","url":"https://youtu.be/GSBqmYUnBdk"},{"title":"packaging python typed code (intermediate) #252","url":"https://youtu.be/n4GJ8rp6DpE"},{"title":"interview questions: anagrams (beginner - intermediate) #253","url":"https://youtu.be/aEPW3x_FVes"},{"title":"python: functools.partial (beginner - intermediate) #254","url":"https://youtu.be/kZlOy1BY6lY"},{"title":"speed up git in big repos with this trick (beginner) #255","url":"https://youtu.be/ppILYNc10DQ"},{"title":"correct `apt-get` for ubuntu / debian in docker (intermediate) #256","url":"https://youtu.be/ZAoK8O9oBGo"},{"title":"what is podman vs docker (beginner - intermediate) #257","url":"https://youtu.be/lkg5QJsoCCQ"},{"title":"a file even root can't delete! (chattr) (intermediate) #258","url":"https://youtu.be/eXUCrIhTsM0"},{"title":"python: yield from (beginner - intermediate) #259","url":"https://youtu.be/36nDT1ryA5o"},{"title":"pytest: xfail vs xpass and all test statuses (beginner - intermediate) #260","url":"https://youtu.be/uzodcMcHbJU"},{"title":"python easter eggs: __peg_parser__ (beginner) #261","url":"https://youtu.be/p985PaTjqlc"},{"title":"what is the XDG base directory specification? (intermediate) #262","url":"https://youtu.be/wT85Ynk-0MY"},{"title":"move a virtualenv! (intermediate) #263","url":"https://youtu.be/iZlgLrWed1I"},{"title":"atomic file replacement (os.rename vs os.replace) (intermediate) #264","url":"https://youtu.be/-9eXCb3yvyY"},{"title":"floats are broken? (+3 solutions in python!) (beginner - intermediate) #265","url":"https://youtu.be/9-Cpi3hGjrY"},{"title":"how I find standard python type signatures (beginner - intermediate) #266","url":"https://youtu.be/FP3VV6do6Cc"},{"title":"python curses: mouse integration (intermediate) #267","url":"https://youtu.be/OQ20a6CIamM"},{"title":"the `rlwrap` command (beginner - intermediate) #268","url":"https://youtu.be/WizvitXOsLk"},{"title":"can cpython be 76% faster by changing hash()? (no) (intermediate) #269","url":"https://youtu.be/_8FHjmv8ix0"},{"title":"what is a .pth file? (intermediate) #270","url":"https://youtu.be/mzxQrgvuRFg"},{"title":"nesting context managers with classes (intermediate) #271","url":"https://youtu.be/kJIyBpR9bQM"},{"title":"a FREE stateful cron using aws (intermediate) #272","url":"https://youtu.be/Lauwn5wNZzo"},{"title":"what are git submodules? (intermediate) #273","url":"https://youtu.be/RFcc-BQjCsE"},{"title":"programmable nintendo switch controller (intermediate) #274","url":"https://youtu.be/chvgQUX7QaI"},{"title":"python typing: object vs Any (intermediate) #275","url":"https://youtu.be/ATS9MAo2Mjc"},{"title":"python typing: NotImplemented is a bool? (intermediate) #276","url":"https://youtu.be/5XBs_fM3Nac"},{"title":"the `find` command (beginner - intermediate) #277","url":"https://youtu.be/y6NQTZgPNPw"},{"title":"use the clipboard from the terminal (beginner) #278","url":"https://youtu.be/-ebWr_C29_c"},{"title":"pgrep / pkill commands (beginner - intermediate) #279","url":"https://youtu.be/KdSKTEUPPEk"},{"title":"SUPER FAST cpython with mypyc (intermediate) #280","url":"https://youtu.be/0Cjg3qvHBEY"},{"title":"updating a forked repository (beginner - intermediate) #281","url":"https://youtu.be/MSYqb9EWjto"},{"title":"docker takes so much disk! (beginner - intermediate) #282","url":"https://youtu.be/TSjZrubRfXo"},{"title":"python: traceback basics + raise from (beginner - intermediate) #283","url":"https://youtu.be/wc6W-RaMJ7k"},{"title":"git: check in executable file (+ on windows) (beginner - intermediate) #284","url":"https://youtu.be/Ud6t-mIyhsw"},{"title":"line buffering vs. block buffering (intermediate) #285","url":"https://youtu.be/gdU1QiKKSbE"},{"title":"the `comm` command! (intermediate) #286","url":"https://youtu.be/Ic-8swynoHU"},{"title":"man pages for git subcommands (beginner - intermediate) #287","url":"https://youtu.be/1CYAFPTn_oo"},{"title":"flake8: avoiding F401 in __init__.py (beginner - intermediate) #288","url":"https://youtu.be/OAqvLDRZqFc"},{"title":"top 10 new things in python 3.10 (beginner - intermediate) #289","url":"https://youtu.be/jUwPmbHnlt0"},{"title":"what is a deadletter queue? (intermediate) #290","url":"https://youtu.be/XNXbjWNsKAE"},{"title":"atomically replace / delete directories (intermediate - advanced) #291","url":"https://youtu.be/qEcYqI5NDko"},{"title":"\u2603.com and punycode / idna (beginner - intermediate) #292","url":"https://youtu.be/MMkOWqJkxeo"},{"title":"how to get pip for deadsnakes / docker pythons (intermediate) #293","url":"https://youtu.be/2Hg5-Hrsa6w"},{"title":"@staticmethod / @classmethod (beginner + advanced) #294","url":"https://youtu.be/yhkpRz7TC7o"},{"title":"date.today() is twice as slow as datetime.now().date()??? (intermediate) #295","url":"https://youtu.be/PBg6EorsX7s"},{"title":"simple python dockerfile w/ flask (intermediate) #296","url":"https://youtu.be/8V4UowjLIMc"},{"title":"python typing: Generator[T, S, R] (intermediate) #297","url":"https://youtu.be/DTegfCNAXoM"},{"title":"python: explicit relative imports (intermediate) #298","url":"https://youtu.be/uwtupH7LJco"},{"title":"debugging mypy types (beginner - intermediate) #299","url":"https://youtu.be/Pc6H3Pofhp8"},{"title":"what are python doctests? (beginner - intermediate) #300","url":"https://youtu.be/37TJeMLyi5I"},{"title":"terminal keyboard shortcut for unicode! (beginner) #301","url":"https://youtu.be/36G70-MMhGI"},{"title":"bash: strings with `!` / !... event not found (beginner - intermediate) #302","url":"https://youtu.be/VkRjT3UBiLk"},{"title":"default zoom key shortcut (beginner) #303","url":"https://youtu.be/rn_iru8zKqs"},{"title":"smaller / faster builds with dockerignore (beginner - intermediate) #304","url":"https://youtu.be/dEZ5WVWLris"},{"title":"python: why reload() is a bad idea (beginner - intermediate) #305","url":"https://youtu.be/oOs2JQu8KEw"},{"title":"what is the py launcher? (intermediate) #306","url":"https://youtu.be/OGcVB5Lnxuc"},{"title":"the `uniq` command (+ some `sort`) (beginner - intermediate) #307","url":"https://youtu.be/FMdWB3m3lQ0"},{"title":"gradual typing python (and my approach) (beginner - intermediate) #308","url":"https://youtu.be/Rk-Y71P_9KE"},{"title":"importing non-module python files (intermediate) #309","url":"https://youtu.be/B5bToFdBxdw"},{"title":"the `cut` command (beginner - intermediate) #310","url":"https://youtu.be/l9T85dA6HDY"},{"title":"bash: special redirection (intermediate) #311","url":"https://youtu.be/3f8xjDr789Q"},{"title":"python typing: TYPE_CHECKING (intermediate) #312","url":"https://youtu.be/BPE4p8HNLFM"},{"title":"`else` is good, actually (beginner - intermediate) #313","url":"https://youtu.be/rClGwTEOK7M"},{"title":"Fussy Fox + flake8 vulnerability (intermediate) #314","url":"https://youtu.be/J7NMyb-LNX4"},{"title":"setting up required github PR checks (beginner - intermediate) #315","url":"https://youtu.be/LGY1jPUso5I"},{"title":"python has an optimizer? (intermediate) #316","url":"https://youtu.be/i8uNgEchr20"},{"title":"pytest: testing env variables (intermediate) #317","url":"https://youtu.be/N15X_pQHckQ"},{"title":"python easter eggs: this (beginner) #318","url":"https://youtu.be/mRYWLKcMfE4"},{"title":"git: main vs. origin/main (beginner - intermediate) #319","url":"https://youtu.be/f-92I_gxgjA"},{"title":"python warnings (beginner - intermediate) #320","url":"https://youtu.be/tZSEZ2WG5w8"},{"title":"docker beside docker (intermediate - advanced) #321","url":"https://youtu.be/pDysRzgLpgM"},{"title":"what is manylinux? (intermediate - advanced) #322","url":"https://youtu.be/80j-MRtHMek"},{"title":"pip install from git (beginner - intermediate) #323","url":"https://youtu.be/AQrskWh-F5E"},{"title":"python tempfile module (beginner - intermediate) #324","url":"https://youtu.be/-pmgCmWiOXo"},{"title":"virtualenv: --system-site-packages (intermediate) #325","url":"https://youtu.be/R6ObMPdixj0"},{"title":"python: what is repr? (beginner - intermediate) #326","url":"https://youtu.be/ei1q7m3zLfU"},{"title":"making an omni-executable (intermediate) #327","url":"https://youtu.be/r41t-t27V9c"},{"title":"assign vs. shallow vs. deep copy (beginner - intermediate) #328","url":"https://youtu.be/5Ufr51uPHEs"},{"title":"what is `source` and why? (beginner - intermediate) #329","url":"https://youtu.be/YE6ZDpRcdQU"},{"title":"mypy! this key exists I promise! (beginner - intermediate) #330","url":"https://youtu.be/HE0At4RrZIE"},{"title":"python: raise SystemExit (beginner - intermediate) #331","url":"https://youtu.be/ZbeSPc5wL0g"},{"title":"python easter eggs: barry_as_FLUFL (beginner - intermediate) #332","url":"https://youtu.be/0vRwC-F7FF0"},{"title":"don't name things \"..._new\" (beginner) #333","url":"https://youtu.be/d-ZkEg_fa8Q"},{"title":"what is \"idempotent\" in programming (beginner) #334","url":"https://youtu.be/o9THkT5ZPi4"},{"title":"interview tips: what language should I use? (beginner) #335","url":"https://youtu.be/BzhNtQMGu9E"},{"title":"porting code to python **ZERO** (intermediate - advanced) #336","url":"https://youtu.be/6vdg91-hPGY"},{"title":"interview tips: \"your story\" (beginner) #337","url":"https://youtu.be/YBYzpQOA9lg"},{"title":"a python extension in go (advanced) #338","url":"https://youtu.be/kCRU_ZTcxac"},{"title":"debugging a failed docker build (intermediate) #339","url":"https://youtu.be/hd1AKYGiWNk"},{"title":"the most important skill I've learned for software engineering (beginner) #340","url":"https://youtu.be/ritp4gAqNMI"},{"title":"\"graceful exit\" SIGTERM doesn't run finally / destructors ? (intermediate) #341","url":"https://youtu.be/VVS1xVjhj34"},{"title":"--argument prefix matching (beginner - intermediate) #342","url":"https://youtu.be/jrs0l3HJ-Ow"},{"title":"why does id(float(1)) == id(float(2)) ??? (intermediate) #343","url":"https://youtu.be/jjm10-Ug1aE"},{"title":"python: what is `__main__` / `__main__.py` ? (beginner - intermediate) #344","url":"https://youtu.be/FRxDmVVm0d0"},{"title":"range(len(...)) is almost always wrong in python (beginner) #345","url":"https://youtu.be/SwjBJhJiHvQ"},{"title":"what is umask? (intermediate) #346","url":"https://youtu.be/ZfDbUxH99n0"},{"title":"opinion: don't bother typing tests (intermediate) #347","url":"https://youtu.be/lGCU0j-otls"},{"title":"multiprocessing: slow things first! (intermediate) #348","url":"https://youtu.be/h4vmU2DJoQg"},{"title":"bash shortcut: curly expansion (intermediate) #349","url":"https://youtu.be/r2G0rbm7XJk"},{"title":"make your own timeout with alarm(...) (intermediate) #350","url":"https://youtu.be/vGWSdp9dyhI"},{"title":"pretty recursive diffs! (beginner - intermediate) #351","url":"https://youtu.be/vEUFrmrS7Hc"},{"title":"github wikis are repos! (beginner - intermediate) #352","url":"https://youtu.be/U18COUDlzu8"},{"title":"python: easy comparable classes with functools.total_ordering (intermediate) #353","url":"https://youtu.be/po7iMzrgJwA"},{"title":"git without `cd` (intermediate) #354","url":"https://youtu.be/fQ3-Y99Fzro"},{"title":"why remove the python GIL? (intermediate - advanced) #355","url":"https://youtu.be/6g79qGQo2-Q"},{"title":"python: unicode names and why they're bad (intermediate) #356","url":"https://youtu.be/OaEgGW19M5o"},{"title":"makefile basics (beginner - intermediate) #357","url":"https://youtu.be/20GC9mYoFGs"},{"title":"how to ace the coding interview (intermediate) #358","url":"https://youtu.be/eVNkO6g0fP8"},{"title":"python try except and best practices (beginner - intermediate) #359","url":"https://youtu.be/tIh42X0oGQc"},{"title":"sorting basics in python (beginner) #360","url":"https://youtu.be/fqzcnd_FstY"},{"title":"multiplying str / list / tuple and pitfalls (beginner - intermediate) #361","url":"https://youtu.be/ZFjV3M-xl_M"},{"title":"making your own custom git commands (intermediate) #362","url":"https://youtu.be/YwG8C0jPapE"},{"title":"python --version --version is not a typo! (beginner) #363","url":"https://youtu.be/DIfVUYKZZfs"},{"title":"python parameter defaults are (mutable) globals (intermediate) #364","url":"https://youtu.be/x7kRGQNUJ5I"},{"title":"python typing: explicit TypeAlias (PEP 613) (intermediate) #365","url":"https://youtu.be/50SqDLU-6RE"},{"title":"python: what is weakref? (intermediate - advanced) #366","url":"https://youtu.be/GGKerIMqHCk"},{"title":"pip: requirements vs. constraints (intermediate) #367","url":"https://youtu.be/SeT-Gj_frd0"},{"title":"python: NewType vs aliases (intermediate) #368","url":"https://youtu.be/9rRYeunzX8c"},{"title":"quick debugging tool: python -i (beginner) #369","url":"https://youtu.be/B4wkrdcc28A"},{"title":"what is the log4shell vulnerability? (beginner - intermediate) #370","url":"https://youtu.be/A5BLKKYIQ28"},{"title":"what are python wheels? (intermediate - advanced) #371","url":"https://youtu.be/4L0Jb3Ku81s"},{"title":"recursively import python modules (intermediate) #372","url":"https://youtu.be/t43zBsVcva0"},{"title":"git commit as someone else? (intermediate) #373","url":"https://youtu.be/bQ2OiciywyA"},{"title":"what is PROMPT_COMMAND? (+aactivator) (intermediate) #374","url":"https://youtu.be/GFLivv2QGI0"},{"title":"python: what is `__file__`? (beginner - intermediate) #375","url":"https://youtu.be/LVhxqOznPg0"},{"title":"job management: fg / bg / ^Z, & and more! (intermediate) #376","url":"https://youtu.be/lkQOQAc65ZA"},{"title":"for loops are just while loops in disguise (beginner - intermediate) #377","url":"https://youtu.be/Pq2aXxTKFv4"},{"title":"configuring git from environment vars (intermediate) #378","url":"https://youtu.be/RVZeTpVpwS4"},{"title":"mypy: possible cyclic definition fix (intermediate) #379","url":"https://youtu.be/O_CYtaDlOO4"},{"title":"git: what does \"fast forward\" mean? (intermediate) #380","url":"https://youtu.be/Vy0JIwQoI-E"},{"title":"pathlib is slow! falsey is tricky! (pytest bug) (intermediate - advanced) #381","url":"https://youtu.be/qiZyDLEJHh0"},{"title":"don't lru_cache methods! (intermediate) #382","url":"https://youtu.be/sVjtp6tGo0g"},{"title":"github: give people credit! (beginner - intermediate) #383","url":"https://youtu.be/_-qNX8EbVYI"},{"title":"dropping old python versions (intermediate) #384","url":"https://youtu.be/Oun5kXqENMk"},{"title":"useful interview data structures: heapq (intermediate) #385","url":"https://youtu.be/sRLuocdQfEw"},{"title":"decorator typing (PEP 612) (intermediate - advanced) #386","url":"https://youtu.be/fwZoxWyMGM8"},{"title":"python: what is 0-arg raise? (beginner) #387","url":"https://youtu.be/yj4z1N3_0sw"},{"title":"time vs. /bin/time (beginner - intermediate) #388","url":"https://youtu.be/hJ5LT4AGf3Y"},{"title":"what is an open redirect vulnerability? (intermediate) #389","url":"https://youtu.be/ziGvS7XLWDU"},{"title":"how an exit(n) bug introduced 100s of lint errors (intermediate) #390","url":"https://youtu.be/RVSw1BGNmq8"},{"title":"hiding big noisy git diffs (intermediate) #391","url":"https://youtu.be/zVlISs2fnzw"},{"title":"recovering from git mistakes w/ ORIG_HEAD (intermediate) #392","url":"https://youtu.be/yhtq_PSekdo"},{"title":"the `timeout` command (beginner - intermediate) #393","url":"https://youtu.be/QRywzsBftfc"},{"title":"python code formatter tutorial (intermediate - advanced) #394","url":"https://youtu.be/G1omxo5pphw"},{"title":"why did I run `cd $PWD` ??? (beginner - intermediate) #395","url":"https://youtu.be/7tSVb0d0fyA"},{"title":"my python project setup (+ all tools) (intermediate) #396","url":"https://youtu.be/q8DkatMZvUs"},{"title":"python can import from zips! (intermediate) #397","url":"https://youtu.be/XCMOeFN6zX4"},{"title":"from imports aren't faster! (beginner - intermediate) #398","url":"https://youtu.be/ZWCyNz0fUsc"},{"title":"what is a .so / .dll / shared object? (intermediate - advanced) #399","url":"https://youtu.be/PDkKz3zQVls"},{"title":"what is inlining? and how does it make code faster? (intermediate) #400","url":"https://youtu.be/ct-eBvjsPck"},{"title":"finding and fixing test pollution! (intermediate) #401","url":"https://youtu.be/FRteianaPMo"},{"title":"how to modify a list while iterating (intermediate) #402","url":"https://youtu.be/JXis-BKRDFY"},{"title":"fix flaky tests with detect-test-pollution! (intermediate) #403","url":"https://youtu.be/w5O4zTusyJ0"},{"title":"a python curses wordle clone from scratch! (intermediate - advanced) #404","url":"https://youtu.be/dViRI1iovoc"},{"title":"why does `cd --` go to ~ ? (intermediate) #405","url":"https://youtu.be/vrIsG0Rw5xY"},{"title":"the `split` command! (beginner - intermediate) #406","url":"https://youtu.be/Ox95VqtRC28"},{"title":"don't run `python my/script.py`! (beginner - intermediate) #407","url":"https://youtu.be/hgCVIa5qQhM"},{"title":"what's that unicode character\u203d (beginner - intermediate) #408","url":"https://youtu.be/W60RS8PMP78"},{"title":"what is the `shred` command? (beginner - intermediate) #409","url":"https://youtu.be/2yt5u5JanwA"},{"title":"getting a python stacktrace from gdb! (intermediate - advanced) #410","url":"https://youtu.be/guni3oUdTIs"},{"title":"the fastest python startup with `python -S` (intermediate) #411","url":"https://youtu.be/lCwz4S2vCH8"},{"title":"what is immutability? (beginner - intermediate) #412","url":"https://youtu.be/OjLxyRyzzuY"},{"title":"what is rpath? (+relocatability) (intermediate - advanced) #413","url":"https://youtu.be/01fnuhjMwc0"},{"title":"`pip install pkg\u276e1.999` ? (intermediate) #414","url":"https://youtu.be/JzEAYIPdFX4"},{"title":"10 protips I wish I knew sooner as a software dev (beginner) #415","url":"https://youtu.be/_wcVyhfyaeE"},{"title":"embedding images in github (beginner - intermediate) #416","url":"https://youtu.be/8088ORqS3uY"},{"title":"how I sped up python by 20ms (intermediate) #417","url":"https://youtu.be/kI9WjDNxRJM"},{"title":"typing Self (PEP 673) (intermediate) #418","url":"https://youtu.be/ThATVufmTz8"},{"title":"you don't need .git! (beginner) #419","url":"https://youtu.be/BW7z9TO0Fqg"},{"title":"I don't need `__init__.py`? PEP 420 and namespace packages (intermediate) #420","url":"https://youtu.be/2Xvb79hOUdM"},{"title":"repr(...) doesn't work the way you expect (intermediate - advanced) #421","url":"https://youtu.be/e3bqdxqLvH4"},{"title":"DVD screensaver in python curses (intermediate) #422","url":"https://youtu.be/mVwAehkeBkI"},{"title":"double underscored names are NOT \"more private\" (beginner - intermediate) #423","url":"https://youtu.be/IVqLW1NWtPc"},{"title":"FizzBuzz... but in sqlite? (intermediate) #424","url":"https://youtu.be/UdhcvNSFRgU"},{"title":"\"z3\" is actual magic (intermediate) #425","url":"https://youtu.be/C9eXcmWWEyA"},{"title":"bash quoting is really not that difficult! (beginner - intermediate) #426","url":"https://youtu.be/VIUoHnFwEH4"},{"title":"I made pip startup 25% faster (intermediate) #427","url":"https://youtu.be/GmK1So7F0ZQ"},{"title":"how to use python backports + setup.py (intermediate) #428","url":"https://youtu.be/B94tqnXeFnQ"},{"title":"setting up an ubuntu jammy (22.04) development machine (beginner) #429","url":"https://youtu.be/tSUlg3yN4-k"},{"title":"python Generics (intermediate) #430","url":"https://youtu.be/LcfxUU1A-RQ"},{"title":"babi+ast helped me not break sentry! (intermediate) #431","url":"https://youtu.be/Fch_lt7ZXUw"},{"title":"python comprehensions leak scope again (intermediate) #432","url":"https://youtu.be/ONy8xXbdcUc"},{"title":"python variadic generics (PEP 646) (intermediate - advanced) #433","url":"https://youtu.be/hAj3nGzeSiQ"},{"title":"top 10 new things in python 3.11 (beginner - advanced) #434","url":"https://youtu.be/w2rcZIG1Uxk"},{"title":"assert_never / assert_type **CORRECTION** (intermediate) #435","url":"https://youtu.be/jN_a02Rj8Gg"},{"title":"a git workflow for *only my branches* (intermediate) #436","url":"https://youtu.be/GKBq5Xo_B6I"},{"title":"regex lookahead / lookbehind (intermediate) #437","url":"https://youtu.be/AjTy0DBK-18"},{"title":"are your python tests even running? (intermediate) #438","url":"https://youtu.be/0nPS_vVmhp0"},{"title":"python TypeGuard (PEP 647) (intermediate) #439","url":"https://youtu.be/Zv2K2AVy5lA"},{"title":"how I fixed a 9GB memory leak in cargo (rust) (intermediate) #440","url":"https://youtu.be/uxJhAXdBlbc"},{"title":"dealing with merge conflicts (beginner - intermediate) #441","url":"https://youtu.be/vQY309QQfuQ"},{"title":"what is an --orphan git branch? (intermediate) #442","url":"https://youtu.be/XLuD7KJLMwE"},{"title":"narrow python? len('\ud83d\ude43') == 2??? (intermediate) #443","url":"https://youtu.be/ht3ezs3O9Yo"},{"title":"what is gbp? (intermediate - advanced) #444","url":"https://youtu.be/Nu4TIETrktY"},{"title":"argparse: boolean option pitfall (beginner - intermediate) #445","url":"https://youtu.be/KuwR0GPylqE"},{"title":"cd is not an executable (beginner) #446","url":"https://youtu.be/1Ld5qv4-Pbo"},{"title":"what is a universal2 wheel? (intermediate) #447","url":"https://youtu.be/utdohIoR9ZM"},{"title":"docker: fast CI rebuilds with --cache-from (intermediate) #448","url":"https://youtu.be/77j6JFBTmTc"},{"title":"debugging a real issue and googling (beginner - intermediate) #449","url":"https://youtu.be/IQsat6EA0-M"},{"title":"regex backreferences (intermediate) #450","url":"https://youtu.be/gPMpRw1xUA8"},{"title":"why I banned python's assertRaises (intermediate) #451","url":"https://youtu.be/Q_HMOBD09ts"},{"title":"safer github personal access tokens (intermediate) #452","url":"https://youtu.be/GsjD5tZWqmM"},{"title":"bash strict mode gotcha (intermediate) #453","url":"https://youtu.be/oqq5k8XsrSs"},{"title":"javascript sucks at unicode (intermediate) #454","url":"https://youtu.be/PTJAvcpBdWo"},{"title":"pip freezing (==) isn't safe (intermediate) #455","url":"https://youtu.be/oGpyupM52IQ"},{"title":"python regex dynamic replacements (intermediate) #456","url":"https://youtu.be/o_PD7AAbs4U"},{"title":"how I made my import sorter 7x faster (intermediate) #457","url":"https://youtu.be/Q3menOSxRC4"},{"title":"what release was this fixed? (workflow) (intermediate) #458","url":"https://youtu.be/7f3UdjuQYtw"},{"title":"safely stealing github secrets with cryptography (intermediate) #459","url":"https://youtu.be/qjnEZ-3uYjc"},{"title":"how I sped up flake8 by 20% (intermediate) #460","url":"https://youtu.be/pvSk8pLLQrE"},{"title":"github's semi-secret by-id apis (intermediate) #461","url":"https://youtu.be/_XkkiwoiFU0"},{"title":"what is a natural sort? (beginner - intermediate) #462","url":"https://youtu.be/RaE66ycBRE0"},{"title":"relocatable macos binaries (advanced) #463","url":"https://youtu.be/OL7JTiJs-d8"},{"title":"what is nullcontext? (conditional contexts, pytest) (intermediate) #464","url":"https://youtu.be/XcyVxmkrKXk"},{"title":"why do I use azure pipelines instead of github actions? (intermediate) #465","url":"https://youtu.be/NEl4JfZ4of8"},{"title":"how is list append possibly O(1)? (beginner - intermediate) #466","url":"https://youtu.be/WIuITZgGYG8"},{"title":"what is musllinux (PEP 656) (intermediate) #467","url":"https://youtu.be/QAbveJB5kk8"},{"title":"easy try rust as a python dev (intermediate) #468","url":"https://youtu.be/ZGlEIetFNf0"},{"title":"why can't I signal a MagicMock() ? (intermediate) #469","url":"https://youtu.be/nJwc7iqyQwU"},{"title":"why does python think -1**0 is -1 ? (intermediate) #470","url":"https://youtu.be/T49G4WwmvnA"},{"title":"how do from imports keep their globals? (intermediate) #471","url":"https://youtu.be/FSPyCD5P76A"},{"title":"python int DoS vulnerability (CVE 2020-10735) (beginner - intermediate) #472","url":"https://youtu.be/lIniq12cMK0"},{"title":"docker multi-arch images (intermediate) #473","url":"https://youtu.be/G6wCo1WBPTo"},{"title":"python: don't use urlparse! (beginner - intermediate) #474","url":"https://youtu.be/ABJvdsIANds"},{"title":"why does python report macos 10.16 ??? (intermediate) #475","url":"https://youtu.be/Kg8s2YV-aFE"},{"title":"the docker registry api (advanced) #476","url":"https://youtu.be/Ce9var-Fty8"},{"title":"urllib3[secure]'s clever deprecation trick (intermediate) #477","url":"https://youtu.be/_jUXdX8e9Wg"},{"title":"functools.wraps for classes (intermediate) #478","url":"https://youtu.be/rbEqoOIvFko"},{"title":"avoiding shell injection in github actions (intermediate) #479","url":"https://youtu.be/7w0Ns8C1shQ"},{"title":"what is coverage? (intermediate) #480","url":"https://youtu.be/eQM3TOjsM_Q"},{"title":"don't make images of code / text! (beginner) -- #481","url":"https://youtu.be/svlsnZFWWDE"},{"title":"what is \"short circuiting\"? (beginner - intermediate) #482","url":"https://youtu.be/tsrlQ8v4UaM"},{"title":"what is the \"unraisable\" hook (intermediate) #483","url":"https://youtu.be/G4Lya0KVG1E"},{"title":"how does swapping work in python? (beginner - intermediate) #484","url":"https://youtu.be/cMiqfkpMh08"},{"title":"hiding your email on github (beginner) #485","url":"https://youtu.be/O3e19cwX6uY"},{"title":"python warnings defaults suck (intermediate) #486","url":"https://youtu.be/CtFdXBEwYfk"},{"title":"pytest: everything you need to know about fixtures (intermediate) #487","url":"https://youtu.be/ScEQRKwUePI"},{"title":"python os / platform-specific deps (PEP 508) (intermediate) #488","url":"https://youtu.be/cNQhpprVyn0"},{"title":"I don't use pytest-cov (intermediate) #489","url":"https://youtu.be/sPgvHGkmd0U"},{"title":"RegCPython: a 10% faster python for free? (intermediate - advanced) #490","url":"https://youtu.be/MQ2Lfj2hAdk"},{"title":"avoid notification spam with draft PRs! (beginner) #491","url":"https://youtu.be/LOLpOTYzknI"},{"title":"multiprocessing: fork() vs. spawn() (intermediate) #492","url":"https://youtu.be/hzBtsDPJ1dM"},{"title":"this clever hack let me kill py (intermediate) #493","url":"https://youtu.be/aZS3_-y6vsg"},{"title":"do this first before opening an issue (beginner) #494","url":"https://youtu.be/cGYVGVsXNFM"},{"title":"securing python with audit hooks (PEP 578) (intermediate) #495","url":"https://youtu.be/sIibadhDqaw"},{"title":"python sucks at copy-on-write (and one fix!) (intermediate) #496","url":"https://youtu.be/sdmcCQ7Em04"},{"title":"git is just a key value store? (advanced) #497","url":"https://youtu.be/HvA-WkXqlDI"},{"title":"refcount ONE BILLION? (immortal objects, PEP 683) (advanced) #498","url":"https://youtu.be/i5ZaVC4sEZA"},{"title":"partial git commits (intermediate) #499","url":"https://youtu.be/UJ5fpaeZWsI"},{"title":"sqlite is my favorite database (beginner - intermediate) #500","url":"https://youtu.be/jH39c5-y6kg"},{"title":"virtualenv isn't reproducible! (by default) (intermediate) #501","url":"https://youtu.be/mgJiCnqzYlI"},{"title":"--extra-index-url is unsafe! (intermediate) #502","url":"https://youtu.be/fWquXVcTKjU"},{"title":"docker: multi-stage builds (intermediate) #503","url":"https://youtu.be/OVYNUg0aODw"},{"title":"git: the several ways to \"--sign\" (intermediate) #504","url":"https://youtu.be/6hu3cbBhHqQ"},{"title":"why I use the colon (:) command (intermediate) #505","url":"https://youtu.be/onkNf1AKSgg"},{"title":"how should I organize my project? (beginner) #506","url":"https://youtu.be/QGAuwlQ9Gxc"},{"title":"don't git clone over https! (beginner) #507","url":"https://youtu.be/5o9ltH6YmtM"},{"title":"don't use cat! (intermediate) #508","url":"https://youtu.be/vWMiBVkdJjA"},{"title":"module level __getattr__ (intermediate) #509","url":"https://youtu.be/rRwJdMY2f4g"},{"title":"why are some things shell builtins? (intermediate) #510","url":"https://youtu.be/p_KKDHJhi7A"},{"title":"python: zip and unzip (intermediate) #511","url":"https://youtu.be/hOiRkFBxtpo"},{"title":"I've moved off of azure pipelines for CI (intermediate) #512","url":"https://youtu.be/n39uvwdW5ek"},{"title":"swapping without a third variable (intermediate) #513","url":"https://youtu.be/NLwJI6DFF4U"},{"title":"when should I pin deps: never and always! (intermediate) #514","url":"https://youtu.be/WSVFw-3ssXM"},{"title":"make a github commit using only the api! (intermediate) #515","url":"https://youtu.be/nwHqXtk6LHA"},{"title":"a simpler `try` / `except` (and why maybe shouldn't) (beginner - intermediate) #516","url":"https://youtu.be/MZAJ8qnC7mk"},{"title":"you're probably doing case-insensitive wrong (intermediate) #517","url":"https://youtu.be/U-Zq8bURfKc"},{"title":"getting started with pytest (beginner - intermediate) #518","url":"https://youtu.be/mzlH8lp4ISA"},{"title":"python descriptors! (advanced) #519","url":"https://youtu.be/vBys0SwYvCQ"},{"title":"don't use short options in scripts (beginner - intermediate) #520","url":"https://youtu.be/OKqWy2dM2Jo"},{"title":"how to escape this VERY MEAN prank (beginner) #521","url":"https://youtu.be/ZjSWRGzWo88"},{"title":"how do virtualenvs actually work (advanced) #522","url":"https://youtu.be/XFqDHPYfTwE"},{"title":"python's optimization mode is mostly useless (intermediate) #523","url":"https://youtu.be/6kMGphTUOUk"},{"title":"merge queues (intermediate) #524","url":"https://youtu.be/3vIGZ6_6nzo"},{"title":"all string syntaxes (beginner) #525","url":"https://youtu.be/4Y4VrKa1lVs"},{"title":"my first rust open source PR (beginner - intermediate) #526","url":"https://youtu.be/kIaOOYlbPWI"},{"title":"tuples! (and their syntax quirks) (beginner) #527","url":"https://youtu.be/J3-tL6OnFWA"},{"title":"how I use git blame (beginner - intermediate) #528","url":"https://youtu.be/8uuueHkWy-E"},{"title":"positional / named only without `*` or `/`? (intermediate) #529","url":"https://youtu.be/DatCgcsF6B8"},{"title":"why git's --intent-to-add ? (intermediate) #530","url":"https://youtu.be/GEYfAMpA-38"},{"title":"rerunning github checks (beginner - intermediate) #531","url":"https://youtu.be/OYh22O1B5D0"},{"title":"shell aliases and bypassing them? (beginner - intermediate) #532","url":"https://youtu.be/6okEabkL_q0"},{"title":"how I made pre-commit's github actions 3x faster (intermediate) #533","url":"https://youtu.be/5K8k-bSDnU0"},{"title":"don't use localhost (intermediate) #534","url":"https://youtu.be/98SYTvNw1kw"},{"title":"what is a \"canary\" deploy? (beginner - intermediate) #535","url":"https://youtu.be/W1uJCzqH0Lk"},{"title":"avoiding noisy git matches (beginner - intermediate) #536","url":"https://youtu.be/zoCuIdZJT1s"},{"title":"docker pull by sha256 digest (advanced) #537","url":"https://youtu.be/AiAU7wnPCrQ"},{"title":"weird python identity quirk? (intermediate) #538","url":"https://youtu.be/w4GasVbjIbA"},{"title":"when `git add .` doesn't work (intermediate) #539","url":"https://youtu.be/N0TFxl7A5Hw"},{"title":"I made every sentry page 300ms faster (intermediate) #540","url":"https://youtu.be/FY7EQwT7QKU"},{"title":"docker: don't mount files! (mount dirs instead) (intermediate) #541","url":"https://youtu.be/oXfL0UCO9F4"},{"title":"you can't always trust argv[0] (intermediate) #542","url":"https://youtu.be/qwpfSL-AcFQ"},{"title":"shell: use this instead of `cd` (intermediate) #543","url":"https://youtu.be/eF6qpdIY7Ko"},{"title":"docker: secrets at build time! (intermediate) #544","url":"https://youtu.be/aK6sJDOn2Hc"},{"title":"every Dockerfile should have this line! (intermediate) #545","url":"https://youtu.be/kL0q-7alfQA"},{"title":"python's \"soft\" keywords (intermediate) #546","url":"https://youtu.be/Rv3NYDOLpkM"},{"title":"shell vs environment variables (and env, export, etc.) (intermediate) #547","url":"https://youtu.be/h36Xc38SDHg"},{"title":"python 3.12 release highlights (beginner - advanced) #548","url":"https://youtu.be/IV8OZY4194U"},{"title":"how does .exe magic work? (PATHEXT) (intermediate) #549","url":"https://youtu.be/6QiLrVaG0qI"},{"title":"python is removing the GIL! (PEP 703) (advanced) #550","url":"https://youtu.be/OC2gnyfmwL8"},{"title":"tuple syntax doesn't have parens (beginner - intermediate) #551","url":"https://youtu.be/EDGJ2TMuppM"},{"title":"what is `Symbol` in js (intermediate) #552","url":"https://youtu.be/gZBQ8LIR6D4"},{"title":"debugging a sentry test pollution! (intermediate) #553","url":"https://youtu.be/YEIeKdBmuUY"},{"title":"stopping xargs early (intermediate) #554","url":"https://youtu.be/-J36ki4rU_Q"},{"title":"docker: connecting to localhost outside the container (intermediate) #555","url":"https://youtu.be/NZGu-9KQVsE"},{"title":"the system design interview (intermediate - advanced) #556","url":"https://youtu.be/SNyDKw4DFPQ"},{"title":"don't delete from pypi! (yank instead) (intermediate) #557","url":"https://youtu.be/lUFA_WklFII"},{"title":"git: --first-parent (intermediate) #558","url":"https://youtu.be/nsSj7snqODM"},{"title":"I don't use backslashes (with one exception) (beginner - intermediate) #559","url":"https://youtu.be/Y_gfBcjS5EY"},{"title":"what is a BOM (byte-order-marker) (intermediate) #560","url":"https://youtu.be/OrtNMystCgM"},{"title":"NEW generic / alias syntax for python 3.12 (PEP 695) (intermediate) #561","url":"https://youtu.be/YaDYUQ5mD5Q"},{"title":"new 3.12 f-strings syntax! (intermediate) #562","url":"https://youtu.be/BkexKFfrAeo"},{"title":"pesky reDOS and python 3.11 (intermediate) #563","url":"https://youtu.be/ECbls57_3jE"},{"title":"prefer tuples to lists! (intermediate) #564","url":"https://youtu.be/8nvfOjvOF5w"},{"title":"git: inline diffs with --word-diff! (intermediate) #565","url":"https://youtu.be/Wn3bJUzvy5I"},{"title":"ONE TERABYTE of RAM saved with a single line of code (advanced) #566","url":"https://youtu.be/Hgw_RlCaIds"},{"title":"using memray to debug (and fix) a memory leak in krb5! (advanced) #567","url":"https://youtu.be/bw5AHdZA7e4"},{"title":"py-spy saved our python 3.11 rollout (intermediate) #568","url":"https://youtu.be/p8s2fzqA07s"}]}]} \ No newline at end of file +{"playlists":[{"playlist_name":"faq","playlist_id":"PLWBKAf81pmOZEPeIV2_pIESK5hRMAo1hR","videos":[{"title":"what is your operating system? why?","url":"https://youtu.be/8KdAqlESQJo"},{"title":"what is your text editor and why is it not vim?","url":"https://youtu.be/WyR1hAGmR3g"},{"title":"how did you get started with programming?","url":"https://youtu.be/zve534AvtrY"},{"title":"when was the first time you were paid to code?","url":"https://youtu.be/Ak8d67Anquo"},{"title":"custom stream deck keyboard (BDN9)","url":"https://youtu.be/p2TyRIAxR48"},{"title":"why you should mute to type passwords","url":"https://youtu.be/OS51yqa2YmA"},{"title":"split keyboard! (kinesis freestyle pro)","url":"https://youtu.be/DZgCUWf9DZM"},{"title":"automatic cat gifs on github approve?","url":"https://youtu.be/2rDNJvHznrM"},{"title":"why I don't use aliases","url":"https://youtu.be/bb-galRcCmo"},{"title":"Good code changed like a ghost!","url":"https://youtu.be/_916x0YkOtU"},{"title":"a 2 key keyboard! (xd002)","url":"https://youtu.be/rBngGyWCV-4"},{"title":"I've moved!","url":"https://youtu.be/hEfACNTD3CU"},{"title":"my 2021 streaming setup","url":"https://youtu.be/18z2v0ZnHG8"},{"title":"computer build as of 2021","url":"https://youtu.be/RaCKnqM2VZc"},{"title":"auto generated art!","url":"https://youtu.be/jVENYWPBrWE"},{"title":"how much do I make as a staff software engineer?","url":"https://youtu.be/tR3d5S5GEeo"},{"title":"I quit.","url":"https://youtu.be/QzZSvznoCEo"},{"title":"why I left stripe","url":"https://youtu.be/Hw_NhNrK8-4"},{"title":"remote software engineering -- my strategies for making it work!","url":"https://youtu.be/6W3aYMoR3W4"},{"title":"why did I start streaming?","url":"https://youtu.be/sgJ6REnnyqk"},{"title":"I let twitch chat change my editor theme -- it was a mistake","url":"https://youtu.be/Q4EjZJE6CNs"},{"title":"why do I have a separate github account for work?","url":"https://youtu.be/ylvOPF5qZ4E"},{"title":"my thoughts on ruff","url":"https://youtu.be/XzW4-KEB664"}]},{"playlist_name":"explains","playlist_id":"PLWBKAf81pmOaP9naRiNAqug6EBnkPakvY","videos":[{"title":"introducing anthony explains! -- #000","url":"https://youtu.be/qvkppppy9K8"},{"title":"python cli tested with pytest - (beginner to intermediate) #001","url":"https://youtu.be/sv46294LoP8"},{"title":"python @decorators - (intermediate) #002","url":"https://youtu.be/WDMr6WolKUM"},{"title":"my favorite python str method! (beginner - intermediate) #003","url":"https://youtu.be/kx6G3nkZTjM"},{"title":"how to make a simple github PR (beginner) #004","url":"https://youtu.be/cysuuUtbC6E"},{"title":"the python @property decorator (beginner - intermediate) #005","url":"https://youtu.be/orp6bhe4i00"},{"title":"python type(x).__name__ vs x.__class__.__name__ (intermediate) #006","url":"https://youtu.be/6rAIttnm3Fs"},{"title":"python return annotations: NoReturn vs None (intermediate) #007","url":"https://youtu.be/-zH0qqDtd4w"},{"title":"what's wrong with python's blank except:? (beginner - intermediate) #008","url":"https://youtu.be/i0GOLe-F27Q"},{"title":"how I use selenium + html/css to make thumbnails (intermediate) #009","url":"https://youtu.be/VABA2rX1I_M"},{"title":"python: raising Error without parens (intermediate) #010","url":"https://youtu.be/gGqRBHHIQGE"},{"title":"python's tricky `for ...: else:` statement (beginner - intermediate) #011","url":"https://youtu.be/8P7lXLXR_3c"},{"title":"python's `pass` statement (beginner - intermediate) #012","url":"https://youtu.be/ANjDsGZZXy8"},{"title":"shell bling strings! (beginner - intermediate) #013","url":"https://youtu.be/fhhznv4E1pI"},{"title":"setting up an ubuntu focal virtual machine (beginner - intermediate) #014","url":"https://youtu.be/qL3xc8hwU7c"},{"title":"python executable zipapps (intermediate) #015","url":"https://youtu.be/HfL2s2JySos"},{"title":"pretty python profiling (intermediate) #016","url":"https://youtu.be/ey_P64E34g0"},{"title":"python implicit string joining (beginner - intermediate) #017","url":"https://youtu.be/5Zto6VYsNsI"},{"title":"postmortem debugging in python (beginner - intermediate) #018","url":"https://youtu.be/s8Nx2frW4ps"},{"title":"configuration management (devops) (intermediate) #019","url":"https://youtu.be/aQTCDoZ4NFg"},{"title":"how to pronounce PyPI (beginner) #020","url":"https://youtu.be/I5OUzCAYst8"},{"title":"all python argument / parameter types (beginner - intermediate) #021","url":"https://youtu.be/aKCfCmSggPg"},{"title":"what is a tty? (beginner - intermediate) #022","url":"https://youtu.be/SYwbEcNrcjI"},{"title":"introduction to markdown (beginner) #023","url":"https://youtu.be/1UodxuXj5Ao"},{"title":"how do I get started in open source? (beginner) #024","url":"https://youtu.be/NFW22q-vI6I"},{"title":"a flake8 plugin from scratch (intermediate) #025","url":"https://youtu.be/ot5Z4KQPBL8"},{"title":"finding regressions with git bisect (intermediate) #026","url":"https://youtu.be/C2C7FTI8nB4"},{"title":"pytest's parametrize (beginner - intermediate) #027","url":"https://youtu.be/aQH7hyJn-No"},{"title":"python curses \"hello world\" (beginner - intermediate) #028","url":"https://youtu.be/2em6MiOpHWk"},{"title":"git: empty initial commit (beginner - intermediate) #029","url":"https://youtu.be/BJ4hkYdb1LI"},{"title":"dockerfile RUN : \\ && syntax (beginner) #030","url":"https://youtu.be/BdxdRlTnPEE"},{"title":"python variable unpackings (beginner - intermediate) #031","url":"https://youtu.be/ObWh1AYClI0"},{"title":"docker: ADD \u00aburl\u00bb considered harmful? (intermediate) #032","url":"https://youtu.be/DazBJeVRA7k"},{"title":"what is a shebang (#!)? (beginner - intermediate) #033","url":"https://youtu.be/g3VxRdtlMoE"},{"title":"what is test driven development? (beginner - intermediate) #034","url":"https://youtu.be/JmMxU8ljiOg"},{"title":"python single vs double quote strings! (beginner) #035","url":"https://youtu.be/TTo5LGXYsH0"},{"title":"git: ignoring noisy whitespace changes (beginner - intermediate) #036","url":"https://youtu.be/qYJWBJvHqj0"},{"title":"git: useful trick for pushing branches (beginner - intermediate) #037","url":"https://youtu.be/bItxrNqJ5UQ"},{"title":"python github actions w/ tox and pre-commit (intermediate) #038","url":"https://youtu.be/KKJL8bM4cis"},{"title":"releasing a python package to pypi (beginner - intermediate) #039","url":"https://youtu.be/Gre2W5z4iLE"},{"title":"virtualenv vs. venv (beginner - intermediate) #040","url":"https://youtu.be/MGTX5qI2Jts"},{"title":"implementing --version with importlib.metadata (intermediate) #041","url":"https://youtu.be/beDG6Ibo2zQ"},{"title":"string formatting in python (beginner - intermediate) #042","url":"https://youtu.be/dTrW8YktDnE"},{"title":"introduction to tox (beginner - intermediate) #043","url":"https://youtu.be/75WBE_qbpGk"},{"title":"python argparse tutorial (beginner - intermediate) #044","url":"https://youtu.be/-Sgw-6a1HjU"},{"title":"typing __getitem__ (python / mypy) (intermediate) #045","url":"https://youtu.be/HESA7oukEqE"},{"title":"fixing a git mistake with reflog (intermediate) #046","url":"https://youtu.be/R8R9_eT2law"},{"title":"introduction to python typing + mypy (beginner - intermediate) #047","url":"https://youtu.be/H5CnZQDKfhU"},{"title":"python packaging: src layout (intermediate) #048","url":"https://youtu.be/sW1qUZ_nSXk"},{"title":"three ways to edit git commits (intermediate) #049","url":"https://youtu.be/2LEn0GQJitM"},{"title":"stdin / stdout / stderr (beginner - intermediate) #050","url":"https://youtu.be/5za6eRdHjpw"},{"title":"hacker mode tmux debugging (intermediate) #051","url":"https://youtu.be/BMn0nSpeITY"},{"title":"regular expressions crash course (beginner - intermediate) #052","url":"https://youtu.be/yFRSpPwrJzQ"},{"title":"web security: what is a csrf exploit? (intermediate) #053","url":"https://youtu.be/MXZhe0KduyE"},{"title":"python: functools.lru_cache (beginner - intermediate) #54","url":"https://youtu.be/K0Q5twtYxWY"},{"title":"python __future__ \"module\" (beginner - intermediate) #055","url":"https://youtu.be/_K4mjPrROGQ"},{"title":"undoing an accidental git commit (intermediate) #056","url":"https://youtu.be/EcciszFDpn8"},{"title":"python packaging: basic setup.py and declarative metadata (intermediate) #057","url":"https://youtu.be/GaWs-LenLYE"},{"title":"what is deadsnakes? (beginner - intermediate) #058","url":"https://youtu.be/Xe40amojaXE"},{"title":"getting started with programming (beginner) #059","url":"https://youtu.be/khqIPspzh4A"},{"title":"git show (+ some tips!) (beginner) #060","url":"https://youtu.be/gFKgEbbQRyQ"},{"title":"python star imports (beginner - intermediate) #061","url":"https://youtu.be/gJJVXB5JLUk"},{"title":"intro to apt (debian / ubuntu) (beginner + intermediate) #062","url":"https://youtu.be/ctGpRWCi8QU"},{"title":"correct conditional arguments in bash (beginner - intermediate) #063","url":"https://youtu.be/hVTrmsqZC38"},{"title":"using the python __import__ builtin correctly (intermediate) #064","url":"https://youtu.be/3V3bv7FsR48"},{"title":"special paths: ~, ~user, ., .. (beginner) #065","url":"https://youtu.be/lyMQASRha9s"},{"title":"protip: exiting really fast! (beginner) #066","url":"https://youtu.be/yLdxwugv4qM"},{"title":"python: Ellipsis (...) and typing (beginner - intermediate) #067","url":"https://youtu.be/yLwvOwTO068"},{"title":"git cherry-pick (intermediate) #068","url":"https://youtu.be/hmMrtfyb1vc"},{"title":"customizing the python repl (intermediate) #069","url":"https://youtu.be/vwu6i0ghwJU"},{"title":"what is PATH? (beginner - intermediate) #070","url":"https://youtu.be/ZpOoRSkm-dQ"},{"title":"python packaging: data files (intermediate) #071","url":"https://youtu.be/bfyIrX4_yL8"},{"title":"a virtualenv from nothing! (beginner - intermediate) #072","url":"https://youtu.be/OXmYKh0eTQ8"},{"title":"tox --devenv (beginner - intermediate) #073","url":"https://youtu.be/flJi2N3dDk0"},{"title":"python packaging: optional dependencies (intermediate) #074","url":"https://youtu.be/yJyo-K7wW2g"},{"title":"regexes: capture groups (beginner - intermediate) #075","url":"https://youtu.be/Cs2V6nRhWL4"},{"title":"python typing: why not self? (intermediate) #076","url":"https://youtu.be/VumItqHMaTA"},{"title":"generator basics (+typing) (beginner - intermediate) #077","url":"https://youtu.be/LjBa9sfJh7U"},{"title":"stop using `git add .` (beginner - intermediate) #078","url":"https://youtu.be/GgIZbO2Hb5s"},{"title":"why not global pip / virtualenv? (intermediate) #079","url":"https://youtu.be/O390_abzo08"},{"title":"bash hash cache! (beginner - intermediate) #080","url":"https://youtu.be/N13XEwdc_2k"},{"title":"git: a checked-in directory (intermediate) #081","url":"https://youtu.be/_qCzcB80fAY"},{"title":"typing: exception types (intermediate) #082","url":"https://youtu.be/22BvsKjHRfQ"},{"title":"why you should end a file in a newline (beginner) #083","url":"https://youtu.be/r5nWtfwK_dk"},{"title":"git workflow: branch name collisions (intermediate) #084","url":"https://youtu.be/XHU3Kvudraw"},{"title":"sort your imports! (beginner - intermediate) #085","url":"https://youtu.be/Sjor8PZXnaw"},{"title":"what is the underscore (_) for? (beginner) #086","url":"https://youtu.be/VKz1aQbNnyI"},{"title":"python curses: color (intermediate) #087","url":"https://youtu.be/M8gC65VgApM"},{"title":"semantic versioning (beginner - intermediate) #088","url":"https://youtu.be/vRSw2f34RRU"},{"title":"file modes and chmod (beginner - intermediate) #089","url":"https://youtu.be/BrBHUosstHg"},{"title":"making a regex not match itself! (intermediate) #090","url":"https://youtu.be/4KLLctC0G6U"},{"title":"I run 'rm -rf /' and see what happens (beginner - intermediate) #091","url":"https://youtu.be/iqqNMZj608s"},{"title":"git fetch (--prune) (beginner - intermediate) #092","url":"https://youtu.be/oj19T3N2NHY"},{"title":"top 10 new things in python3.9 (beginner - intermediate) #093","url":"https://youtu.be/Dtw0QJhepV0"},{"title":"testing functools.lru_cache with pytest! (beginner - intermediate) #094","url":"https://youtu.be/ujRo8n0LsU4"},{"title":"git: commit message pro tip (beginner - intermediate) #095","url":"https://youtu.be/CWrBZeC2Qqs"},{"title":"typing: what is Type[X]? (intermediate) #096","url":"https://youtu.be/_7EXU9cjBkg"},{"title":"python debugger crash course: pdb / breakpoint (beginner - intermediate) #097","url":"https://youtu.be/0LPuG825eAk"},{"title":"why pytest.mark.usefixtures? (intermediate) #098","url":"https://youtu.be/BE2v1VCmGwg"},{"title":"git apply and manual stashing (intermediate) #099","url":"https://youtu.be/4LXTaikZfco"},{"title":"intro to python namedtuples! (beginner - intermediate) #100","url":"https://youtu.be/iqXnBE4htUc"},{"title":"namedtuple to json and other pitfalls (intermediate) #101","url":"https://youtu.be/QOKqvuvA3ok"},{"title":"how namedtuple works (advanced) #102","url":"https://youtu.be/sfDSQSj-uvQ"},{"title":"why python -m pip? (beginner - intermediate) #103","url":"https://youtu.be/gnYdk_U6UQ0"},{"title":"fixing NameError / TypeError in python type annotations (intermediate) #104","url":"https://youtu.be/zH_F2xC0LOk"},{"title":"why backslash in triple-quoted-strings \"\"\"\\ (intermediate) #105","url":"https://youtu.be/WFggulJ81dM"},{"title":"what's (wrong with) hacktoberfest? (beginner) #106","url":"https://youtu.be/dzRTR63Lzx8"},{"title":"pure python windows .exe (no compiler!) (intermediate) #107","url":"https://youtu.be/nzaH5n-Xk64"},{"title":"python dist-packages vs. site-packages (intermediate) #108","url":"https://youtu.be/aEB_EcgTiQo"},{"title":"testing optional python dependencies (intermediate) #109","url":"https://youtu.be/PXu3KCMT3l4"},{"title":"typing: why main() -\u02c3 int (beginner - intermediate) #110","url":"https://youtu.be/Kur4Y7j4vac"},{"title":"debugging with dir() (+__dir__) (beginner - intermediate) #111","url":"https://youtu.be/LxCdn18eGng"},{"title":"python: pretty headers with str.center (beginner) #112","url":"https://youtu.be/88-rhi4CSsg"},{"title":"don't put passwords in commands! (beginner - intermediate) #113","url":"https://youtu.be/SqXOchNKV_c"},{"title":"python: comma, = assignment! (beginner - intermediate) #114","url":"https://youtu.be/WLKi_gPKCp0"},{"title":"python typing: re.match and Optional (intermediate) #115","url":"https://youtu.be/yH6L3UiK9WM"},{"title":"python: .sort() vs sorted(...) (beginner - intermediate) #116","url":"https://youtu.be/JZYWtmxaCeM"},{"title":"python typing: @property (beginner - intermediate) #117","url":"https://youtu.be/Q0K8CKn5htI"},{"title":"python: 4 ways to set namedtuple defaults (intermediate) #118","url":"https://youtu.be/w4o-GT_43Yw"},{"title":"what is the /opt directory? (beginner - intermediate) #119","url":"https://youtu.be/tzOImbBp17c"},{"title":"git: visualizing main line commits (intermediate) #120","url":"https://youtu.be/UjCnvh6uAUs"},{"title":"bash: passing string as stdin (beginner - intermediate) #121","url":"https://youtu.be/Xf_82stIbB8"},{"title":"python: what is __slots__ and __dict__ (intermediate) #122","url":"https://youtu.be/2d3vZhF-2aA"},{"title":"why __slots__ = () (namedtuples) (intermediate) #123","url":"https://youtu.be/BSNd_kxHXL8"},{"title":"how do editable pip installs work? (intermediate) #124","url":"https://youtu.be/gYYi7varbmE"},{"title":"what is argv (and argc)? (beginner - intermediate) #125","url":"https://youtu.be/guJj17ggtXU"},{"title":"is python with types faster? (intermediate) #126","url":"https://youtu.be/mkT3KP2J15I"},{"title":"bash: multiple lines to stdin with heredocs (beginner - intermediate) #127","url":"https://youtu.be/KeO-OGf8Tao"},{"title":"a python plugin system via entrypoints (intermediate) #128","url":"https://youtu.be/fY3Y_xPKWNA"},{"title":"git diff A...B (3 dots) (beginner - intermediate) #129","url":"https://youtu.be/WRXmm-E77aY"},{"title":"faster than git clone! (beginner - intermediate) #130","url":"https://youtu.be/YtK1uOa2VpM"},{"title":"python: len(x) vs x.__len__() (beginner - intermediate) #131","url":"https://youtu.be/KyqiduLIL5k"},{"title":"python typing: Final / @final (intermediate) #132","url":"https://youtu.be/jCf3zi2m56c"},{"title":"python: raw (NOT REGEX) r'strings' (beginner - intermediate) #133","url":"https://youtu.be/RvoKwGekk1s"},{"title":"a \"hello world\" python C extension (intermediate - advanced) #134","url":"https://youtu.be/HrEzCI3jIHw"},{"title":"making python releases less painful with abi3 (intermediate - advanced) #135","url":"https://youtu.be/4uy0c855msk"},{"title":"useful interview datastructures: defaultdict (beginner - intermediate) #136","url":"https://youtu.be/sunYwbKAzI0"},{"title":"reset a clone with git clean! (beginner - intermediate) #137","url":"https://youtu.be/cE9IRYDMoS8"},{"title":"with + context managers (part1: the hard way) (intermediate - advanced) #138","url":"https://youtu.be/ExdtNMnP24I"},{"title":"with + context managers (part2: the easy way) (intermediate) #139","url":"https://youtu.be/ucGpcA9r4hU"},{"title":"how @contextmanager works (with/contexts part 3) (advanced) #140","url":"https://youtu.be/nr_q2y0qxFg"},{"title":"is python's round() broken? (beginner) #141","url":"https://youtu.be/sIObDTFsKyI"},{"title":"useful interview datastructures: Counter (beginner - intermediate) #142","url":"https://youtu.be/FzlJxKRPL-4"},{"title":"easy fake objects with python's SimpleNamespace (beginner - intermediate) #143","url":"https://youtu.be/8XvyHj8ndg8"},{"title":"what is a git tag? (beginner - intermediate) #144","url":"https://youtu.be/34CQxHXzD4w"},{"title":"python: typing *args / **kwargs (intermediate) #145","url":"https://youtu.be/CqafM-bsnW0"},{"title":"python typing: Optional is not optional! (intermediate) #146","url":"https://youtu.be/7XZYlDpSxOU"},{"title":"mypy's \"implicit optional\" (and why I disable it) (intermediate) #147","url":"https://youtu.be/sc1JfhSvSII"},{"title":"customize ANY website (beginner - intermediate) #148","url":"https://youtu.be/Cmz6YGzF0PM"},{"title":"python: more advanced breakpoint() usage (intermediate) #149","url":"https://youtu.be/7TuFty4_WTY"},{"title":"what is docker and how does it work? (intermediate) #150","url":"https://youtu.be/tWvQAxkMaWs"},{"title":"docker run: always use --rm! (beginner - intermediate) #151","url":"https://youtu.be/0vxIyXgkihA"},{"title":"what is sass vs scss? (beginner) #152","url":"https://youtu.be/EPpjU50TYHg"},{"title":"repeatedly checking command output (beginner - intermediate) #153","url":"https://youtu.be/DUxS7zOhu1U"},{"title":"why do asset urls have hex segments? (beginner - intermediate) #154","url":"https://youtu.be/h345YuE3lZ8"},{"title":"python cffi tutorial (intermediate - advanced) #155","url":"https://youtu.be/X5irxO5VCHw"},{"title":"python regex: \\d gotcha! (beginner - intermediate) #156","url":"https://youtu.be/9dnZiCW1OHc"},{"title":"customizing \"command not found\" (intermediate) #157","url":"https://youtu.be/p4cpVggLuJk"},{"title":"why `docker build --pull`? (intermediate) #158","url":"https://youtu.be/BP1v7XXlePM"},{"title":"useful commands: `pstree` (beginner - intermediate) #159","url":"https://youtu.be/Omu4tXtlULU"},{"title":"don't use os.system! (beginner - intermediate) #160","url":"https://youtu.be/oQxTSDh-ECk"},{"title":"python: all about comprehensions! (beginner - intermediate) #161","url":"https://youtu.be/f-Q5VZlPjhI"},{"title":"python: os.exec* vs subprocess (intermediate) #162","url":"https://youtu.be/xTiPODNalrU"},{"title":"python typing: @overload (intermediate) #163","url":"https://youtu.be/rY9NZ-tXiDQ"},{"title":"structural subtyping in python with Protocol! (intermediate) #164","url":"https://youtu.be/QjFChmQHJxk"},{"title":"what is virtualenvwrapper + quick start (beginner - intermediate) #165","url":"https://youtu.be/vnXUBoOqGWQ"},{"title":"github tweak: custom tab width (beginner) #166","url":"https://youtu.be/GYPRBVmw1Pc"},{"title":"what is advent of code? (beginner) #167","url":"https://youtu.be/QAwQ8eKBpYw"},{"title":"what is atomicity (intermediate) #168","url":"https://youtu.be/tmlmCG5egI0"},{"title":"python: what is `nonlocal` (intermediate) #169","url":"https://youtu.be/evYOlT1T7Mo"},{"title":"python typing: Literal (intermediate) #170","url":"https://youtu.be/ZHisrvgF1Wk"},{"title":"counting in binary / 2s complement (beginner - intermediate) #171","url":"https://youtu.be/G1teq9UZ4kM"},{"title":"oops I typed `git git ...` again (beginner - intermediate) #172","url":"https://youtu.be/BkUW2NgfZao"},{"title":"python: binary search the easy way (interview tips) (intermediate) #173","url":"https://youtu.be/icoYNPoTZ44"},{"title":"pytest: parametrize permutation (intermediate) #174","url":"https://youtu.be/QIUrd327tOQ"},{"title":"more powerful than control-C (beginner - intermediate) #175","url":"https://youtu.be/_f8xgOMGO-g"},{"title":"pytest: testing exceptions (beginner - intermediate) #176","url":"https://youtu.be/6nRxZyQwwlE"},{"title":"what is a pager / less ? (beginner - intermediate) #177","url":"https://youtu.be/hxvAEr9Q2A4"},{"title":"python: naming and underscores (beginner - intermediate) #178","url":"https://youtu.be/q1E-d7PvSSY"},{"title":"what is the bang (!) in git aliases (beginner - intermediate) #179","url":"https://youtu.be/-Ur2OGPCZhk"},{"title":"python typing: aliases (beginner - intermediate) #180","url":"https://youtu.be/4zcrkP2VPSs"},{"title":"argparse: making a command wrapper (parse_known_args) (intermediate) #181","url":"https://youtu.be/sCbC8hkg_xs"},{"title":"bash protip: fc \"fix command\" (beginner - intermediate) #182","url":"https://youtu.be/PPovOOA7bdU"},{"title":"python integer literal underscores! (beginner) #183","url":"https://youtu.be/BkKVVRLHE5Y"},{"title":"what is `git -C ...` (intermediate) #184","url":"https://youtu.be/YXDn2qtK8GI"},{"title":"bash: pushd / popd (beginner - intermediate) #185","url":"https://youtu.be/_cYaToOFml8"},{"title":"what is `cd -` / `git checkout -` (beginner) #186","url":"https://youtu.be/sb1itVtABEk"},{"title":"typing: Protocol + @runtime_checkable (intermediate) #187","url":"https://youtu.be/4y94mvp_rYw"},{"title":"what is a singleton? (and python patterns) (intermediate - advanced) #188","url":"https://youtu.be/PBCsN29ZG9A"},{"title":"python: conditional context and ExitStack (intermediate) #189","url":"https://youtu.be/FHixla7BLvI"},{"title":"python deque (useful interview datastructures) (intermediate) #190","url":"https://youtu.be/obXt90bzgJo"},{"title":"images in the terminal? what is a sixel (beginner - intermediate) #191","url":"https://youtu.be/fa9ik_OnLmg"},{"title":"useful tools: uq (beginner - intermediate) #192","url":"https://youtu.be/K8jmAQnPE2c"},{"title":"git: cleaning up merged branches (beginner - intermediate) #193","url":"https://youtu.be/5O8PzE4nJTQ"},{"title":"python: decorating a class (intermediate) #194","url":"https://youtu.be/xwsgV3yAtmw"},{"title":"python: class-based @decorators (intermediate - advanced) #195","url":"https://youtu.be/hTLDC9H1b4Q"},{"title":"intro to git lfs (intermediate) #196","url":"https://youtu.be/c6BRKcO5WxE"},{"title":"python scoping (beginner - intermediate) #197","url":"https://youtu.be/xb_zV3gaDxY"},{"title":"docker: deleting files makes your image bigger! (intermediate) #198","url":"https://youtu.be/4kBfXrE0xpo"},{"title":"getting started with packer (intermediate) #199","url":"https://youtu.be/VvjYePm2UyU"},{"title":"all about xargs ! (beginner - intermediate) #200","url":"https://youtu.be/ED9AUfFrak8"},{"title":"bash \"strict mode\": -euo pipefail (beginner - intermediate) #201","url":"https://youtu.be/9fSkygQ-ZjI"},{"title":"3 ways to clear / fix the terminal (beginner) #202","url":"https://youtu.be/LSEnVCBnKN4"},{"title":"python is compiled? (+ disassembler) (intermediate) #203","url":"https://youtu.be/FPJdre3mbD4"},{"title":"what is a boolean trap? (programming antipattern) (beginner - intermediate) #204","url":"https://youtu.be/CnRkXO_a5mI"},{"title":"python: str.translate (intermediate) #205","url":"https://youtu.be/0kYctEx_O28"},{"title":"python easter eggs: __future__ braces (beginner) #206","url":"https://youtu.be/x7xVjGbObrw"},{"title":"the `wc` command (beginner) #207","url":"https://youtu.be/YmjeLv1RLSc"},{"title":"debugging python segfaults with gdb (intermediate - advanced) #208","url":"https://youtu.be/bXEXE6ywzSA"},{"title":"interview question: 4 / 7 swap (beginner - intermediate) #209","url":"https://youtu.be/PSXlOSJ2lZk"},{"title":"github actions vulnerability or \"why bug bounties are a scam\" (intermediate) #210","url":"https://youtu.be/_fpXyS_i1xE"},{"title":"python easter eggs: antigravity (beginner) #211","url":"https://youtu.be/T7TvWTjp_fw"},{"title":"python insertion-ordered dicts (beginner - intermediate) #212","url":"https://youtu.be/thOgrFA7MzI"},{"title":"python @decorator stacking (intermediate) #213","url":"https://youtu.be/A10RHUCVw6A"},{"title":"typing: dealing with import cycles (beginner - intermediate) #214","url":"https://youtu.be/B5cjckVzY4g"},{"title":"python easter eggs: easiest hello world! (beginner) #215","url":"https://youtu.be/ViNc-g60br8"},{"title":"what is dynamic programming? (beginner - intermediate) #216","url":"https://youtu.be/4tc5MUBjw-g"},{"title":"unix commands: fold (beginner) #217","url":"https://youtu.be/BVuW-kiY_X8"},{"title":"listing only directories with `ls` (beginner) #218","url":"https://youtu.be/rNANZNxEUAo"},{"title":"github tip: getting perma-links (beginner) #219","url":"https://youtu.be/5IDpsBccqLk"},{"title":"finding python source code and docs (beginner) #220","url":"https://youtu.be/DUG77pRVsV8"},{"title":"how I sped up python's tokenize module by 25% (intermediate) #221","url":"https://youtu.be/fYbeK47C5b8"},{"title":"python: why is -c faster than -m? (intermediate) #222","url":"https://youtu.be/YuIZkHawihw"},{"title":"python: {...} is faster than dict(...) (intermediate) #223","url":"https://youtu.be/-v4DmRsL7nc"},{"title":"showing actual file bytes with hexdump (beginner - intermediate) #224","url":"https://youtu.be/FNyo1CSxBrg"},{"title":"python: how do any / all work? (beginner) #225","url":"https://youtu.be/NO8frFR7ZxU"},{"title":"python: why str('foo') (python 2 / 3 compat) (beginner - intermediate) #226","url":"https://youtu.be/qNW-ITqdpfM"},{"title":"bash: /bin/[ is an executable ? (intermediate) #227","url":"https://youtu.be/8kFmJGXa1qk"},{"title":"the `install` command (beginner - intermediate) #228","url":"https://youtu.be/Xk5XRy4OxOM"},{"title":"3 ways to fix an accidental git commit to main (beginner - intermediate) #229","url":"https://youtu.be/4C2lSosT7hc"},{"title":"don't use time.time() for performance measurement (beginner - intermediate) #230","url":"https://youtu.be/hb-12mgQrzM"},{"title":"how to search a repo using `git grep` (beginner) #231","url":"https://youtu.be/2MCtRv1ZIFQ"},{"title":"the 2 modes of python's str.split (beginner) #232","url":"https://youtu.be/6pIPMHP2Lwg"},{"title":"python: what are *splat **args? (intermediate) #233","url":"https://youtu.be/VhDMj5ffGSc"},{"title":"why doesn't flake8 mark this import as unused? (beginner - intermediate) #234","url":"https://youtu.be/gRq3Sb0_dJM"},{"title":"pathlib is slow? how I improved black's caching by 40x (intermediate) #235","url":"https://youtu.be/tFrh9hKMS6Y"},{"title":"how to make a virtualenv from cpython source (intermediate) #236","url":"https://youtu.be/2ETZsYF5c7s"},{"title":"enable tab completion in pdb! (beginner) #237","url":"https://youtu.be/S-Gj0q0O9_E"},{"title":"sed command basics (beginner - intermediate) #238","url":"https://youtu.be/fdRL8xME7bQ"},{"title":"what pythons should I support? (beginner - intermediate) #239","url":"https://youtu.be/w8W6IaaXCBQ"},{"title":"python: what is assert? (beginner) #240","url":"https://youtu.be/v1MtwCPTmBI"},{"title":"python: shlex module (beginner - intermediate) #241","url":"https://youtu.be/fdTHXq6AQ7E"},{"title":"python: what is hashability? (intermediate) #242","url":"https://youtu.be/fQtNXBJp8Q4"},{"title":"python: why object() in this code? (intermediate) #243","url":"https://youtu.be/1n6kWtLrOV4"},{"title":"intro to terraform (intermediate) #244","url":"https://youtu.be/xskzEkoisNE"},{"title":"git rebase (and git rebase -i) (intermediate) #245","url":"https://youtu.be/hv8dhOEzQcM"},{"title":"testing output with pytest (beginner - intermediate) #246","url":"https://youtu.be/dN-pVt7i4Us"},{"title":"python: exception catching and isinstance gotcha (beginner - intermediate) #247","url":"https://youtu.be/dS8rdjZrCaA"},{"title":"one-off 3rd party mypy types (intermediate) #248","url":"https://youtu.be/mKmmZHMwXAY"},{"title":"PS1, coloring, and fixing weird wrapping (beginner - intermediate) #249","url":"https://youtu.be/ngLwml9XI-I"},{"title":"python match statement (PEP 634) (intermediate - advanced) #250","url":"https://youtu.be/Bk-Gn7J6sz4"},{"title":"NotImplemented vs NotImplementedError (beginner - intermediate) #251","url":"https://youtu.be/GSBqmYUnBdk"},{"title":"packaging python typed code (intermediate) #252","url":"https://youtu.be/n4GJ8rp6DpE"},{"title":"interview questions: anagrams (beginner - intermediate) #253","url":"https://youtu.be/aEPW3x_FVes"},{"title":"python: functools.partial (beginner - intermediate) #254","url":"https://youtu.be/kZlOy1BY6lY"},{"title":"speed up git in big repos with this trick (beginner) #255","url":"https://youtu.be/ppILYNc10DQ"},{"title":"correct `apt-get` for ubuntu / debian in docker (intermediate) #256","url":"https://youtu.be/ZAoK8O9oBGo"},{"title":"what is podman vs docker (beginner - intermediate) #257","url":"https://youtu.be/lkg5QJsoCCQ"},{"title":"a file even root can't delete! (chattr) (intermediate) #258","url":"https://youtu.be/eXUCrIhTsM0"},{"title":"python: yield from (beginner - intermediate) #259","url":"https://youtu.be/36nDT1ryA5o"},{"title":"pytest: xfail vs xpass and all test statuses (beginner - intermediate) #260","url":"https://youtu.be/uzodcMcHbJU"},{"title":"python easter eggs: __peg_parser__ (beginner) #261","url":"https://youtu.be/p985PaTjqlc"},{"title":"what is the XDG base directory specification? (intermediate) #262","url":"https://youtu.be/wT85Ynk-0MY"},{"title":"move a virtualenv! (intermediate) #263","url":"https://youtu.be/iZlgLrWed1I"},{"title":"atomic file replacement (os.rename vs os.replace) (intermediate) #264","url":"https://youtu.be/-9eXCb3yvyY"},{"title":"floats are broken? (+3 solutions in python!) (beginner - intermediate) #265","url":"https://youtu.be/9-Cpi3hGjrY"},{"title":"how I find standard python type signatures (beginner - intermediate) #266","url":"https://youtu.be/FP3VV6do6Cc"},{"title":"python curses: mouse integration (intermediate) #267","url":"https://youtu.be/OQ20a6CIamM"},{"title":"the `rlwrap` command (beginner - intermediate) #268","url":"https://youtu.be/WizvitXOsLk"},{"title":"can cpython be 76% faster by changing hash()? (no) (intermediate) #269","url":"https://youtu.be/_8FHjmv8ix0"},{"title":"what is a .pth file? (intermediate) #270","url":"https://youtu.be/mzxQrgvuRFg"},{"title":"nesting context managers with classes (intermediate) #271","url":"https://youtu.be/kJIyBpR9bQM"},{"title":"a FREE stateful cron using aws (intermediate) #272","url":"https://youtu.be/Lauwn5wNZzo"},{"title":"what are git submodules? (intermediate) #273","url":"https://youtu.be/RFcc-BQjCsE"},{"title":"programmable nintendo switch controller (intermediate) #274","url":"https://youtu.be/chvgQUX7QaI"},{"title":"python typing: object vs Any (intermediate) #275","url":"https://youtu.be/ATS9MAo2Mjc"},{"title":"python typing: NotImplemented is a bool? (intermediate) #276","url":"https://youtu.be/5XBs_fM3Nac"},{"title":"the `find` command (beginner - intermediate) #277","url":"https://youtu.be/y6NQTZgPNPw"},{"title":"use the clipboard from the terminal (beginner) #278","url":"https://youtu.be/-ebWr_C29_c"},{"title":"pgrep / pkill commands (beginner - intermediate) #279","url":"https://youtu.be/KdSKTEUPPEk"},{"title":"SUPER FAST cpython with mypyc (intermediate) #280","url":"https://youtu.be/0Cjg3qvHBEY"},{"title":"updating a forked repository (beginner - intermediate) #281","url":"https://youtu.be/MSYqb9EWjto"},{"title":"docker takes so much disk! (beginner - intermediate) #282","url":"https://youtu.be/TSjZrubRfXo"},{"title":"python: traceback basics + raise from (beginner - intermediate) #283","url":"https://youtu.be/wc6W-RaMJ7k"},{"title":"git: check in executable file (+ on windows) (beginner - intermediate) #284","url":"https://youtu.be/Ud6t-mIyhsw"},{"title":"line buffering vs. block buffering (intermediate) #285","url":"https://youtu.be/gdU1QiKKSbE"},{"title":"the `comm` command! (intermediate) #286","url":"https://youtu.be/Ic-8swynoHU"},{"title":"man pages for git subcommands (beginner - intermediate) #287","url":"https://youtu.be/1CYAFPTn_oo"},{"title":"flake8: avoiding F401 in __init__.py (beginner - intermediate) #288","url":"https://youtu.be/OAqvLDRZqFc"},{"title":"top 10 new things in python 3.10 (beginner - intermediate) #289","url":"https://youtu.be/jUwPmbHnlt0"},{"title":"what is a deadletter queue? (intermediate) #290","url":"https://youtu.be/XNXbjWNsKAE"},{"title":"atomically replace / delete directories (intermediate - advanced) #291","url":"https://youtu.be/qEcYqI5NDko"},{"title":"\u2603.com and punycode / idna (beginner - intermediate) #292","url":"https://youtu.be/MMkOWqJkxeo"},{"title":"how to get pip for deadsnakes / docker pythons (intermediate) #293","url":"https://youtu.be/2Hg5-Hrsa6w"},{"title":"@staticmethod / @classmethod (beginner + advanced) #294","url":"https://youtu.be/yhkpRz7TC7o"},{"title":"date.today() is twice as slow as datetime.now().date()??? (intermediate) #295","url":"https://youtu.be/PBg6EorsX7s"},{"title":"simple python dockerfile w/ flask (intermediate) #296","url":"https://youtu.be/8V4UowjLIMc"},{"title":"python typing: Generator[T, S, R] (intermediate) #297","url":"https://youtu.be/DTegfCNAXoM"},{"title":"python: explicit relative imports (intermediate) #298","url":"https://youtu.be/uwtupH7LJco"},{"title":"debugging mypy types (beginner - intermediate) #299","url":"https://youtu.be/Pc6H3Pofhp8"},{"title":"what are python doctests? (beginner - intermediate) #300","url":"https://youtu.be/37TJeMLyi5I"},{"title":"terminal keyboard shortcut for unicode! (beginner) #301","url":"https://youtu.be/36G70-MMhGI"},{"title":"bash: strings with `!` / !... event not found (beginner - intermediate) #302","url":"https://youtu.be/VkRjT3UBiLk"},{"title":"default zoom key shortcut (beginner) #303","url":"https://youtu.be/rn_iru8zKqs"},{"title":"smaller / faster builds with dockerignore (beginner - intermediate) #304","url":"https://youtu.be/dEZ5WVWLris"},{"title":"python: why reload() is a bad idea (beginner - intermediate) #305","url":"https://youtu.be/oOs2JQu8KEw"},{"title":"what is the py launcher? (intermediate) #306","url":"https://youtu.be/OGcVB5Lnxuc"},{"title":"the `uniq` command (+ some `sort`) (beginner - intermediate) #307","url":"https://youtu.be/FMdWB3m3lQ0"},{"title":"gradual typing python (and my approach) (beginner - intermediate) #308","url":"https://youtu.be/Rk-Y71P_9KE"},{"title":"importing non-module python files (intermediate) #309","url":"https://youtu.be/B5bToFdBxdw"},{"title":"the `cut` command (beginner - intermediate) #310","url":"https://youtu.be/l9T85dA6HDY"},{"title":"bash: special redirection (intermediate) #311","url":"https://youtu.be/3f8xjDr789Q"},{"title":"python typing: TYPE_CHECKING (intermediate) #312","url":"https://youtu.be/BPE4p8HNLFM"},{"title":"`else` is good, actually (beginner - intermediate) #313","url":"https://youtu.be/rClGwTEOK7M"},{"title":"Fussy Fox + flake8 vulnerability (intermediate) #314","url":"https://youtu.be/J7NMyb-LNX4"},{"title":"setting up required github PR checks (beginner - intermediate) #315","url":"https://youtu.be/LGY1jPUso5I"},{"title":"python has an optimizer? (intermediate) #316","url":"https://youtu.be/i8uNgEchr20"},{"title":"pytest: testing env variables (intermediate) #317","url":"https://youtu.be/N15X_pQHckQ"},{"title":"python easter eggs: this (beginner) #318","url":"https://youtu.be/mRYWLKcMfE4"},{"title":"git: main vs. origin/main (beginner - intermediate) #319","url":"https://youtu.be/f-92I_gxgjA"},{"title":"python warnings (beginner - intermediate) #320","url":"https://youtu.be/tZSEZ2WG5w8"},{"title":"docker beside docker (intermediate - advanced) #321","url":"https://youtu.be/pDysRzgLpgM"},{"title":"what is manylinux? (intermediate - advanced) #322","url":"https://youtu.be/80j-MRtHMek"},{"title":"pip install from git (beginner - intermediate) #323","url":"https://youtu.be/AQrskWh-F5E"},{"title":"python tempfile module (beginner - intermediate) #324","url":"https://youtu.be/-pmgCmWiOXo"},{"title":"virtualenv: --system-site-packages (intermediate) #325","url":"https://youtu.be/R6ObMPdixj0"},{"title":"python: what is repr? (beginner - intermediate) #326","url":"https://youtu.be/ei1q7m3zLfU"},{"title":"making an omni-executable (intermediate) #327","url":"https://youtu.be/r41t-t27V9c"},{"title":"assign vs. shallow vs. deep copy (beginner - intermediate) #328","url":"https://youtu.be/5Ufr51uPHEs"},{"title":"what is `source` and why? (beginner - intermediate) #329","url":"https://youtu.be/YE6ZDpRcdQU"},{"title":"mypy! this key exists I promise! (beginner - intermediate) #330","url":"https://youtu.be/HE0At4RrZIE"},{"title":"python: raise SystemExit (beginner - intermediate) #331","url":"https://youtu.be/ZbeSPc5wL0g"},{"title":"python easter eggs: barry_as_FLUFL (beginner - intermediate) #332","url":"https://youtu.be/0vRwC-F7FF0"},{"title":"don't name things \"..._new\" (beginner) #333","url":"https://youtu.be/d-ZkEg_fa8Q"},{"title":"what is \"idempotent\" in programming (beginner) #334","url":"https://youtu.be/o9THkT5ZPi4"},{"title":"interview tips: what language should I use? (beginner) #335","url":"https://youtu.be/BzhNtQMGu9E"},{"title":"porting code to python **ZERO** (intermediate - advanced) #336","url":"https://youtu.be/6vdg91-hPGY"},{"title":"interview tips: \"your story\" (beginner) #337","url":"https://youtu.be/YBYzpQOA9lg"},{"title":"a python extension in go (advanced) #338","url":"https://youtu.be/kCRU_ZTcxac"},{"title":"debugging a failed docker build (intermediate) #339","url":"https://youtu.be/hd1AKYGiWNk"},{"title":"the most important skill I've learned for software engineering (beginner) #340","url":"https://youtu.be/ritp4gAqNMI"},{"title":"\"graceful exit\" SIGTERM doesn't run finally / destructors ? (intermediate) #341","url":"https://youtu.be/VVS1xVjhj34"},{"title":"--argument prefix matching (beginner - intermediate) #342","url":"https://youtu.be/jrs0l3HJ-Ow"},{"title":"why does id(float(1)) == id(float(2)) ??? (intermediate) #343","url":"https://youtu.be/jjm10-Ug1aE"},{"title":"python: what is `__main__` / `__main__.py` ? (beginner - intermediate) #344","url":"https://youtu.be/FRxDmVVm0d0"},{"title":"range(len(...)) is almost always wrong in python (beginner) #345","url":"https://youtu.be/SwjBJhJiHvQ"},{"title":"what is umask? (intermediate) #346","url":"https://youtu.be/ZfDbUxH99n0"},{"title":"opinion: don't bother typing tests (intermediate) #347","url":"https://youtu.be/lGCU0j-otls"},{"title":"multiprocessing: slow things first! (intermediate) #348","url":"https://youtu.be/h4vmU2DJoQg"},{"title":"bash shortcut: curly expansion (intermediate) #349","url":"https://youtu.be/r2G0rbm7XJk"},{"title":"make your own timeout with alarm(...) (intermediate) #350","url":"https://youtu.be/vGWSdp9dyhI"},{"title":"pretty recursive diffs! (beginner - intermediate) #351","url":"https://youtu.be/vEUFrmrS7Hc"},{"title":"github wikis are repos! (beginner - intermediate) #352","url":"https://youtu.be/U18COUDlzu8"},{"title":"python: easy comparable classes with functools.total_ordering (intermediate) #353","url":"https://youtu.be/po7iMzrgJwA"},{"title":"git without `cd` (intermediate) #354","url":"https://youtu.be/fQ3-Y99Fzro"},{"title":"why remove the python GIL? (intermediate - advanced) #355","url":"https://youtu.be/6g79qGQo2-Q"},{"title":"python: unicode names and why they're bad (intermediate) #356","url":"https://youtu.be/OaEgGW19M5o"},{"title":"makefile basics (beginner - intermediate) #357","url":"https://youtu.be/20GC9mYoFGs"},{"title":"how to ace the coding interview (intermediate) #358","url":"https://youtu.be/eVNkO6g0fP8"},{"title":"python try except and best practices (beginner - intermediate) #359","url":"https://youtu.be/tIh42X0oGQc"},{"title":"sorting basics in python (beginner) #360","url":"https://youtu.be/fqzcnd_FstY"},{"title":"multiplying str / list / tuple and pitfalls (beginner - intermediate) #361","url":"https://youtu.be/ZFjV3M-xl_M"},{"title":"making your own custom git commands (intermediate) #362","url":"https://youtu.be/YwG8C0jPapE"},{"title":"python --version --version is not a typo! (beginner) #363","url":"https://youtu.be/DIfVUYKZZfs"},{"title":"python parameter defaults are (mutable) globals (intermediate) #364","url":"https://youtu.be/x7kRGQNUJ5I"},{"title":"python typing: explicit TypeAlias (PEP 613) (intermediate) #365","url":"https://youtu.be/50SqDLU-6RE"},{"title":"python: what is weakref? (intermediate - advanced) #366","url":"https://youtu.be/GGKerIMqHCk"},{"title":"pip: requirements vs. constraints (intermediate) #367","url":"https://youtu.be/SeT-Gj_frd0"},{"title":"python: NewType vs aliases (intermediate) #368","url":"https://youtu.be/9rRYeunzX8c"},{"title":"quick debugging tool: python -i (beginner) #369","url":"https://youtu.be/B4wkrdcc28A"},{"title":"what is the log4shell vulnerability? (beginner - intermediate) #370","url":"https://youtu.be/A5BLKKYIQ28"},{"title":"what are python wheels? (intermediate - advanced) #371","url":"https://youtu.be/4L0Jb3Ku81s"},{"title":"recursively import python modules (intermediate) #372","url":"https://youtu.be/t43zBsVcva0"},{"title":"git commit as someone else? (intermediate) #373","url":"https://youtu.be/bQ2OiciywyA"},{"title":"what is PROMPT_COMMAND? (+aactivator) (intermediate) #374","url":"https://youtu.be/GFLivv2QGI0"},{"title":"python: what is `__file__`? (beginner - intermediate) #375","url":"https://youtu.be/LVhxqOznPg0"},{"title":"job management: fg / bg / ^Z, & and more! (intermediate) #376","url":"https://youtu.be/lkQOQAc65ZA"},{"title":"for loops are just while loops in disguise (beginner - intermediate) #377","url":"https://youtu.be/Pq2aXxTKFv4"},{"title":"configuring git from environment vars (intermediate) #378","url":"https://youtu.be/RVZeTpVpwS4"},{"title":"mypy: possible cyclic definition fix (intermediate) #379","url":"https://youtu.be/O_CYtaDlOO4"},{"title":"git: what does \"fast forward\" mean? (intermediate) #380","url":"https://youtu.be/Vy0JIwQoI-E"},{"title":"pathlib is slow! falsey is tricky! (pytest bug) (intermediate - advanced) #381","url":"https://youtu.be/qiZyDLEJHh0"},{"title":"don't lru_cache methods! (intermediate) #382","url":"https://youtu.be/sVjtp6tGo0g"},{"title":"github: give people credit! (beginner - intermediate) #383","url":"https://youtu.be/_-qNX8EbVYI"},{"title":"dropping old python versions (intermediate) #384","url":"https://youtu.be/Oun5kXqENMk"},{"title":"useful interview data structures: heapq (intermediate) #385","url":"https://youtu.be/sRLuocdQfEw"},{"title":"decorator typing (PEP 612) (intermediate - advanced) #386","url":"https://youtu.be/fwZoxWyMGM8"},{"title":"python: what is 0-arg raise? (beginner) #387","url":"https://youtu.be/yj4z1N3_0sw"},{"title":"time vs. /bin/time (beginner - intermediate) #388","url":"https://youtu.be/hJ5LT4AGf3Y"},{"title":"what is an open redirect vulnerability? (intermediate) #389","url":"https://youtu.be/ziGvS7XLWDU"},{"title":"how an exit(n) bug introduced 100s of lint errors (intermediate) #390","url":"https://youtu.be/RVSw1BGNmq8"},{"title":"hiding big noisy git diffs (intermediate) #391","url":"https://youtu.be/zVlISs2fnzw"},{"title":"recovering from git mistakes w/ ORIG_HEAD (intermediate) #392","url":"https://youtu.be/yhtq_PSekdo"},{"title":"the `timeout` command (beginner - intermediate) #393","url":"https://youtu.be/QRywzsBftfc"},{"title":"python code formatter tutorial (intermediate - advanced) #394","url":"https://youtu.be/G1omxo5pphw"},{"title":"why did I run `cd $PWD` ??? (beginner - intermediate) #395","url":"https://youtu.be/7tSVb0d0fyA"},{"title":"my python project setup (+ all tools) (intermediate) #396","url":"https://youtu.be/q8DkatMZvUs"},{"title":"python can import from zips! (intermediate) #397","url":"https://youtu.be/XCMOeFN6zX4"},{"title":"from imports aren't faster! (beginner - intermediate) #398","url":"https://youtu.be/ZWCyNz0fUsc"},{"title":"what is a .so / .dll / shared object? (intermediate - advanced) #399","url":"https://youtu.be/PDkKz3zQVls"},{"title":"what is inlining? and how does it make code faster? (intermediate) #400","url":"https://youtu.be/ct-eBvjsPck"},{"title":"finding and fixing test pollution! (intermediate) #401","url":"https://youtu.be/FRteianaPMo"},{"title":"how to modify a list while iterating (intermediate) #402","url":"https://youtu.be/JXis-BKRDFY"},{"title":"fix flaky tests with detect-test-pollution! (intermediate) #403","url":"https://youtu.be/w5O4zTusyJ0"},{"title":"a python curses wordle clone from scratch! (intermediate - advanced) #404","url":"https://youtu.be/dViRI1iovoc"},{"title":"why does `cd --` go to ~ ? (intermediate) #405","url":"https://youtu.be/vrIsG0Rw5xY"},{"title":"the `split` command! (beginner - intermediate) #406","url":"https://youtu.be/Ox95VqtRC28"},{"title":"don't run `python my/script.py`! (beginner - intermediate) #407","url":"https://youtu.be/hgCVIa5qQhM"},{"title":"what's that unicode character\u203d (beginner - intermediate) #408","url":"https://youtu.be/W60RS8PMP78"},{"title":"what is the `shred` command? (beginner - intermediate) #409","url":"https://youtu.be/2yt5u5JanwA"},{"title":"getting a python stacktrace from gdb! (intermediate - advanced) #410","url":"https://youtu.be/guni3oUdTIs"},{"title":"the fastest python startup with `python -S` (intermediate) #411","url":"https://youtu.be/lCwz4S2vCH8"},{"title":"what is immutability? (beginner - intermediate) #412","url":"https://youtu.be/OjLxyRyzzuY"},{"title":"what is rpath? (+relocatability) (intermediate - advanced) #413","url":"https://youtu.be/01fnuhjMwc0"},{"title":"`pip install pkg\u276e1.999` ? (intermediate) #414","url":"https://youtu.be/JzEAYIPdFX4"},{"title":"10 protips I wish I knew sooner as a software dev (beginner) #415","url":"https://youtu.be/_wcVyhfyaeE"},{"title":"embedding images in github (beginner - intermediate) #416","url":"https://youtu.be/8088ORqS3uY"},{"title":"how I sped up python by 20ms (intermediate) #417","url":"https://youtu.be/kI9WjDNxRJM"},{"title":"typing Self (PEP 673) (intermediate) #418","url":"https://youtu.be/ThATVufmTz8"},{"title":"you don't need .git! (beginner) #419","url":"https://youtu.be/BW7z9TO0Fqg"},{"title":"I don't need `__init__.py`? PEP 420 and namespace packages (intermediate) #420","url":"https://youtu.be/2Xvb79hOUdM"},{"title":"repr(...) doesn't work the way you expect (intermediate - advanced) #421","url":"https://youtu.be/e3bqdxqLvH4"},{"title":"DVD screensaver in python curses (intermediate) #422","url":"https://youtu.be/mVwAehkeBkI"},{"title":"double underscored names are NOT \"more private\" (beginner - intermediate) #423","url":"https://youtu.be/IVqLW1NWtPc"},{"title":"FizzBuzz... but in sqlite? (intermediate) #424","url":"https://youtu.be/UdhcvNSFRgU"},{"title":"\"z3\" is actual magic (intermediate) #425","url":"https://youtu.be/C9eXcmWWEyA"},{"title":"bash quoting is really not that difficult! (beginner - intermediate) #426","url":"https://youtu.be/VIUoHnFwEH4"},{"title":"I made pip startup 25% faster (intermediate) #427","url":"https://youtu.be/GmK1So7F0ZQ"},{"title":"how to use python backports + setup.py (intermediate) #428","url":"https://youtu.be/B94tqnXeFnQ"},{"title":"setting up an ubuntu jammy (22.04) development machine (beginner) #429","url":"https://youtu.be/tSUlg3yN4-k"},{"title":"python Generics (intermediate) #430","url":"https://youtu.be/LcfxUU1A-RQ"},{"title":"babi+ast helped me not break sentry! (intermediate) #431","url":"https://youtu.be/Fch_lt7ZXUw"},{"title":"python comprehensions leak scope again (intermediate) #432","url":"https://youtu.be/ONy8xXbdcUc"},{"title":"python variadic generics (PEP 646) (intermediate - advanced) #433","url":"https://youtu.be/hAj3nGzeSiQ"},{"title":"top 10 new things in python 3.11 (beginner - advanced) #434","url":"https://youtu.be/w2rcZIG1Uxk"},{"title":"assert_never / assert_type **CORRECTION** (intermediate) #435","url":"https://youtu.be/jN_a02Rj8Gg"},{"title":"a git workflow for *only my branches* (intermediate) #436","url":"https://youtu.be/GKBq5Xo_B6I"},{"title":"regex lookahead / lookbehind (intermediate) #437","url":"https://youtu.be/AjTy0DBK-18"},{"title":"are your python tests even running? (intermediate) #438","url":"https://youtu.be/0nPS_vVmhp0"},{"title":"python TypeGuard (PEP 647) (intermediate) #439","url":"https://youtu.be/Zv2K2AVy5lA"},{"title":"how I fixed a 9GB memory leak in cargo (rust) (intermediate) #440","url":"https://youtu.be/uxJhAXdBlbc"},{"title":"dealing with merge conflicts (beginner - intermediate) #441","url":"https://youtu.be/vQY309QQfuQ"},{"title":"what is an --orphan git branch? (intermediate) #442","url":"https://youtu.be/XLuD7KJLMwE"},{"title":"narrow python? len('\ud83d\ude43') == 2??? (intermediate) #443","url":"https://youtu.be/ht3ezs3O9Yo"},{"title":"what is gbp? (intermediate - advanced) #444","url":"https://youtu.be/Nu4TIETrktY"},{"title":"argparse: boolean option pitfall (beginner - intermediate) #445","url":"https://youtu.be/KuwR0GPylqE"},{"title":"cd is not an executable (beginner) #446","url":"https://youtu.be/1Ld5qv4-Pbo"},{"title":"what is a universal2 wheel? (intermediate) #447","url":"https://youtu.be/utdohIoR9ZM"},{"title":"docker: fast CI rebuilds with --cache-from (intermediate) #448","url":"https://youtu.be/77j6JFBTmTc"},{"title":"debugging a real issue and googling (beginner - intermediate) #449","url":"https://youtu.be/IQsat6EA0-M"},{"title":"regex backreferences (intermediate) #450","url":"https://youtu.be/gPMpRw1xUA8"},{"title":"why I banned python's assertRaises (intermediate) #451","url":"https://youtu.be/Q_HMOBD09ts"},{"title":"safer github personal access tokens (intermediate) #452","url":"https://youtu.be/GsjD5tZWqmM"},{"title":"bash strict mode gotcha (intermediate) #453","url":"https://youtu.be/oqq5k8XsrSs"},{"title":"javascript sucks at unicode (intermediate) #454","url":"https://youtu.be/PTJAvcpBdWo"},{"title":"pip freezing (==) isn't safe (intermediate) #455","url":"https://youtu.be/oGpyupM52IQ"},{"title":"python regex dynamic replacements (intermediate) #456","url":"https://youtu.be/o_PD7AAbs4U"},{"title":"how I made my import sorter 7x faster (intermediate) #457","url":"https://youtu.be/Q3menOSxRC4"},{"title":"what release was this fixed? (workflow) (intermediate) #458","url":"https://youtu.be/7f3UdjuQYtw"},{"title":"safely stealing github secrets with cryptography (intermediate) #459","url":"https://youtu.be/qjnEZ-3uYjc"},{"title":"how I sped up flake8 by 20% (intermediate) #460","url":"https://youtu.be/pvSk8pLLQrE"},{"title":"github's semi-secret by-id apis (intermediate) #461","url":"https://youtu.be/_XkkiwoiFU0"},{"title":"what is a natural sort? (beginner - intermediate) #462","url":"https://youtu.be/RaE66ycBRE0"},{"title":"relocatable macos binaries (advanced) #463","url":"https://youtu.be/OL7JTiJs-d8"},{"title":"what is nullcontext? (conditional contexts, pytest) (intermediate) #464","url":"https://youtu.be/XcyVxmkrKXk"},{"title":"why do I use azure pipelines instead of github actions? (intermediate) #465","url":"https://youtu.be/NEl4JfZ4of8"},{"title":"how is list append possibly O(1)? (beginner - intermediate) #466","url":"https://youtu.be/WIuITZgGYG8"},{"title":"what is musllinux (PEP 656) (intermediate) #467","url":"https://youtu.be/QAbveJB5kk8"},{"title":"easy try rust as a python dev (intermediate) #468","url":"https://youtu.be/ZGlEIetFNf0"},{"title":"why can't I signal a MagicMock() ? (intermediate) #469","url":"https://youtu.be/nJwc7iqyQwU"},{"title":"why does python think -1**0 is -1 ? (intermediate) #470","url":"https://youtu.be/T49G4WwmvnA"},{"title":"how do from imports keep their globals? (intermediate) #471","url":"https://youtu.be/FSPyCD5P76A"},{"title":"python int DoS vulnerability (CVE 2020-10735) (beginner - intermediate) #472","url":"https://youtu.be/lIniq12cMK0"},{"title":"docker multi-arch images (intermediate) #473","url":"https://youtu.be/G6wCo1WBPTo"},{"title":"python: don't use urlparse! (beginner - intermediate) #474","url":"https://youtu.be/ABJvdsIANds"},{"title":"why does python report macos 10.16 ??? (intermediate) #475","url":"https://youtu.be/Kg8s2YV-aFE"},{"title":"the docker registry api (advanced) #476","url":"https://youtu.be/Ce9var-Fty8"},{"title":"urllib3[secure]'s clever deprecation trick (intermediate) #477","url":"https://youtu.be/_jUXdX8e9Wg"},{"title":"functools.wraps for classes (intermediate) #478","url":"https://youtu.be/rbEqoOIvFko"},{"title":"avoiding shell injection in github actions (intermediate) #479","url":"https://youtu.be/7w0Ns8C1shQ"},{"title":"what is coverage? (intermediate) #480","url":"https://youtu.be/eQM3TOjsM_Q"},{"title":"don't make images of code / text! (beginner) -- #481","url":"https://youtu.be/svlsnZFWWDE"},{"title":"what is \"short circuiting\"? (beginner - intermediate) #482","url":"https://youtu.be/tsrlQ8v4UaM"},{"title":"what is the \"unraisable\" hook (intermediate) #483","url":"https://youtu.be/G4Lya0KVG1E"},{"title":"how does swapping work in python? (beginner - intermediate) #484","url":"https://youtu.be/cMiqfkpMh08"},{"title":"hiding your email on github (beginner) #485","url":"https://youtu.be/O3e19cwX6uY"},{"title":"python warnings defaults suck (intermediate) #486","url":"https://youtu.be/CtFdXBEwYfk"},{"title":"pytest: everything you need to know about fixtures (intermediate) #487","url":"https://youtu.be/ScEQRKwUePI"},{"title":"python os / platform-specific deps (PEP 508) (intermediate) #488","url":"https://youtu.be/cNQhpprVyn0"},{"title":"I don't use pytest-cov (intermediate) #489","url":"https://youtu.be/sPgvHGkmd0U"},{"title":"RegCPython: a 10% faster python for free? (intermediate - advanced) #490","url":"https://youtu.be/MQ2Lfj2hAdk"},{"title":"avoid notification spam with draft PRs! (beginner) #491","url":"https://youtu.be/LOLpOTYzknI"},{"title":"multiprocessing: fork() vs. spawn() (intermediate) #492","url":"https://youtu.be/hzBtsDPJ1dM"},{"title":"this clever hack let me kill py (intermediate) #493","url":"https://youtu.be/aZS3_-y6vsg"},{"title":"do this first before opening an issue (beginner) #494","url":"https://youtu.be/cGYVGVsXNFM"},{"title":"securing python with audit hooks (PEP 578) (intermediate) #495","url":"https://youtu.be/sIibadhDqaw"},{"title":"python sucks at copy-on-write (and one fix!) (intermediate) #496","url":"https://youtu.be/sdmcCQ7Em04"},{"title":"git is just a key value store? (advanced) #497","url":"https://youtu.be/HvA-WkXqlDI"},{"title":"refcount ONE BILLION? (immortal objects, PEP 683) (advanced) #498","url":"https://youtu.be/i5ZaVC4sEZA"},{"title":"partial git commits (intermediate) #499","url":"https://youtu.be/UJ5fpaeZWsI"},{"title":"sqlite is my favorite database (beginner - intermediate) #500","url":"https://youtu.be/jH39c5-y6kg"},{"title":"virtualenv isn't reproducible! (by default) (intermediate) #501","url":"https://youtu.be/mgJiCnqzYlI"},{"title":"--extra-index-url is unsafe! (intermediate) #502","url":"https://youtu.be/fWquXVcTKjU"},{"title":"docker: multi-stage builds (intermediate) #503","url":"https://youtu.be/OVYNUg0aODw"},{"title":"git: the several ways to \"--sign\" (intermediate) #504","url":"https://youtu.be/6hu3cbBhHqQ"},{"title":"why I use the colon (:) command (intermediate) #505","url":"https://youtu.be/onkNf1AKSgg"},{"title":"how should I organize my project? (beginner) #506","url":"https://youtu.be/QGAuwlQ9Gxc"},{"title":"don't git clone over https! (beginner) #507","url":"https://youtu.be/5o9ltH6YmtM"},{"title":"don't use cat! (intermediate) #508","url":"https://youtu.be/vWMiBVkdJjA"},{"title":"module level __getattr__ (intermediate) #509","url":"https://youtu.be/rRwJdMY2f4g"},{"title":"why are some things shell builtins? (intermediate) #510","url":"https://youtu.be/p_KKDHJhi7A"},{"title":"python: zip and unzip (intermediate) #511","url":"https://youtu.be/hOiRkFBxtpo"},{"title":"I've moved off of azure pipelines for CI (intermediate) #512","url":"https://youtu.be/n39uvwdW5ek"},{"title":"swapping without a third variable (intermediate) #513","url":"https://youtu.be/NLwJI6DFF4U"},{"title":"when should I pin deps: never and always! (intermediate) #514","url":"https://youtu.be/WSVFw-3ssXM"},{"title":"make a github commit using only the api! (intermediate) #515","url":"https://youtu.be/nwHqXtk6LHA"},{"title":"a simpler `try` / `except` (and why maybe shouldn't) (beginner - intermediate) #516","url":"https://youtu.be/MZAJ8qnC7mk"},{"title":"you're probably doing case-insensitive wrong (intermediate) #517","url":"https://youtu.be/U-Zq8bURfKc"},{"title":"getting started with pytest (beginner - intermediate) #518","url":"https://youtu.be/mzlH8lp4ISA"},{"title":"python descriptors! (advanced) #519","url":"https://youtu.be/vBys0SwYvCQ"},{"title":"don't use short options in scripts (beginner - intermediate) #520","url":"https://youtu.be/OKqWy2dM2Jo"},{"title":"how to escape this VERY MEAN prank (beginner) #521","url":"https://youtu.be/ZjSWRGzWo88"},{"title":"how do virtualenvs actually work (advanced) #522","url":"https://youtu.be/XFqDHPYfTwE"},{"title":"python's optimization mode is mostly useless (intermediate) #523","url":"https://youtu.be/6kMGphTUOUk"},{"title":"merge queues (intermediate) #524","url":"https://youtu.be/3vIGZ6_6nzo"},{"title":"all string syntaxes (beginner) #525","url":"https://youtu.be/4Y4VrKa1lVs"},{"title":"my first rust open source PR (beginner - intermediate) #526","url":"https://youtu.be/kIaOOYlbPWI"},{"title":"tuples! (and their syntax quirks) (beginner) #527","url":"https://youtu.be/J3-tL6OnFWA"},{"title":"how I use git blame (beginner - intermediate) #528","url":"https://youtu.be/8uuueHkWy-E"},{"title":"positional / named only without `*` or `/`? (intermediate) #529","url":"https://youtu.be/DatCgcsF6B8"},{"title":"why git's --intent-to-add ? (intermediate) #530","url":"https://youtu.be/GEYfAMpA-38"},{"title":"rerunning github checks (beginner - intermediate) #531","url":"https://youtu.be/OYh22O1B5D0"},{"title":"shell aliases and bypassing them? (beginner - intermediate) #532","url":"https://youtu.be/6okEabkL_q0"},{"title":"how I made pre-commit's github actions 3x faster (intermediate) #533","url":"https://youtu.be/5K8k-bSDnU0"},{"title":"don't use localhost (intermediate) #534","url":"https://youtu.be/98SYTvNw1kw"},{"title":"what is a \"canary\" deploy? (beginner - intermediate) #535","url":"https://youtu.be/W1uJCzqH0Lk"},{"title":"avoiding noisy git matches (beginner - intermediate) #536","url":"https://youtu.be/zoCuIdZJT1s"},{"title":"docker pull by sha256 digest (advanced) #537","url":"https://youtu.be/AiAU7wnPCrQ"},{"title":"weird python identity quirk? (intermediate) #538","url":"https://youtu.be/w4GasVbjIbA"},{"title":"when `git add .` doesn't work (intermediate) #539","url":"https://youtu.be/N0TFxl7A5Hw"},{"title":"I made every sentry page 300ms faster (intermediate) #540","url":"https://youtu.be/FY7EQwT7QKU"},{"title":"docker: don't mount files! (mount dirs instead) (intermediate) #541","url":"https://youtu.be/oXfL0UCO9F4"},{"title":"you can't always trust argv[0] (intermediate) #542","url":"https://youtu.be/qwpfSL-AcFQ"},{"title":"shell: use this instead of `cd` (intermediate) #543","url":"https://youtu.be/eF6qpdIY7Ko"},{"title":"docker: secrets at build time! (intermediate) #544","url":"https://youtu.be/aK6sJDOn2Hc"},{"title":"every Dockerfile should have this line! (intermediate) #545","url":"https://youtu.be/kL0q-7alfQA"},{"title":"python's \"soft\" keywords (intermediate) #546","url":"https://youtu.be/Rv3NYDOLpkM"},{"title":"shell vs environment variables (and env, export, etc.) (intermediate) #547","url":"https://youtu.be/h36Xc38SDHg"},{"title":"python 3.12 release highlights (beginner - advanced) #548","url":"https://youtu.be/IV8OZY4194U"},{"title":"how does .exe magic work? (PATHEXT) (intermediate) #549","url":"https://youtu.be/6QiLrVaG0qI"},{"title":"python is removing the GIL! (PEP 703) (advanced) #550","url":"https://youtu.be/OC2gnyfmwL8"},{"title":"tuple syntax doesn't have parens (beginner - intermediate) #551","url":"https://youtu.be/EDGJ2TMuppM"},{"title":"what is `Symbol` in js (intermediate) #552","url":"https://youtu.be/gZBQ8LIR6D4"},{"title":"debugging a sentry test pollution! (intermediate) #553","url":"https://youtu.be/YEIeKdBmuUY"},{"title":"stopping xargs early (intermediate) #554","url":"https://youtu.be/-J36ki4rU_Q"},{"title":"docker: connecting to localhost outside the container (intermediate) #555","url":"https://youtu.be/NZGu-9KQVsE"},{"title":"the system design interview (intermediate - advanced) #556","url":"https://youtu.be/SNyDKw4DFPQ"},{"title":"don't delete from pypi! (yank instead) (intermediate) #557","url":"https://youtu.be/lUFA_WklFII"},{"title":"git: --first-parent (intermediate) #558","url":"https://youtu.be/nsSj7snqODM"},{"title":"I don't use backslashes (with one exception) (beginner - intermediate) #559","url":"https://youtu.be/Y_gfBcjS5EY"},{"title":"what is a BOM (byte-order-marker) (intermediate) #560","url":"https://youtu.be/OrtNMystCgM"},{"title":"NEW generic / alias syntax for python 3.12 (PEP 695) (intermediate) #561","url":"https://youtu.be/YaDYUQ5mD5Q"},{"title":"new 3.12 f-strings syntax! (intermediate) #562","url":"https://youtu.be/BkexKFfrAeo"},{"title":"pesky reDOS and python 3.11 (intermediate) #563","url":"https://youtu.be/ECbls57_3jE"},{"title":"prefer tuples to lists! (intermediate) #564","url":"https://youtu.be/8nvfOjvOF5w"},{"title":"git: inline diffs with --word-diff! (intermediate) #565","url":"https://youtu.be/Wn3bJUzvy5I"},{"title":"ONE TERABYTE of RAM saved with a single line of code (advanced) #566","url":"https://youtu.be/Hgw_RlCaIds"},{"title":"using memray to debug (and fix) a memory leak in krb5! (advanced) #567","url":"https://youtu.be/bw5AHdZA7e4"},{"title":"py-spy saved our python 3.11 rollout (intermediate) #568","url":"https://youtu.be/p8s2fzqA07s"},{"title":"using git bisect to find a bug in nodejs (intermediate) #569","url":"https://youtu.be/cSd5GGrj2VA"}]}]} \ No newline at end of file