Check out andrewlin12 [1] and their project markdown2png [2].
Render markdown to PNG (or other formats)
References:
[1]: https://github.com/andrewlin12
[2]: https://github.com/andrewlin12/markdown2png
Publishing rhythm
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 # [1]
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 # [2]
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 # [3]
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 # [4]
It was at this moment that I threw my mentor, a good ...
Blogging For Me
I create this blog with one person in mind, me.
There are others like me # [1]
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 # [2]
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.
...
I recently discovered twint [1] by twintproject [2], 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.
References:
[1]: https://github.com/twintproject/twint
[2]: https://github.com/twintproject
I like pytest-dev’s [1] project pluggy [2].
A minimalist production ready plugin system
References:
[1]: https://github.com/pytest-dev
[2]: https://github.com/pytest-dev/pluggy
to-mc [1] has done a fantastic job with checksumdir [2]. Highly recommend taking a look.
Simple package to compute a single deterministic hash of the file contents of a directory.
References:
[1]: https://github.com/to-mc
[2]: https://github.com/to-mc/checksumdir
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 setup.py and 27 in mini_kedro_pipeline.py.
📝 Note this is only a composable pipeline, not a full project, it does not contain a catalog or runner.
Minimal Kedro Pipeline # [1]
I have everything for this post hosted in this gihub repo [2], you can fork it, clone it, or just follow along.
Installation # [3]
pip install git+https://github.com/WaylonWalker/mini-kedro-pipeline
Caveats # [4]
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 hooks.py or run.py 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 # [5]
# hooks.py
import mini_kedro_project as mkp
class Pro...
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 # [1]
- posts
- tags
- draft posts
data # [2]
- frontmatter
- filepath
- content
- template
- html [3]
render content # [4]
- Markdown.Markdown
- support extentsions
frontmatter cleaning. # [5]
- provide ways to hook in or clean up the frontmatter
Markata.Markata methods # [6]
- load
- render
- save
Markata.Post methods # [7]
- load
- render
- save
Markata plugins # [8]
- before_load
- before_post_load
- after_load
- after_post_load
- before_save
- before_post_save
- after_save
- after_post_save
Markata plugins # [9]
- cleanse_frontmatter
- html_feed
- json_feed
- rss_feed
- save_posts
CLI # [10]
$ markata list tags
python
data
$ markata
[
{
"title": "post title",
"description": "this is a post",
"filepath": "path_to.md",
"content": "the ...
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 # [1]
- waylonwalker.com
- Twitter
- DEV
- hashnode
- Medium
- LinkedIn
- Anchor
Markdown # [2]
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 # [3]
Much of what I create is inside of short articles that get posted to my personal site waylonwalker.com [4]. These will get cross-posted to DEV [5],
hashnode [6], Medium [7].
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 art...
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 [1]
Check out this post about setting up my posts with python 🐍
Enter Bash # [2]
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 # [3]
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 ~/.alias file which is not what we want.
Lets setup the boilerplate. Its going to create a function called ep
"edit post", track our current directory, create a sub function _ep. Then
call that function and cd back to where...
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.
Gitui is a blazing fast terminal git interface
Gitui is a terminal-based git [1] 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 gitui which comes with some great ways to very
quickly walk through a git project.
installation # [2]
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
GITUI_VERSION=$(curl --silent https://github.com/extrawurst/gitui/releases/latest | tr -d '"' | sed 's/^.*tag\///g' | sed 's/>.*$//g' | sed 's/^v//')
wget https://github.com/extrawurst/gitui/releases/download/v${GITUI_VERSION}/gitui-linux-musl.tar.gz -O- -q | sudo tar -zxf - -C /usr/bin/
run gitui # [3]
It opens blazing fast.
gitui
Quick Commits # [4]
Sometimes I edit a number of fi...
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 # [1]
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 [2]
unfamiliar with kedro, check out this post
Sometimes datasets are not tables # [3]
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 [4] from python.org.
Cataloging Pickle # [5]
I may have a dictionary ...
Check out asottile [1] and their project babi [2].
a text editor
References:
[1]: https://github.com/asottile
[2]: https://github.com/asottile/babi
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 # [1]
I have used conda as a virtual environment [2] 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 conda install
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
~/miniconda3/envs/ and not with the project. They contain both the python
interpreter and packages for that env.
Conda create # [3]
Conda environments are created with the conda create command. At this point,
you will need to name your env and select the python version.
conda create -n my_env python=3.8
After running this command you will have a directory ~/miniconda3/envs/my_env
with a base...
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 # [1]
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 :%s/foo/bar/g, the final g means all of the foos, not just
the first one on the line.
making it better # [2]
I have a keybinding in my init.vim that will allow me to search for a pattern
with the usual / character, page through them as normal with n and N, but
when I press <C-R> it will populate the replace command for me so that all I
need to do ...
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 # [1]
- 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 # [2]
.
├── setup.py
└── my_pipeline.py
setup.py # [3]
from setuptools import setup
setup(
name="",
version="0.1.0",
py_modules=["my_pipeline", ],
install_requires=["kedro"],
)
name # [4]
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 # [5]
This is the version number of your package. Most packages follow
semver [6]. At a high level its three numbers separated by a . that follow the format major.minor.patc...
Check out jameslittle230 [1] and their project stork [2].
🔎 Impossibly fast web search, made for static sites.
References:
[1]: https://github.com/jameslittle230
[2]: https://github.com/jameslittle230/stork
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 # [1]
Bash function to check if the shell is in a tmux session.
in_tmux () {
if [ -n "$TMUX" ]; then
return 0
else
return 1
fi
}
Using the bash function # [2]
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 if_tmux to ensure vim is opened in tmux.
vim () {
in_tmux \
&& nvim \
|| bash -c "\
tmux new-session -d;\
tmux send-keys nvim Space +GFiles C-m;\
tmux -2 attach-session -d;
"
}
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 in_tmux returns true and another if
it returns faslse.
References:
[1]: #bash-function
[2]: #using-the-bash-function
If you’re into interesting projects, don’t miss out on vim-commentary [1], created by tpope [2].
commentary.vim: comment stuff out
References:
[1]: https://github.com/tpope/vim-commentary
[2]: https://github.com/tpope