open source contributions
25-May-2010 - …
Todo.txt task tracking
Probably due to the simplicity of the task tracking solution, I was drawn into contributing many fixes, enhancements, Wiki edits and quick answers on the mailing list, all of which were greatly appreciated by the community. Enabled by the script's extension points, I initially developed, modified and used 24 small addon scripts to customize the application to my workflow, before publishing them as a separate project (see below).
The great GitHub platform, existence of an automated test suite, and friendly community of partially less technical people made contributing so much fun. My first steps consisted of cleanup of help messages, code consistency and minor bug fixes, in order to learn more about the script and the community. Later I contributed enhancements and then coordinated problem reports and fixes from other developers. This resulted in the v2.7 release on 04-Aug-2010, where I contributed 39 out of 42 commits, and continued with me as the lead developer of the v2.8 release on 14-Sep-2011.
In Aug-2017 (after hiccups with the Android app's sudden loss of Dropbox support), Ali Karbassi offered to pick up the languishing project from Gina Trapani, and I joined the new todotxt organization with direct commit access in consultative capacity.
From the beginning, I had picked up some Todo.txt add-ons from various contributors, and soon wrote my own custom commands, configuration, and special filters. This eventually culminated in a set of matching interdependent extensions that codified my personal approach to task handling. Because there had been keen interest in various pieces of my add-ons, I finally released them as a separate project in Feb-2012.
12-Feb-2002 - …
Vim text editor
I'm an avid user of the Vim text editor since Vim 6.0 in 2002.
Since Dec-2006, I'm a member of the email@example.com mailing list, where I participate in troubleshooting help, feature discussions, and strategy. I've submitted several bug reports and Vim patches, many of which have been incorporated into the mainline.
Since Dec-2007, I partipate in the Vim Tips Wiki, amassing 104 edits as of Mar-2012. I also frequent the Vim subreddit, and watch questions tagged Vim on Stack Overflow, answering questions as they come up.
Starting Sep-2006, I have published several of my customizations and enhancements as Vim scripts on the vim.org community site. Some of them have been downloaded over a thousand times. I'm one of the most prolific script authors, with 90+ published plugins (up from 38 in March-2012). I have been contributing bug reports, patches, and critiques to at least as many plugins by other authors (to some of them regularly as a kind of co-development), and regularly receive (overwhelmingly positive) feedback about them.
list of contributions
Here's an incomplete list of my contributions to the open source community; many minor things have been omitted:
- Apr..Jul-2020 Bash scripts
- I've greatly extended and improved my collection of Bash scripts, with a focus on composability and separation of concerns. Almost all non-trivial new scripts are developed in test-driven fashion, using Bash Automated Testing System. Some notable mentions:
- In shell tools, split off a generic somethingOr script from similar implementations in existsOr, runsOr, succeedsOr before implementing enhancements.
- In shell user interactions, implemented invocationMessage and invocationNotification to provide user feedback on long-running operations. I had extended an open-source Maven command completion for myself, making use of my memoizeCall caching tool, but when the cache gets refreshed on the first invocation of the day, it still appeared hung for up to a minute. This tool now addresses that with a simple, orthogonal one-line change.
- I needed a tool to monitor computer usage of my daughter (who spent a lot more time online during the Corona lockdown) and also to curb my own procrastination tendencies. I identified the need for a generic timestampTally tool (in shell filters) for reporting, and processAddedFiles (in shell tools) for sending out past reports via email.
- Mar-2020 tridactyl
- I had meant to submit a small fix already to the predecessor Pentadactyl project (which got killed by radical API retirements in Firefox), and now did so to the project that aims to make current Firefox behave more like Vim. What initially looked like a small documentation fix then had me diving into the TypeScript sources, as the devs suggested to also make this the new default.
- Sep-2019 miniDB and executionMarker
- Recognizing ad-hoc implementations of a simple configuration store in my shell scripts, I had extracted and generalized a simple file-based columnar database, and a specialization for recording command execution times. These greatly simplified existing tools and also sped up the development of new tools. However, when one use rapidly did multiple updates, I noticed data loss, and had to implement rate-limiting as a workaround, and put down a task to add file locking to the tools later. When I did just that, I realized the complexity of concurrent access (without automated tests (using Bash Automated Testing System) that would have been impossible), but persevered and implemented working locking and simple transaction handling over the course of three days.
- Aug-2019 tmux shellcommand
- Due to similarities with Vim in design and configuration, I immediately felt at home when trying out tmux, quickly extended the built-in functionality with plugins (which I immediately hacked on and improved), and added my own key mappings, some of which would also make great plugins on their own. The shellcommand extension is the first tweak that was written as a separate, reusable plugin from the start that can be installed from GitHub via the Tmux Plugin Manager.
- Apr-2019 git-extensions
- I increasingly rely on metaprogramming (i.e. scripts that write scripts), with various
git-...-command scripts that allow to easily define groups of related commands. The latest (and most complex) one is
git-wcdo, which (often, but can be skipped in the chain) is invoked by
git-wcs-in-dir-do, which then is invoked by
git-wcdo-command, which is used to build custom commands like my
git-dev (for work) and
Unixhome-ingo (for open source projects). This follows Git's own distinction into plumbing commands used for automation and serving as a stable base for implementing porcelain commands that are mostly employed by the user.
- Apr-2019 Mutual open source use
- After several years of happy use, I submitted three patches to nowrap (a small Perl command-line utility), fearing the tool had been abandoned by its author because the account didn't show any activity for the past two years, only to get a prompt response and to find out that the author is a regular user of some of my Vim plugins. So we're each using the other's open source contributions!
- Feb-2019 reldate
- Working mainly on Linux systems has produced a private treasure trove of small utilities and tools. Reldate is the first Perl-based tool that I've polished, extended, written automated tests for (and blogged about the approach), and then published on GitHub. More to follow!
- Mar..Dec-2018 git-extensions
- After switching from Subversion to Git at work, I identified many additional use cases, especially working with several repositories in parallel, reintegrating feature branches, and tracking of change requests and corresponding commits. I've greatly expanded my aliases (adding for example whole families of log variants covering various commit ranges) and also refactored the implementation of many custom commands, in more than 300 individual commits.
- Having initially just worked with a cloud installation, doing just some basic monitoring and accessing containers, with development done via docker-compose, I'm now actively developing in (single or multi-node) Kubernetes environments, so I adapted and increased my extensions to a set of 25 commands (and also implemented a lot of supporting infrastructure, like installing my customizations with a single command on all nodes, highlighting and collection of log files).
- Stack Overflow
- At the end of the year, I'm at 130k reputation, 14/144/195 gold/silver/bronze badges, and an accepted answer rate of 53%, reaching an estimated 3.7 million people with my answers. It's still a great pleasure to be able to help other people, and I also learn a lot myself, even obtain many great ideas for tools or Vim plugins through the community.
- Sep-2017 Move Vim plugin development to GitHub
- After many requests, I started moving my 120 Vim plugins one by one to GitHub. Many users nowadays use package managers that allow easy consumption from there. With my git-writebackup-ingo-import script, conversion from my home-grown writebackup version control is a mostly automatic step. I use gitflow for branching and releases, and have written a custom converter for my Vim help pages that automatically generate the customary vimscript.
- Aug-2017 Joined new todotxt organization
- Ali Karbassi offered to pick up the languishing project from Gina Trapani, and I joined the new todotxt organization with direct commit access in consultative capacity, reviewing contributions and commenting on issues.
- Jul-2017 Stack Overflow
- Received congratuations for reaching 100,000 reputation, and got sent free swag (cup, t-shirt, stickers) to express Stack Overflow's gratitude for participating!
- Apr-2017 Vim
- Found a regression via my automated test suite (that runs over all of my Vim plugins, and checks those against a base Vim version and the latest source code), and another bug via normal use of my plugins.
- Jul-2016 Bash fc -e patch
- Noticed a bug in the exit status of the Bash
fc -e builtin. Asked about this on Unix & Linux StackExchange, and as first feedback indicated this is a bug, downloaded the source code of Bash, researched the issue, and came up with a patch, which I sent to the maintainer of Bash. Unfortunately, I hadn't used the latest development branch, so it had already been reported and fixed. It was a nice learning experience, anyway.
- 01-Dec-2016 Stack Overflow community
- Reached 100k reputation, and 10/87/134 gold/silver/bronze badges.
- Jun-2014 Stack Overflow community
- After three years on Stack Overflow, I've gained 59k reputation and 8/28/58 gold/silver/bronze badges. My accepted answer percentage rate is at 51%, significantly more than the average of 39%!
- Apr-2014 Adoption of personal Vim plugin fork
- I got a pull request on my extended fork of an (apparently unmaintained) Vim plugin, informing me that the developer had taken my modifications and extended those. Out of that friendly exchange arose a couple of mutual extensions.
- Dec-2013 Stack Overflow community
- After 20 months, I've gained 40k reputation and 6/20/42 gold/silver/bronze badges.
- This was a rather calm year; I've mostly answered issues and reviewed all incoming pull requests, which was acknowledged in the 2.10 release announcement.
- Todo.txt extensions
- I added and improved several actions in what I would call controlled evolution. The suite of add-ons around the Todo list (with currently 600 entries) still form the base of my task management.
- Vim plugins
- I'm continuously tweaking my personal configuration, adding useful commands and mappings. This year, a lot of inspiration came from questions on Stack Overflow. By giving back (answers and help), I learn and gain a lot (inspiration, ideas to do things differently), too!
- Due to my heavy use and extensive automated test suite for my plugins, I was able to report several issues and got most of them quickly fixed by friendly colleagues. In particular, I found several corner case inconsistencies in the new Vim 7.4 NFA-based regexp engine, resulting in patches 7.4a.032 and 7.4a.039.
- Dec-2012 Stack Overflow community
- After 8 months of following and answering Vim questions on Stack Overflow, I've gained 13k reputation and my first two gold badges for reviewing 1,000 edits and casting 600 votes.
- 03-Feb-2012 Todo.txt extensions
- In addition to a couple of add-ons to Todo.txt provided by other users, I wrote my own customizations: Add-on scripts to adapt the versatile command-line application to my own workflow by introducing shortcuts as well as totally new functionality, and more highlighting for additional syntax that I've invented. Since other users apparently faced similar issues and questions are coming up regularly on the mailing list, I've added a test suite for my add-ons and published my extensions as a separate GitHub project. With this, I can now simply refer such questions to my implementation.
- 22-Nov-2011 I18N for nowrap / vim_dev
- Reported a small issue within the Cygwin terminal to the author, and offered advice on how to make his tool work with <Tab> and double-width characters. Shortly thereafter, a similar discussion came up on the vim_dev mailing list, where I educated the OP about the differences of character widths, number of characters, and bytes to represent the character in a particular encoding.
- 18-Oct-2011 CamelCaseMotion fork
- Noticed through a blog article about Vim plugins that I found through vim.reddit.com that someone named bkad had created a private fork of my plugin, fixed a small bug, but hadn't sent this to me. I contacted the author just as he was discussing with a collaborator how to contribute back the changes.
- 14-Sep-2011 Todo.txt
- New official release v2.8 that where almost the entire functionality was provided by me. I got a big thank-you for pushing the project forward in the release message.
- 30-Jul-2011 vcscommand.vim
- Contributed three patches to this popular Vim plugin. As I have done more invasive enhancements that I so far use privately (and intend to contribute back), I soon decided to use Git instead of my home-grown writebackup to maintain my modifications in separate branches. This turned out to be so beneficial that I will use GitHub clones for all future contributions to Vim plugins.
- 29-Mar-2011 Vim
- Found out by chance (while browsing other people's public .vimrc configurations) that someone named Lokaltog had used the logic from my StatusLineHighlight plugin for a similar purpose, and has credited me in the comments.
- 04-Aug-2010 Todo.txt
- New official release v2.7 that contains my cleanup of help and error messages, many small bugfixes, several improved commands, and highlighting of done tasks. Overall, I committed 39 out of 42 changesets.
- 25-May-2010 Todo.txt
- Found a couple of inconsistencies and nuisances while adopting this simple script for task tracking. Submitted a set of bug fixes and enhancements (together with accompanying automated tests) via GitHub, which were pulled into upstream a mere four hours later.
- 30-Jun-2009 English Wikipedia
- Commenced editing on Wikipedia by adding explanations to the Vim part of the Text editor support page, then discussed and implemented consolidation of locations for the syntax highlighting script, and added my personal updates and enhancements.
- 07-Jun-2009 Mark
- Continued Vim script which was abandoned by its original author. Added many bugfixes and modernized the main algorithm.
- 24-Apr-2009 Ubuntu
- Reported problems with spinning laptop fan, system hangs and other problems experienced on my wife's Ubuntu 9.04 installation. Contributed improved workarounds and help to other affected users.
- 25-Feb-2009 Vim
- Reported unset v:warningmsg. Submitted patch on 03-Mar-2009. Included as patch 7.2.146 on 18-Mar-2009.
- 15-Feb-2009 Firefox MAF addon
- Submitted a bug and an enhancement request. Latter was fulfilled on 26-Mar-2009.
- 04-Feb-2009 Vim
- Submitted patch to :diffpatch command. Included as patch 7.2.105 on 11-Feb-2009.
- 21-Jan-2009 Vim
- Submitted patch to obsolete help text.
- 03-Jan-2009 OLPC XO
- Published first enhancements, patches and customizations.
- 09-Jul-2008 Vim Tips Wiki
- Another collaborative refinement of a Vim Tip, done less because I actually needed the functionality, but for the fun of working with user Lpb612.
- 20-Jun-2008 Vim
- Added own observations to bug report, then implemented enhancement. Included as patch 7.2.051 on 28-Nov-2008.
- 09-Jun-2008 Vim
- Reported, then fixed bug with partially reversed strings. Included as patch 7.1.325 on 20-Jun-2008.
- 06-Dec-2007 Vim Tips Wiki
- Started contributing to the new home of the Vim Tips by improving the 2006 tip of mine; this led to a beautiful collaboration with user Fritzophrenic.
- 09-Aug-2007 fuzzyfinder.vim
- Reported bug. (Reported some more after that.)
- 01-Aug-2007 Firebug
- Posted solution to common update problem in newsgroup.
- 03-Jul-2007 Linklint
- Adopted abandoned project and published first bugfixes and enhancements.
- 10-Mar-2007 writebackup
- After years of helpful use, published first of the many little helper scripts that I am continually developing and tweaking in order to become more efficient. Had to decide on a license and delivery strategy. Most of my scripts were too small to warrant the formalism of Sourceforge, and GitHub hadn't been invented yet, so I put them into a download area on my website.
- 2007 - … Vim scripts
- Reporting and sending bug(fixes) and enhancements to many script maintainers.
- 17-Jan-2007 Vim scripts
- Emailed bugfix to script maintainer.
- 05-Dec-2006 Vim
- Reported tr() bug. Was fixed two hours later as patch 7.0.175.
- 03-Nov-2006 Vim tip
- Published first vimtip #1376 Folding of vimscript functions.
- 24-Oct-2006 IndentConsistencyCop
- First major Vim script with algorithmic computations in a functional programming style, comprising 100 kb, 1 kLOC, 80 functions.
- 18-Sep-2006 redocommand
- First published Vim script.
- 20-Nov-2003 JWPce 1.42
- Mailed enhancement to enable Kanji input through Windows IME. (Never heard back.)
- 22-Sep-2003 TWiki
- Posted fix for broken rcsdiff under HP-UX when using prebuilt SD-depots.
- 07-Aug-2003 TWiki ExplicitNumberingPlugin
- Submitted patch for repeated page view numbering bug under mod_perl. Patch accepted 12-Aug-2003.
- Mar-2003 TWiki
- Posted problem report and later fix for running TWiki under mod_perl.
- 14-May-2002 Vim
- Added a visual mode mapping to vimtip #1: the super star.
Ingo Karkat, 28-Mar-2009; last update 06-Aug-2020