Archive

All published posts

2620 posts latest post 2026-09-24 simple view
Publishing rhythm
Sep 2026 | 29 posts

Building Rich a Dev Server

Draft Post I’ve really been digging @willmcgugan ’s rich library for creating TUI like interfaces in python. I’ve only recently started to take full advantage of it. Dev Server # I am working on a project in which I want to have a dev server running continuously in the background. I really like dev servers theat automatically chooose an unused port and list out the running pid so that I can kill it if I need to. automatic port number auto-restart display ( port, pid, uptime) finding the port # I am very novice at best when it comes to sockets, the following function came from searching StackOverflow for how to tell if a port is in use. I recursively check if a port is being used, if it is I increment by one until I find an unused port to return. The Dev Server # I am going super basic here and just running. It works for what I need it for, it hosts my files for the browser to display, and if I try a route without an index. html it gives me a decent file list. Optionally if you wanted a…
The work on maggieappleton.com by MaggieAppleton. ⚠️ Now retired. My previous, poorly constructed digital garden built with Gatsby and MDX. Updated garden here: https://github.com/MaggieAppleton/maggieappleton.com-V2

Site Down During Build

Recently I noticed a new netlify site of mine was down while I was checking to see if new content was live. Later found out this was consistent after each and every push the site would go gown as soon as I hit push, and would not come back until the build finished. Is this normal? # Do other Netlify sites go down during build??? Short Answer NO. All of my google fu lead me to believe I was alone and none of my other sites do this. Digging into my build # My deploy script ends with the following. After resetting keys and watching it build half a dozen times I determined that everything was working as normal here. Opening the Nelify Console # After poking at the netlify console for hours I realized that the issue was that netlify was still auto-deploying from a no longer existing directory and would cause 404’s for every page. During build, then my build from GitHub Actions would deploy with the netlify cli. Netlify really likes to put a lot of warnings up when you are not deploying from…

Kedro pipeline_registry.py

With the realease of came a new module in the project template. Here are some notes that I learned while playing with this new module. migrating to # create a file create a function in that mirrors the register_pipelines method from your module do not bring the decorator remove register_pipelines method on your class You should now have something that looks like this in your. pipeline_registry only works in Conflict Resolution # What happens If I register pipelines in both places I was not able to find any official documentation on how conflict resolution worked so I stepped into a project and added to both my and file. I noticed that it would pick up pipelines from both modules, but pipelines from always take precedence. The entire duplicate pipeline will be over written by the one from. kedro automatically merges pipelines from both hooks.py takes precedence Ready to update # In my experience there were no issues upgrading from to. I would reccomend only having one so decide to migra…
Check out smitajit and their project bufutils.vim. bufutils.vim provide utilities to open, close, refresh, move, resize, zoom buffers faster
Just starred Minyus by Minyus. It’s an exciting project with a lot to offer. No description available.
I came across vim.wasm from rhysd, and it’s packed with great features and ideas. Vim editor ported to WebAssembly
I recently discovered markserv by markserv, and it’s truly impressive. 🏁 serve markdown as html (GitHub style), index directories, live-reload as you edit
Check out dirsync by tkhyn. It’s a well-crafted project with great potential. No description available.

Stand With Your Team

People who are quick to toss team members under a bus are not well trusted or highly thought of and it will lead to some toxic team dynamics. Building Steam # While collaborating on any project there are going to be decisions made that aren’t necessarily your favorite, during a summer internship my mentor made some decisions that I was not on board with, but I accepted his wisdom and moved forward with little push back. Full Spead Ahead # During a review, leadership showed interest in the option that I wanted to go towards. I was quick to jump up and say I told you so right then and there and pitch reasons why my idea was so much better. The Aftermath # I walked out so proud that leadership recognized my idea, but I will never forget the look on my teammate’s face and what he told me after the meeting. “Wow quick to throw me under the bus in front of everyone 😢”. I ~ my teammate Realizing what Happened # It was at this moment that I threw my mentor, a good friend in front of a bus that…

Blogging For Me

I create this blog with one person in mind, me. There are others like me # This is not completely selfish, as there are likely many others out there that think similarly to me. Everyone comes from different backgrounds and varying levels of experience. In no way do you need to be an expert to create content others will benefit from. Accurate # I am as accurate as possible. I don’t know everything, and If I waited for that to happen I would never post, or write at such a high level no one else (including me) would ever want to read. Generally I know that I am directionally accurate for most of the article. In fact there is often a part of the article that I don’t feel the best about. It may have been some code that could have been better. I try to point these things out. Often when I am and point out where I know there is improvement to be had I get the most welcoming comments, “that was just fine how you did that”, or “I tried that myself and saw a better abstraction. Create the articl…
3 min read
I recently discovered twint by twintproject, and it’s truly impressive. An advanced Twitter scraping & OSINT tool written in Python that doesn’t use Twitter’s API, allowing you to scrape a user’s followers, following, Tweets and more while evading most API limitations.
to-mc has done a fantastic job with checksumdir. Highly recommend taking a look. Simple package to compute a single deterministic hash of the file contents of a directory.

Minimal Kedro Pipeline

How small can a minimum kedro pipeline ready to package be? I made one within 4 files that you can pip install. It’s only a total of 35 lines of python, 8 in and 27 in. 📝 Note this is only a composable pipeline, not a full project, it does not contain a catalog or runner. Minimal Kedro Pipeline # I have everything for this post hosted in this gihub repo, you can fork it, clone it, or just follow along. Installation # Caveats # This repo represents the minimal amount of structure to build a kedro pipeline that can be shared across projects. Its installable, and drops right into your or modules. It is not a runnable pipeline. At this point I think the config loader requires to have a logging config file. This is a sharable pipeline that can be used across many different projects. Usage # Implemantation # This builds on another post that I made about creating the minimal python package. I am not sure if it should be called a package, it’s a module, but what do you call it after you build…

Markdown Cli

This is a post that may be a work in progress for awhile, Its a collections of thoughts on managing my blog, but could be translated into anythiung that is just a collection of markdown. Listing things # posts tags draft posts data # frontmatter filepath content template html render content # Markdown.Markdown support extentsions frontmatter cleaning. # provide ways to hook in or clean up the frontmatter Markata.Markata methods # load render save Markata.Post methods # load render save Markata plugins # before_load before_post_load after_load after_post_load before_save before_post_save after_save after_post_save Markata plugins # cleanse_frontmatter html_feed json_feed rss_feed save_posts CLI #

My Content Strategy For 2021

I am making another push in 2021 to get my content out in the world and meeting users where they are. See how I plan to execute. Platforms # waylonwalker.com Twitter DEV hashnode Medium LinkedIn Anchor Markdown # My content is written in markdown, all markdown. I find that markdown does a really great job at getting out of the way and letting ideas flow onto the page. I am never fussing with fonts and formatting while physically writing posts. Not that I don’t spend way more time than I need to tweak these things on my own personal site where everything gets posted. Articles # Much of what I create is inside of short articles that get posted to my personal site waylonwalker.com. These will get cross-posted to DEV, hashnode, Medium. I have made cross-posting a bit easier for myself by posting the markdown for each article next to the post on my personal site. Add.md to any post and there is the source. Should I be giving my articles to Medium?? Personally, I am not a fan of the bait and…
3 min read

Quickly Edit Posts

Recently I automated starting new posts with a python script. Today I want to work on the next part that is editing those posts quickly. Automating my Post Starter Check out this post about setting up my posts with python 🐍 Enter Bash # For the process of editing a post I just need to open the file in vim quickly. I dont need much in the way of parsing and setting up the frontmatter. I think this is a simple job for a bash script and fzf. change to the root of my blog fuzzy find the post open it with vim change back to the directory I was in bash function # For this I am going to go with a bash function. This is partly due to being able to track where I was and get back. Also the line with nvim will run fzf everytime you source your file which is not what we want. Lets setup the boilerplate. Its going to create a function called ep, track our current directory, create a sub function. Then call that function and cd back to where we were no matter if fails or succeeds. boilerplate Creati…

Gitui is a blazing fast terminal git interface

Gitui is a terminal-based git user interface (TUI) that will change the way that you work with git. I have been a long-time user of the git cli, and it’s been hard to beat, mostly because there is nothing that keeps my fingers on the keyboard quite like it, except which comes with some great ways to very quickly walk through a git project. installation # Go to their [releases]https://github.com/extrawurst/gitui/releases) page, download the latest build, and pop it on your PATH. I have the following stuffed away in some install scripts to get the latest version. install latest release run # It opens blazing fast. Quick Commits # Sometimes I edit a number of files and want to commit them one at a time, this is painful in the git cli and my main use case for. shows unstaged changes at the top, staged changes on the bottom, and a diff on the right. Navigate with hjkl # By default, uses arrow keys, but simply copying vim_style_key_config.ron to your config directory will get you vim-like ke…
2 min read

Kedro - My Data Is Not A Table

In python data science/engineering most of our data is in the form of some sort of table, typically a DataFrame from a library like pandas, spark, or dask. DataFrames are the heart of most pipelines # These containers for data contain many convenient methods to manipulate table like data structures. Sometimes we leverage other data types, namely vanilla types like lists and dicts, or even numpy data types. What is Kedro unfamiliar with kedro, check out this post Sometimes datasets are not tables # There are times when our data doesn’t fit nicely into a DataFrame. Lucky for us Kedro has pickle support out of the box. Pickle is a way to store any python object to disk. Beware that pickle files coming from an unknown source can run malicous code and are considered unsafe. For the most part though when you read and write your own pickle files they are a good tool to consider. See more about pickle from python.org. Cataloging Pickle # I may have a dictionary that describes some cars. In the…

Quickly Change Conda Env With Fzf

Changing conda environments is a bit verbose, I use a function with fzf that both lists environments and selects the one I want in one go. Conda # I have used conda as a virtual environment tool for years now. I started using conda for its simplicity to install packages on windows, but now that has gotten so much better and it’s been years since I have run a command. I’m sure that I could use a different environment manager, but it works for me and makes sense. What environment manager do you use for python? Conda environments are stored in a central location such as and not with the project. They contain both the python interpreter and packages for that env. Conda create # Conda environments are created with the command. At this point, you will need to name your env and select the python version. After running this command you will have a directory with a base python install. It will not be active yet. List environments # Before activating an environment I often want to list the envir…
3 min read

Vim Replace Visual Star

Replacing text based on whats in the current search register is a quite handy tool that I use often. I believe I picked this tip up from Nick Janetakis, check out his YouTube channel for some amazing vim tips. https://www.youtube.com/watch?v=fP_ckZ30gbs If there is one thing that I Like most about vim it’s the ability to hack on it and make it work well for you. Replacing text in vim # Vim can often be a bit verbose, but that’s ok because we can hack on it, and make our own shortcuts and keybindings. For instance, finding and replacing text requires using a command at the vim command-line. Replacing foo with bar looks like this, the final g means all of the foos, not just the first one on the line. making it better # I have a keybinding in my that will allow me to search for a pattern with the usual character, page through them as normal with and, but when I press it will populate the replace command for me so that all I need to do is type out the new text. Note on the # In command mod…
2 min read

Minimal Python Package

What does it take to create an installable python package that can be hosted on pypi? What is the minimal python package # setup.py my_module.py This post is somewhat inspired by the bottle framework, which is famously created as a single python module. Yes, a whole web framework is written in one file. Directory structure # setup.py # name # The name of the package can contain any letters, numbers, “_”, or “-”. Even if it’s for internal/personal consumption only I usually check for discrepancy with pypi so that you don’t run into conflicts. Note that pypi treats “-” and “_” as the same thing, beware of name clashes version # This is the version number of your package. Most packages follow semver. At a high level its three numbers separated by a that follow the format. It’s a common courtesy to only break APIs on major changes, new releases on minor, and fixes on patch. This can become much more blurry in practice so checkout semver.org. py_modules # Typically most packages use the arg…
2 min read

If Tmux

I do much of my work from tmux, I love it so much that I want to setup some functionality that puts me in tmux even if I didn’t ask for it. Bash Function # Bash function to check if the shell is in a tmux session. Using the bash function # I often open up vim to do some quite edits, but before I know it I have several splits open and I need access to another shell utility, but I forgot to start in tmux. This function makes sure tht I start in tmux everytime. Using to ensure vim is opened in tmux. I am not quite sure if this is proper use of the and, let me know if you have a better way to do one thing if returns true and another if it returns faslse.
I’m really excited about vim-fugitive, an amazing project by tpope. It’s worth exploring! fugitive.vim: A Git wrapper so awesome, it should be illegal

Save Vim Macro

If you are like me, you have created a macro or two that is pure glory, and you forget how you made it after a day or so, or you immediately want to store it away as a custom keybinding. As with most things with vim, it’s easy to do once you understand it. Creating a Macro # One of the earliest things we all learn to do in vim is to create macros, custom sets of functionality stored in a register that can be replayed later. To create a macro, get into normal mode, then type followed by a letter that you want to store the macro under. Note: a common throw-away macro register is q because it’s easy to hit qq from normal mode to start recording. Replaying a Macro # Macros can be replayed using followed by the letter that you stored the macro under. Registers # Registers are nothing more than a single character key mapping to a value of some text. As you,, or create macros in vim, it automatically stores text into these registers. When you hit paste it’s simply pasting in the default regis…
3 min read
Live Substitution In Neovim

Live Substitution In Neovim

Replacing text in vim can be quite frustrating especially since it doesn’t have live feedback to what is changing. Today I was watching Josh Branchaud’s Vim-Unalphabet series on Youtuve and realized that his vim was doing this and I had to have it. https://twitter.com/_WaylonWalker/status/1346081617199198210 How to do it # I had to do a bit of searching and found a great post from vimcasts that shows exactly how to get the live search and replace highlighting using:h inccommand # Add this to your config # I believe that this is a neovim only feature, add it into your file. You can see it in my dotfiles as well. See it in Action # example live substitution The Video that inspired this # Check out Josh Branchaud’s great series on the Vim-Unalphabet. https://www.youtube.com/watch?v=5jMiYtXz2QA
khzaw has done a fantastic job with vim-conceal. Highly recommend taking a look. A vim plugin making use of vim’s conceal feature for additional visual eyecandy.

Newsboat

Web browsers are a black hole of productivity. I try to use them as little as possible when it is time to focus. I try to use,, or with ipython, or –help at the command line as much as possible. What about that time I am trying to see what my online friends are posting on their sites? I used to used google reader quite heavily before that was taken down. Newsboat # I am going to give a terminal rss reader a try for a bit and see how that goes for me. I have really struggled to get into an rss reader since google reader died. installation # I installed with the reccomended snap for Ubuntu. Adding feeds # super simple Running help for newsboat directed me towards their config files at the bottom. I just need to edit its urls file. The Urls file is just a list of urls to rss feeds. Adding mine in allowed me to see all of my posts. Config # I took most of my config from a blog post that I found by Evan Travers. It set some sane defaults to the reading width and vim keys. GUI Browser # No m…

Large Refactor At The Command Line

As projects grow patterns that worked early on break and we need to change things to make the project easier to work with, and more welcoming to new developers. git # Before you start mucking up a project with wild commands at the terminal check that you have a super clean git status. We may make some mistakes and need a way to undo 100’s files and git makes it really easy if you start with a clean history. If we are ready to begin work we should see a response like this. It would also be wise to do this inside of a branch. The minute you try to do something wild in your working branch someone will walk by and ask you to do a five-minute task, but your deep in refactoring and haven’t left yourself a clean way back. grepr # Time for the meat of this refactor replacing text across our project. I often will pop this bash function into my terminal session and tweak it as needed. This function is called for then. It will recursively search for a given pattern inside your working directory,…
4 min read

Ipython-Config

I use my ipython terminal daily. It’s my go to way of running python most of the time. After you use it for a little bit you will probably want to setup a bit of your own configuration. install ipython # Activate your virtual environment of choice and pip install it. Any time you are running your project in a virtual environment, you will need to install ipython inside it to access those packages from ipython. You are using a virtual environment right? Virtual environments like venv or conda can save you a ton of pain down the road. profile_default # When you install ipython you start out with no config at all. Runnign will start a new profile called that contains all of the default configuration. This command will create a directory multiple configurations # You can run multiple configurations by naming them with This command will create a directory startup # Inside the profile there will be a startup directory. Ipython will execute each of the files in this directory on startup. This…
2 min read

Custom Ipython Prompt

I’ve grown tired of the standard ipython prompt as it doesn’t do much to give me any useful information. The default one gives out a line number that only seems to add anxiety as I am working on a simple problem and see that number grow to several hundred. I start to question my ability 🤦‍♂️. Configuration # If you already have an ipython config you can move on otherwise check out this post on creating an ipython config. Ipython-Config The Dream Prompt # I want something similar to the starship prompt I am using in the shell. I want to be able to quickly see my python version, environment name, and git branch. python version active environment git branch Basic Prompt # This is mostly boilerplate that I found from various google searches, but this gets me a basic green chevron as my prompt. The rest of this post will build off of this boilerplate and add to the method of MyPrompt Colors # I mostly set the colors of my prompt throughout this post by guessing and trying different attribut…
3 min read