open source - list of contributions
Here are some highlights of my contributions to the open source community (many minor things have been omitted):
- Oct-2024 smartless
- After extensive testing of my change to truncate output in the middle (which gives a better context), released a 2.0 version of my fork, with a cleaned-up repo and new recorded demo.
- Oct-2024 spark
- Released a 2.0 version of my fork with many enhancements (that power several other projects like git logdistribution and todo.sh distribution), with a cleaned-up repo and CI/CD converted from Travis to GitHub Actions.
- Sep-2024 Todo.txt
- The project had almost petered out, and attempts to bring in more people were stuck at the unresponsiveness of the maintainer. I had created a combined PR of 9 of my outstanding contributions (from the past 2 years!) to make it easier to review, but even that didn't help. After all of my pleas and warnings went unheeded, I had basically given up and decided to simply keep my fork, and the first push to that finally got me an approval and so at least those changes are in now. (We still need a new release and more maintainers.)
- May-2024 git-supersubinout GitHub Action
- My first publish in the GitHub Marketplace of a check that I had implemented (using many of my self-developed Bash scripts) for a common problem at work. In order to run that check as part of our CI/CD pipeline, I've extracted all dependencies and turned it into a GitHub action for easy consumption.
- Apr-2024 tmux-extensions
- For decluttering my terminal output (especially when running commands like builds that produce walls of text), I've implemented tmux-split and tmux-less; the former runs a single command in a maximized split pane, the latter additionally captures the contents and shows the first and last lines in the pane that launched the command (as a summary).
With that, I've created makeLess and mvnLess extension commands that override the default make and mvn commands and leave behind a short, easily browsable terminal history, while still referencing the full captured outputs.
- Mar-2024 EditorConfig
- Submitted a missed default exclusion that simplified the indent verification via the Maven EditorConfig plugin at work.
- git-extensions
- The development setup at work relies heavily on Git submodules to bind together product components and define a release. I created several new Git subcommands to comfortably browse and navigate submodule changes (e.g. to view submodule commits changed in a superproject revision), and automated the reintegration of submodule changes, first starting with a simple process based on the manual steps, then finally doing a full integration that performs a CI/CD verification on forward-integrated branches, waits for success, and then quasi-transactionally pushes everything at once. This allowed me to quickly apply metadata changes to 30+ repos at once, and to safely commit changes during periods of high churn.
- kubectl-extensions
- Based on work requirements, I've added filtering of log output, Pod queried by age, persistent volume and environment variable / secrets lookups.
- Software
- Added update checking for software definitions that had previously been persistently accepted and now have items that aren't installed yet. This also is integrated with my update checking enhancements for Python and Node.js packages; i.e. I get a login notification (and optionally emails) just as I would for system updates.
Added types for Git configuration (system-wide and user), Git repositories (to clone and run install commands on), tar and zip archives (to extract at a specific location), and icon installation.
- Jun..Jul-2023 Maven Wrapper
- Submitted two bug fixes around quoting and error reporting that affected my development system and the scripts I'd built around Maven.
- Jan-2022 Vim plugins
- I had started to convert my Vim plugin sources from my own writebackup tool to Git repositories hosted on GitHub back in 2017. Though the conversion is half-automated and supported by a cheat sheet, it still takes about 10 minutes per plugin. I did the conversion whenever I touched a project, but there wasn't that much active work on all Vim plugins, so it still took more than four years (and a final three-day dash powered by additional automation to convert the last 53 projects) to get all 120 plugins (and 57 unreleased ones) done. Now all of my Vim plugins can be easily consumed from various plugin managers (without downloading the vimball archive from vim.org), and users can open issues and submit pull requests instead of contacting me via email. And of course, I can consistently use the feature branches and small frequent commits I've grown so fond of for development.
- Oct-2022 editorconfig-vim
- Submitted additional configuration option around Vim's special softtabstop indentation feature.
- Feb..Jun-2021 Software
- After finally getting a notebook replacement at work, the Ubuntu versions on my workstations outdated, and the intention to move my private stuff to a separate notebook, I was going to do a lot of Linux installations, so I built an abstraction layer over various package managers (apt, yum, pip, npm, etc.) that allows selection, installation, and configuration of software packages. Previously, I had electronically logged all installation and customization actions, and this was a step up from manually going over that list from the predecessor and reapplying it to its successor.
I tried to automate as much as feasible, and developed a toolbox of reusable commands that supported installation (e.g. deb-download-installer, using either my local installation repository or a provided URL to download and update it) and configuration (commands to add autostart entries, cron jobs, icons, etc. for script actions and other commands to add notifications that are shown on each login until acknowledged, to manage the few manual configuration tasks that could not be automated).
I split the software definitions into personal and work-related software (the latter also helped colleagues who were also setting up their new notebooks). The application was so helpful that I extended the scope from Apt / Ubuntu to Yum / CentOS (the distribution of most of our test and cloud systems) and replaced a set of automated installation queries I had developed earlier with software definitions for the new application, benefitting from the nice definition DSL and features like dependency handling and grouping. (The previous queries ran every time I logged in, resulting in a small delay each time, whereas the software setup would only run once, and could later be manually invoked to install additional items.)
The widening of the application's scope brought a modular design, where additional definition types could be plugged in via external scripts. I later found many more useful types, and as there were easy to add (I did several large refactorings of the main application to enable that), I went from 3 hard-coded built-in types to 29 type extensions.
- Jan-2021 Apache ActiveMQ Artemis
- Found a bug in the precedence of configuration properties (which affected a product at work), submitted a fix, and defended it against its early dismissal.
- 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-all
, git-dev
(for work) and vimrc-ingo
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.
- kubectl-extensions
- 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.
- Todo.txt
- 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!
- Vim
- 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 13-Oct-2024