Published

All published posts

2540 posts latest post 2026-06-16 simple view
Publishing rhythm
May 2026 | 58 posts

cmd.exe tips

I spend a lot of my time at the terminal for my daily work, mostly in Linux or wsl. One big reason for using wsl over cmd.exe is the ease of walking through history that fzf provides. This week we had a windows bug in a cli and I was stuck in vanilla cmd.exe 😭 > Cmder # [1] [2] First off if you are stuck using cmd.exe, do yourself a favor and get cmder. It makes life just a bit easier. It is super confugurable and comes with several power ups that make it a bit more enjoyable than cmd.exe. History # [3] F7 - Scroll through history F8 - Search history based Example # [4] Your browser does not support the video tag. [5] .bat # [6] The next simple technique is to save your commands into a .bat file. Any valid command ran with cmd.exe can be saved into a bat file and called again later by running it in the terminal. save your command use f7/f8 to get your command back add > filename.bat at the end, hit the home key and add echo to the front. Do not wrap with quotes. This is...
2 min read
If you’re into interesting projects, don’t miss out on forgit [1], created by wfxr [2]. 💤 A utility tool powered by fzf for using git [3] interactively. References: [1]: https://github.com/wfxr/forgit [2]: https://github.com/wfxr [3]: /glossary/git/
I’m really excited about python-c2f [1], an amazing project by grantjenks [2]. It’s worth exploring! Cython for All with GitHub Actions References: [1]: https://github.com/grantjenks/python-c2f [2]: https://github.com/grantjenks
Check out wesbos [1] and their project beginner-javascript [2]. Slam Dunk JavaScript References: [1]: https://github.com/wesbos [2]: https://github.com/wesbos/beginner-javascript
If you’re into interesting projects, don’t miss out on awesome-react-components [1], created by brillout [2]. Curated List of React Components & Libraries. References: [1]: https://github.com/brillout/awesome-react-components [2]: https://github.com/brillout

What is something you should have learned or understood earlier?

Mine is the python debugger. I was a long holdout thinking that print statements were sufficient. That was untill I started having errors crop up in functions that took minutes to run. The thing that I most notably wish I would have known about is post_mortem. Example # [1] [ins] In [4]: def repeater(msg, repeats=1): ...: "repeats messages {repeats} number of times" ...: print(f'{msg}\n' * repeats) [ins] In [5]: repeater('hi', 3) hi hi hi [ins] In [6]: repeater('hi', 'a') --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-6-0ec595774c81> in <module> ----> 1 repeater('hi', 'a') <ipython-input-4-530890de75cd> in repeater(msg, repeats) 1 def repeater(msg, repeats=1): 2 "repeats messages {repeats} number of times" ----> 3 print(f'{msg}\n' * repeats) 4 Debug with iPython/Jupyter %debug Vanilla Debug # [2] import pdb import sys pdb.post_mortem(sys.last_traceback) More # [3] For more inform...
1 min read

Supercharge Zsh Startup

I have been using oh-my-zsh successfully for about 2 years now. But lately my startup time has been really bothersome. It has grown to the point where it was taking about 5.5s to startup a shell! This is ok if I am going to spend some time in here for awhile and do some work that benefits from all of the autocompletions, plugins, and shortcuts that oh-my-zsh brings. But to only jump in to run a handful of commands is infuriating. 📑 My Setup # [1] I believe the real issue is io speed on wsl. I have some remote servers with similar configs that are 10x faster or more, loading in 100s of milliseconds rather than seconds. Sourcing all of the individual plugin files are just too much for it. 💨 How Fast can it be # [2] Quick side note: your zsh config is controled by your ~/.zshrc file. This file can source other files, load plugins, or run literally anything. Time the initial time time zsh -c exit Move your ~/.zshrc config file. mv ~/.zshrc ~/.zshrc-back Time the fastest startup p...

Keep Location List Closed

Vim’s (neovim in my case) location list can provide some very useful information while developing. Mine gives me information about linting and type checking errors with fairly little config. Generally, it sits nicely at the bottom of the screen and barely affects me. Other times, especially while zoomed way in during a presentation, it just gets in the way. [1] location list eats the screen Location List eating up the screen while I am zoomed in and trying to live code Toggling the location list # [2] Through some google search I found the culprit was syntastic. It has an auto_loc_list feature. We can turn it off by setting syntastic_auto_loc_list=0. let syntastic_auto_loc_list=0 Keybindings # [3] I want to keep the location list open automatically most of the time, but when I don’t want it to keep opening it’s generally detrimental. Trying to live code while the location list keeps taking up the whole screen is not cool. First, create a function that will toggle both the lo...
2 min read

SqlAlchemy Models

Make a connection # [1] from sqlalchemy import create_engine def get_engine(): return create_engine("sqlite:///mode_examples.sqlite") Make a session # [2] from sqlalchemy.orm import sessionmaker def get_session(): con = get_engine() Base.bind = con Base.metadata.create_all() Session = sessionmaker(bind=con) session = Session() return session Make a Base Class # [3] from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() Base.metadata.bind = get_engine() Make your First Model # [4] class User(Base): __tablename__ = "users" username = Column('username', Text()) firstname = Column('firstname', Text()) lastname = Column('lastname', Text()) Make your own Base Class to inherit From # [5] class MyBaseHelper: def to_dict(self): return {k: v for k, v in self.__dict__.items() if k[0] != "_"} def update(self, **attrs): for key, value in attrs.items(): if hasattr(self, key): setattr(self, key, value) Use the Custom Base Class # [6] class User(Ba...
1 min read
I came across jumpcutter [1] from carykh [2], and it’s packed with great features and ideas. Automatically edits vidx. Explanation here: https://www.youtube.com/watch?v=DQ8orIurGxw References: [1]: https://github.com/carykh/jumpcutter [2]: https://github.com/carykh
Check out great-expectations [1] and their project great_expectations [2]. Always know what to expect from your data. References: [1]: https://github.com/great-expectations [2]: https://github.com/great-expectations/great_expectations
I’m impressed by flowy [1] from alyssaxuu [2]. The minimal javascript library to create flowcharts ✨ References: [1]: https://github.com/alyssaxuu/flowy [2]: https://github.com/alyssaxuu
I came across blocks [1] from blocks [2], and it’s packed with great features and ideas. A JSX-based page builder for creating beautiful websites without writing code References: [1]: https://github.com/blocks/blocks [2]: https://github.com/blocks
I like asmeurer’s [1] project removestar [2]. Tool to automatically replace ‘import *’ in Python files with explicit imports References: [1]: https://github.com/asmeurer [2]: https://github.com/asmeurer/removestar
Check out lolcommits [1] and their project lolcommits [2]. 📷 git [3]-based selfies for software developers References: [1]: https://github.com/lolcommits [2]: https://github.com/lolcommits/lolcommits [3]: /glossary/git/
I’m really excited about mask [1], an amazing project by jacobdeichert [2]. It’s worth exploring! 🎭 A CLI task runner defined by a simple markdown file References: [1]: https://github.com/jacobdeichert/mask [2]: https://github.com/jacobdeichert
Check out pyjanitor-devs [1] and their project pandas_flavor [2]. The easy way to write your own flavor of Pandas References: [1]: https://github.com/pyjanitor-devs [2]: https://github.com/pyjanitor-devs/pandas_flavor
I like tj’s [1] project go-termd [2]. Package termd provides terminal markdown rendering, with code block syntax highlighting support. References: [1]: https://github.com/tj [2]: https://github.com/tj/go-termd

Building Cli apps in Python

Packages # [1] Click [2] # [3] Inputs # [4] Click primarily takes two forms of inputs Options and arguments. I think of options as keyword argument and arguments as regular positional arguments. Option # [5] - typically aliased with a shorthand (’-v’, ‘–verbose’) --- **From the Docs [6] To get the Python argument name, the chosen name is converted to lower case, up to two dashes are removed as the prefix, and other dashes are converted to underscores. @click.command() @click.option('-s', '--string-to-echo') def echo(string_to_echo): click.echo(string_to_echo) @click.command() @click.option('-s', '--string-to-echo', 'string') def echo(string): click.echo(string) --- Argument # [7] - positional - required - no help text supplied by click Yaspin [8] # [9] 88e1bcff-6a9c-4bd9-955c-fd130f2fa369.mp4 [10] Click Help Colors [11] # [12] [13] # [14] Colorama [15] # [16] Colorama Example [17] Click DidYouMean [18] # [19] References: [1]: #packages [2]: https://click.pal...
1 min read
I recently discovered git-history [1] by pomber [2], and it’s truly impressive. Quickly browse the history of a file from any git [3] repository References: [1]: https://github.com/pomber/git-history [2]: https://github.com/pomber [3]: /glossary/git/