I love to contribute to Open Source projects. Besides being a maintainer of a top 1000 Python library, my contributions have mostly been little bits here and there, fixing bugs as I find them in projects I use. You can find my contributions on the following platforms:
Foam is a personal knowledge management and sharing system inspired by Roam Research, built on Visual Studio Code and GitHub.
I took on the project of designing and implementing a unified user experience for creating notes from templates (“Templates v2”).
- Designing a new user experience for note templates:
- Allowing for templates to be able to be used by all the note creation mechanisms, unifying their differing needs into a cohesive and simple mental model that users could reason about.
- Extending the syntax of templates, in order to support useful metadata
- Drafting the proposed changes as a proposal document; communicating clearly and asynchronously with all of the relevant stakeholders
- Actually implementing the changes. More than a dozen PRs and counting…
This has been a solo passion project, and I’m very pleased with the results so far.
ciso8601 is the world’s fastest Python library for parsing ISO 8601 timestamps.
I completely rewrote the existing ciso8601 library, creating version
As part of the rewrite I:
- Fixed the interface to have consistent error handling (the most asked for issue)
- Improved test coverage by automatically generating test cases for all valid formats.
- Made it >65% faster
It is now the fastest way to parse ISO 8601 in Python, by far!
backports.datetime_fromisoformat is a simple backport of Python 3.7’s
datetime.fromisoformat methods to earlier versions of Python 3.
progress_tracker is a simple (yet flexible) way to add processing progress logging to your Python scripts.
>>> from progress_tracker import track_progress >>> for _ in track_progress(list(range(1000)), every_n_records=100): ... continue ... 100/1000 (10.0%) in 0:00:00.000114 (Time left: 0:00:00.001026) 200/1000 (20.0%) in 0:00:00.000274 (Time left: 0:00:00.001096) 300/1000 (30.0%) in 0:00:00.000374 (Time left: 0:00:00.000873) 400/1000 (40.0%) in 0:00:00.000473 (Time left: 0:00:00.000710) 500/1000 (50.0%) in 0:00:00.000572 (Time left: 0:00:00.000572) 600/1000 (60.0%) in 0:00:00.000671 (Time left: 0:00:00.000447) 700/1000 (70.0%) in 0:00:00.000770 (Time left: 0:00:00.000330) 800/1000 (80.0%) in 0:00:00.000868 (Time left: 0:00:00.000217) 900/1000 (90.0%) in 0:00:00.000979 (Time left: 0:00:00.000109) 1000 in 0:00:00.001086
- Ruby on Rails: #41381 (Minor)
- Ansible: #24545 #24546
- AtomLinter/linter-pyflakes: (Minor)
- retype: #1 #2
- Construct: #360 #365 #372 (Documentation) #398
- pint: #387
- pyhocon: #53 #132 #134 #135
- deepdiff: (Documentation)
- Cabot: Various
- Evolus Pencil: #329
- pyfirebirdsql: #61
- pyorbital: #6
- ansible-vault: Various fixes
- ansible-modules-hashivault: (Documentation)
- Blackberry2Droid: #2 #3