I am Tony Narlock¶
This is my professional website. I’ve been a software developer for over 16 years. If you’re not in the field, what I do might not make much sense to you.
I work at tech startups, building web-based applications. On the frontend, I use React, TypeScript, and Relay (GraphQL), and on the backend, Python and Amazon Web Services.
In my spare time, I plan, develop, and maintain a suite of developer tools. For instance, tmuxp, which constructs tmux sessions from a JSON or YAML file. A few years ago, I also wrote a book about tmux, titled “The Tao of tmux”. Another tool I’ve created is cihai, based on Unicode’s UNIHAN dataset, which supports Chinese, Japanese, and Korean languages.
I actively contribute to open-source software projects. You can find me on GitHub, GitLab, CodersRank, and OpenHub.
My CV documents everything I’ve ever done - professional work, my projects, and open-source contributions (I’m a polyglot; there’s even some C++ in there).
What’s going on in my life as a programmer¶
What am I busy with outside of work?
June 2024:
libvcs: v0.30.1 (diff): Support for AWS CodeCommit URLs.
CV: Added sidebar of years, track current year in top menu while scrolling.
April-June 2024:
libtmux: Working on options and hooks: libtmux#516
March 2024:
libtmux refactoring continues
Automated fixes via ruff
Machine-made refactors rendering consistent, tight python code:
February 2024: Busman’s holiday
-
API streamlining (e.g.,
Pane.select_pane()
->Pane.select()
)Up next: Options and hooks: libtmux#516
CV: Add timeline to pull requests
-
v0.31.0 (diff): Support updated from UNIHAN 11.0.0 (May 2018) to 15.1.0 (Sept 2023), via unihan-etl#309.
v0.32.0 (diff): Highlight examples on the front page: unihan-etl#253, unihan-etl#314.
-
January 2024:
December 2023:
Moved my CV and social-embed project to
oxlintbiome, a Rust-based linter and formatter:Documented even more projects w/ ruff’s pydocstyle linter:
November 2023
social-embed: Upgraded website from docusaurus v2 to v3 (diff).
Linted project documentation with pydocstyle + ruff:
October 2023 - Overhauled django-docutils
django-docutils - a django package for reStructuredText - is being dusted off.
-
Renamed template tags / filters from
restructuredtext
torst
Enabled template tags to accept block content, e.g.
{% load django_docutils %} {% rst %} **my bold text** {% endrst %}
Added test coverage for template tags and template engine.
v0.19.0 (diff): Typings for settings, cleanup, documentation
This package, originally part of a blog that combined django ORM + django views + intersphinx, remained unused in the attic until last month. It is now known as
django-docutils
.-
Late September 2023 - More mypy
--strict
compliant typingsEarly September 2023 - More quality improvements
August 2023 - Continued quality improvements
Building upon the improvements made to ruff in July 2023, the following additional projects have now been revitalized:
August 2023 - CV Website updated
Dark mode
Renewed design with CSS variables
July 2023 - Improved Quality Standards
This enhances the maintainability of projects by employing ruff, a Python linter/fixer developed in Rust:
June 2023 - social-embed moved to vite.
P.S. cihai updates ongoing (updated below)
May-June 2023 - cihai is being revamped
After over 5 years of inactivity, this suite of packages has been revived.
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: Introduced mypy
--strict
compliant typings and transitioned 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¶
Available on Leanpub and Kindle (Amazon). Read the book for free on the web.
Language Projects¶
United front for creating open, permissive, standardized CJK datasets.
Study chinese flashcards for Hànyǔ Shuǐpíng Kǎoshì, (New) Practical Chinese Reader and Integrated Chinese
Unix-like Utilities¶
manage and update multiple git / hg / svn projects via JSON or YAML file
pythonic API for version control systems
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¶
Badass 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