Drafts

Draft and unpublished posts

0 posts simple view

Automatic Conda Environments

I have automated my process to create virtual environments in my python projects, here is how I did it. I’ve really been digging my new tmux session management setup. Now I have leveled it up by adding direnv to my workflow. It will execute a shell script whenever I cd into a directory. One thing I wanted to add to this was, automatic activation of python environments whenever I cd into a directory, or create a new environment if one does not exist. https://waylonwalker.com/tmux-nav-2021/ Direnv # [1] You can learn more about direnv [2] on their website. There are several libraries that seem to do a similar concept, run a bash script when I cd into a directory direnv is the one that I chose to use, but you can likely do the same concept in other ones. Installation # [3] direnv is in many package repos, or can be installed from binary builds with a one liner. See their installation [4] instructions for more information. curl -sfL https://direnv.net/install.sh | bash .envrc # [...
3 min read

How I Review Pipeline Code

I have started doing more regular PR’s on my teams Kedro [1] pipelines. I generally take a two phase approach to the review in order to give the reviewee both quick and detailed feedback. What is Kedro [2] initial scan (Phase1) # [3] - passing ci - Variable Names - Antipatterns - No commented out code - Docsttrings generally make sense Phase1 is typically a quick scan over the PR right within the PR window in my browser. Passing CI # [4] - flake8 - black - isort - interrogate - pytest - build The very first thing that needs to happen is automated CI. We use things like flake8, black, isort, interrogate to ensure that everyone follows generic style guides like pep8. The project does a build within the PR, but no deploy. Variable Names # [5] I strugle really hard to not impose my own opinion into the PR at this point, and sometimes really want to change a lot of variable names. Typically I make sure they don’t grow longer than necessary, too short, misspelled, or inc...
2 min read

Sample

title subtitle # [1] sub-subtitle # [2] sub-sub-subtitle # [3] sub-sub-sub-subtitle sub-sub-sub-sub-subtitle Glossary # [4] There is a glossary item in vibe coding [5] here and clippy [6]-no-simpy/" class="glossary-term" title=""Clippy no Simpy" is a term coined by Louis Rossmann, when people try to stand up for companies doing scummy things like charging your for features that you...">clippy no simpy. Now you don’t have to manually link to how to create a virtual environment [7] every time you mention virtual environments in any post that needs a virtual environment. Paragraph # [8] Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor Hover me incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt...
4 min read

🐍 Pluggable Architecture with Python

pytest has open sourced their amazing plugin framework pluggy, it allows library authors to give their users a way to modify the libaries behavior without needing to submit a change that may not make sense to the entire library. Previous Experience # [1] My experience so far as a plugin user, and plugin author has been great. Building and using plugins are incredibly intuitive. I wanted to dive a bit deeper and see how they are implemented inside of a library and its a bit of a mind bend the first time you try to do it. Plugins vs. Hooks # [2] A hook is a single function that has a specific place that it is ran by the PluginManager. A Plugin is a collection of one or more hooks. Layers # [3] - library author - plugin author - end user Using a plugin # [4] For a plugin to be registered is must be registered by the PluginManager which is implemented by the library author. It is the job of the library author to determine what plugins are actively registered or disabled. Ther...
4 min read

Create Og Image Covers Using Python

There are so many tutorials out there for creating OG [1] images with nodejs or puppeteer, but I have yet to see many using python. PIL # [2] Template # [3] Text # [4] Overlays # [5] References: [1]: /og/ [2]: #pil [3]: #template [4]: #text [5]: #overlays
1 min read

⚙ How Python Tools Are Configured

There are various ways to configure python tools, config files, code, or environment variables. Let’s look at a few projects that allow users to configure them through the use of config files and how they do it. Motivation # [1] This will not include how they are implemented, I’ve looked at a few and its not simple. This will focus on where config is placed and the order in which duplicates are resolved. The motivation of this article is to serve as a bit of a reference guide for those who may want to create their own package that needs configuration. Flake8 # [2] Global # [3] User settings can exist in the users ~/.config/flake8 file to configure how flake8 runs on their machine. - ~/.config/flake8 Per-Project # [4] Only One project config file will be considered, but allows for several options. These files all use the ini format and must have a [flake8] section header to be consideered. Selection of the config file can also be overridden by the --config cli option. An e...
5 min read

Kedro Dependency Management

Docs # [1] https://kedro.readthedocs.io/en/stable/04_kedro_project_setup/01_dependencies.html?highlight=install pip-tools # [2] pip-compile # [3] requirements # [4] - requirements.in - requirements.txt References: [1]: #docs [2]: #pip-tools [3]: #pip-compile [4]: #requirements

Blog Data With Python

Generating an api for a blog is much simpler than one might expect with python. Markdown # [1] Frontmatter # [2] Fill in the blanks # [3] fix missing data Fast # [4] References: [1]: #markdown [2]: #frontmatter [3]: #fill-in-the-blanks [4]: #fast

Todo

Overrated underrated command line applications - Ship More - Ship Less - get feedback and apply feedback, build the right things kedro YouTube series # [1] Get started on daily kedro shorts, these are indended to be short clips that people can watch a playlist and learn about kedro concepts at their own pace. This is meant to be low barrier to entry for me to create. Like the tmux series, I hope to make a sub three minute video within one or two takes, no edits, all straight from obs. written # [2] - how I kedro 8/16 - what is kedro 8/17 - kedro new 8/18 - three ways to create a kedro environment 8/19 - git [3] init 8/20 - kedro install 8/21 - kedro pipeline create 8/22 staging # [4] - making your first nodes in kedro 8/23 - kedro run 8/24 - kedro catalog create 8/25 - add new dependencies 8/26 - listing things from the kedro cli 8/27 - Storing catalog entries 8/30 - Comprehensive nodes - modular piplines 8/29 - kedro pipeline package - kedro pipeline pull - ...
2 min read

Ipython Ninjitsu

- ?docstring - ??sourcecode - %run - %debug - %autoreload - %history - autoformat - %reset - !shell commands ?docstring # [1] Stop going to google everytime your stuck and stay in your workflow. The ipython ? is a superhero for productivity and staying on task. from kedro.pipeline import Pipeline Pipeline? Init signature: Pipeline( nodes: Iterable[Union[kedro.pipeline.node.Node, ForwardRef('Pipeline')]], *, tags: Union[str, Iterable[str]] = None, ) Docstring: A ``Pipeline`` defined as a collection of ``Node`` objects. This class treats nodes as part of a graph representation and provides inputs, outputs and execution order. Init docstring: Initialise ``Pipeline`` with a list of ``Node`` instances. Args: nodes: The iterable of nodes the ``Pipeline`` will be made of. If you provide pipelines among the list of nodes, those pipelines will be expanded and all their nodes will become part of this new pipeline. tags: Optional set of tags to be applied to all the pipeli...

Compare Directories In Bash

Today I needed to check for articles that used the same slug from two directories, bash made it super simple.

1 min

Testing Data Pipelines

Lint/Format/Doc - black - flake8 - interrogate - mypy Pipeline Assertions - pipeline constructs - pipeline as expected nodes - pipeline has minimum nodes - test minimum tags - test alternate tags Catalog Assertions - test catalog follows naming structure - Node Tests - test function does the correct operations on test data Great Expectations

Kedro Factory

Dynamically generate kedro pipelines with yaml or script Inspiration - dag-factory [1] References: [1]: https://github.com/ajbosco/dag-factory
1 min read

rebrand

- simple landing page - https://swyx.io - joel on software [1] - recent - reading lists - More from waylon just above footer - 4x2 grid - link strategy - latest post - next/prev - similar tags - search in nav - tag stickers - simple cards? - bookmarks? - nav style stinks - single post template - flat routes no need to /blog /notes - post types - 🌳 full - 🌱 budding - 🖊 Note - 💻 hot tip - usage of tags - MDX - stories - slides - ⚠ - ❌ - ✔ - kedro viz - charts - inlink component - https://joshwcomeau.com/ - auto-card oneline links - meta posts - about - uses - how site is built - how to search - stories TODO # [2] - review package.json - update package.json Done # [3] - ahrefs - fix canonical urls - fix broken inlinks - convert to one post template - References: [1]: https://www.joelonsoftware.com/ [2]: #todo [3]: #done
1 min read

Avoid Nesting Loops in Python

Nesting loops inside of each other in python makes for much harder code to understand, it takes more brain power to understand, and is thus more error prone than if its avoidable. One issue with this complexity is that toy examples may make sense, but most real example will grow and become more deeply nested over time. Avoiding this complexity from the start can help simplify the project in the future. setup # [1] Lets take a pretty simple example where we are using a ficticious library to get some sales data for our transportation company. The api allows us to fetch teh sales data for one class of vehicle and one region at a time. import pandas as pd from datastore import get_sales # ficticious library cars = ['sedan', 'coupe', 'hatchback'] regions = ['US', 'CA', 'MX'] ❌ Nesting Loops # [2] We have setup to fetch our data with two lists that represent the vehicles and regions that we want to analyze. We know that we need to make a call to get_sales for every vehicle and regio...
2 min read

List the latest files to change in a git repo

while read file; do echo $(git log --pretty=format:%ad -n 1 --date=raw -- $file) $file; done < <(git ls-tree -r --name-only HEAD | grep static/stories) | sort -r | head -n 3 | cut -d " " -f 3

Kedro Basics

Learn Kedro in 5 days Day 0 Setup # [1] - vm - install - python - editor Day 1 # [2] - kedro new - kedro viz Day 2 # [3] - catalog - filter catalog - load data - fsspec Day 3 # [4] - pipeline - nodes Day 4 # [5] - filter pipeline - run partial pipeline Day 5 # [6] - kedro docker - GitHub Actions Advanced Kedro # [7] - hooks - custom datasets - modular pipelines References: [1]: #day-0-setup [2]: #day-1 [3]: #day-2 [4]: #day-3 [5]: #day-4 [6]: #day-5 [7]: #advanced-kedro

025.md

setup

1 min

026.md

setup

1 min