I am Tony Narlock#
This is my professional website, I’ve been a software developer for 15 years. If you’re not one, what I do likely won’t make sense to you.
I work at tech startups building web-based apps. I use React, TypeScript, and Relay (GraphQL) on the frontend and Python / Amazon Web Services on the backend.
In my spare time I plan, develop, and maintain a fleet of developer tools. For example, tmuxp constructs tmux sessions from a JSON or YAML file. To that end, I’ve also written a book about tmux a few years ago, The Tao of tmux. Another tool I’ve created is cihai, which is built around Unicode’s UNIHAN dataset for Chinese, Japanese, and Korean languages.
I contribute to open source software projects; find me on GitHub, GitLab, OpenHub.
My CV tracks everything I’ve ever done - work, my projects, and open source (I’m a polyglot, there is some C++ in there).
What’s going on in my life as a programmer#
What am I busy with outside of work?
September 2023 - More quality improvements
August 2023 - Continued quality improvements
As a continuance of July 2023’s ruff improvements, these additional projects have been revitalized:
August 2023 - CV Website updated
Dark mode
Renewed design with CSS variables
July 2023 - Improved quality standards
Python projects using ruff, a python linter / fixer written in Rust are now updating to more stringent code standards. This further improves maintainability of projects.
June 2023 - social-embed moved to vite.
P.S. cihai updates ongoing (updated below)
May-June 2023 - cihai is being revamped
After 5+ years of inactivity, the suite of packages is being dusted off.
cihai updates:
May 25th, 2023 - 0.20.0: Adds mypy
--strict
compliant typingsJune 3rd, 2023 - 0.21.0: Migrate from SQLAlchemy v1.3 to SQLAlchemy v2.0
cihai-cli updates:
June 4th, 2023: 0.17.0: mypy
--strict
compliant typings and migrate from SQLAlchemy 1.3 to SQLAlchemy 2.0
unihan-etl updates:
June 12th, 2023: 0.21.0: Move to
pathlib
, type callbacks viatyping.Protocol
.June 17th, 2023: 0.22.0:
Add
doctest
supportConfiguration: Move options from
dict
to typeddataclass
object.Docs: Split API documentation into multiple pages
Move
unihan_etl.process
->unihan_etl.core
unihan-db updates:
June 10th, 2023: 0.9.0: mypy
--strict
compliant typings and migrate from SQLAlchemy 1.3 to SQLAlchemy 2.0
In the future, cihai projects will have:
SQLAlchemy updated to 1.4, then 2.0+CompletedTypings, for improved maintainability and completions
Doctests for tested examples
unihan-etl and cihai will have their own pytest plugins for bootstrapping a UNIHAN.zip and reusing it throughout the test session.
In the medium to longterm: Simpler and stable APIs
December 2022 - I’m not giving up being successful
In 2023:
September 2022 - One more thing on doctest
I wrote a
doctest
module that can parse reStructuredText and markdown:It also has a pytest plugin
On that note, I also made a pytest plugin for libtmux and libvcs:
tmux pytest plugin - bootstrap tmux sessions in your tests
libvcs pytest plugin - setup and teardown git, mercurial and subversion repos in your tests.
Mid August 2022 - Promises keep coming
Additionally, test and quality infrastructure has been improved across all projects:
Early August 2022 - Promises kept (and keep coming)
libvcs 0.14.0 released w/ typing annotations and doctests.
Also, added a URL Parser (compare to
urlparse
) forgit
,hg
, andsvn
URLs. Extensible usingframework tools
. Built on dataclasses and usesdoctest
.In the process, “side inventions” (License MIT):
SubprocessCommand
: Deferrablesubprocess
commands.SkipDefaultFieldsReprMixin
: Exclude default fields (useful for clearer pytest assertions / printing). Thanks Pietro Oldrati.
June 2022
libvcs and vcspull are being rebuilt from the ground up. This will be a fresh take on one of my earliest python projects. What they’ll be using:
doctest: actual code demo in documentation which also function as tests
dataclasses (experimental): As a library creator, I will put these to the test
The projects will be a proving ground for quality standards and patterns I’ll adopt across my other and future packages.
March 2022
All sites moved to new design.
June 2021
tmux-python (tmuxp + libtmux), vcs-python (vcspull + libvcs), cihai (cihai, cihai-cli, unihan-etl, unihan-db) moved to markdown
April 2021
Feb 2021
Experimenting with new CV: cv-react-v2.git-pull.com
Publications#
Language Projects#
Unix-like Utilities#
Coding around the web#
Software porting from Linux to BSD on my FreeBSD Wiki Page
Unofficial tally / roster of open source contributions on OpenHub
GitHub @tony for recent / current coding
Porting (Linux-to-BSD)#
Elementary Algorithms – Book of Elementary Algorithms and Data structures #16
aseprite – Cross-platform sprite / pixel art editor #888 #893
tmux-mem-cpu-load memory, CPU and load averages for tmux status lines #30
uMario_Jakowski – Super Mario NES clone in SDL2 and C++. Add CMake and get building on FreeBSD and OS X #1
python-cmake-buildsystem - CMake buildsystem for CPython #133 #136
pyston - An open-source Python implementation using JIT techniques #1072, #1073, #1085
Scrapyard#
Experimental code / patches that never made it upstream:
kakoune branches: cmake build support, mini, new-cli (#693), observers, rm-server (serverless kakoune), pybind11 and Boost.Python integration
vis branches: cmake support, C++ support, python integration
sphinx branches: flexible-builder invocation
tmux branches: cmake build support
Project templates#
Permissively licensed starter templates you can use to bootstrap your projects.
These are mostly outdated
Frontend#
react-typescript-vanilla-starter: Webpack v4
vue-typescript-vanilla-starter: vue 2.x, webpack v4
Presentations#
Guest Speaker @ Fullstack Academy (YC S12) at 1871 (Feb 2017)
Guangzhou LUG software freedom day @ Sun Yat-sen University (May 2013)
Industry and Press#
Opensource.com mentions The Tao of tmux (Feb 2017)
Japanese tech blog mentions The Tao of tmux (Jan 2017)
Bugsnag Engineering using tmuxp (Nov 2016)
Pragmatic Coders dev shop on configuring tmux sessions with tmuxp (Dec 2015)
tmuxp featured on OneThingWell Nov 2013 and June 2014
Code Exploration#
Other#
Bad ass leather / 牛 B 皮革 - PSA on why leather is cool
Donate#
Like my open source projects and learning resources? Your support is appreciated!
Emboldening virtue, the Junzi#
To be a righteous person (君子 jūn zǐ), as opposed to (小人 xiăorén)
What makes a good gentleman-scholar in Confucius eyes?
Be coherent: “How did we get here?”, “How do these things connect?”
Tolerate ambiguity
Treat matters in proportion to the issue
Secure attachment