State of Neovim 2024: The Giants Have No Timeouts What will you get out of this talk? backstory motivation current status plans Ten years No commits for 4 days. Is Neovim dead? – reddit user (2015) Me Justin M. Keyes https://sink.io/ Nvim maintainer since 2014. Roadmap https://neovim.io/roadmap/ Vision https://neovim.io/charter/ Docs Release management Decision fatigue Previous talks 2016: https://youtu.be/9Yf3dJSYdEA 2017: https://youtu.be/wQh7saOHE5g 2019: Vimconf keynote https://youtu.be/Bt-vmPC_-Ho 2021: Neovim roadmap https://youtu.be/4bTj0yBzrLU 2022: State of Neovim https://youtu.be/IFACLbpqRB4 2023: State of Neovim https://youtu.be/pmLn5pFu27k ...
Where is my mind (2023)
Snapshot of the (technical) problems I’m thinking about right now: AWS: Logging is a special case of telemetry (or vice-versa). Unify telemetry logging client. Incremental step: logging system is a “sink” for the telemetry, and the source of truth for querying metrics logs. Reimplement the metrics “collector” to be browser-compatible. Currently it uses nodejs async_hooks. Need to get this done before another 6+ months of technical debt accrues. 1 week of work. Redevelop the API for capturing a telemetry “span” (user workflow). 1 week of work. WASM-based code sharing solution. 1 month of work. Strategy for scaling development across 20+ teams (100+ developers). Monorepo, libraries, horizontal, LSP: all of the above. 2 weeks of work. Trying to design and develop software while working a Wendy’s drive-thru. Every day. Neovim: Finish talk for Neovimconf 2023. Understand what happened in the last 12 months, be able to explain and demo the most interesting contributions. Deadline in 5 days. 3+ days of work. Finish vim.uri. 1-2 days of work. Finish [optional] support in vimdoc parser. 4 hours of focus time. Finish pkg.json (packspec) specification. Started 4 months ago, idling for 3 months = risk of decay / lost investment (mis-timing, lost momentum, misalignment with key parties). 1 week of work. Implement function name linter. Too much time spent validating function names. 1 day of work. Rename various APIs before 0.10 release (imminent). 2-3 days of work. Need to do a pynvim release. 2 hours of yak shaving. Need to do a node-client release. 2-4 hours of yak shaving. node-client code needs a linting overhaul. 2+ days of work. node-client getNvimFromEnv() needs to work without $PATH. 1 day of work. Rework Nvim --remote interface. 2 weeks of work. Plugins: Make a fugitive-like minimalist wrapper for gh. Prototype = 1 day of work, Beta = 1 week of work.
Task management
Problem Task management is how you decide when and what to work on—in life, business, projects. In compsci terms this is a priority queue. But unlike a textbook priority queue, the dimensions and measurements are unspecified, amorphous, and dynamic. And the cost of failure is high: The most pernicious and subtle bugs are from mismatched assumptions made by authors of various components. — Fred Brooks, MMM For many this is like diet fads: try lots of hopeless methodologies, give up, repeat. “I need to rank EVERYTHING” is not a tractable framing if new tasks arrive every week (day? minute?). Yet many task-tracking tools have features to “help” you (globally!) rank items. ...
VimConf 2019
I presented a keynote at VimConf 2019. The organizers wrote some notes here. The first part of the talk is a sermon about the state of text-editing art. The rest is an exposition of recent Neovim tech. The main themes are: System vs Application Legacy paradox Leverage = (impact / cost) There were too many slides. I spent years thinking about the topics, and weeks building the presentation. But I ran out of time. ...
Vim's social life
Vim is a shell command, and its fast startup supports that use-case: shell tasks, whether ad-hoc (interactive) or orchestrated (pipeline, script), are cheap and thus frequent. Yet Vim’s startup story is relatively unpolished. We expect shell tools to consume standard input (“stdin”) and emit to standard output (“stdout”)—but Vim supports this awkwardly, at best. The endeavor is never mentioned in Vim tutorials, including the “Unix as IDE” hymnals. And it is puzzled out of Vim’s documentation only by careful inspection. ...
Nvim FFS! Features, Future, :smile!
video (4 parts): https://youtu.be/wQh7saOHE5g https://youtu.be/PRfDemv4S9Q https://youtu.be/9ArKIm35zSk https://youtu.be/SgTfsueT5Ok review: Nvim goals push Vim into new territory more-hackable vim better UX make vim (really) ubiquitous grow the vim community crush emacs Nvim activity in 2017 nvim contributors: 330 (Sept 2016: 262) total commits: 9251 (Sept 2016: 6479) since 2014 vim total commits: 7732 (Sept 2016: 6553) since 2004 about me Nvim maintainer. I’m nobody. That’s a feature. Nvim goals: initial fundraiser 🤏 New, modern multi-platform UI. oni? ✅ New testing UI written in Lua ✅ New plugin architecture, with legacy compat layer ✅ Full port of the editor IO to libuv ✅ Cross-platform job control ✅ Distributions for Windows, Linux, Mac. «« Nvim 2017: hackable vim hackable vim: https://github.com/neovim/neovim/wiki/Related-projects 24 API clients 18 UIs easiest way to install vim on any major OS https://github.com/neovim/neovim/releases Nvim 2017: API clients new API client for racket https://gitlab.com/HiPhish/neovim.rkt refactored node client: https://github.com/neovim/node-client Nvim 2017: community Drew Neil’s Modern Vim http://vimcasts.org/blog/2017/05/working-title-modern-vim/ Homebrew core formula http://formulae.brew.sh/formula/neovim 100k installs https://brew.sh/analytics/install ...
Performance Profiling
Random pausing is all you need: https://scicomp.stackexchange.com/questions/2173/what-are-some-good-strategies-for-improving-the-serial-performance-of-my-code/2719#2719 https://www.youtube.com/watch?v=xPg3sRpdW1U&feature=youtu.be http://gernotklingler.com/blog/gprof-valgrind-gperftools-evaluation-tools-application-level-cpu-profiling-linux/
Terminal Control
Unix “TTY” terminal programming is a hodgepodge of tribal lore. There’s no “Best Practices” guide nor canonical “quick start” tutorial. Even Bash (the shell) has wooledge and set -x. But terminal programming is a tenuous détente of undocumented conventions. This is my attempt to present a low-friction, self-contained tutorial for tinkering with your TTY and quickly seeing results. You can skip to the Two-minute tutorial to start trying things immediately. Tooling The tools for working with terminals are essentially: ...
Neovim philosophy and features
video (3 parts): https://youtu.be/9Yf3dJSYdEA https://youtu.be/dKNLiY-mb28 https://youtu.be/wT-M6dEwcJ0 nvim by et al. based on Vim by Bram Moolenaar et al. about me I am nobody. That’s a feature. 10+ (???) years of software dev experience 5 years of “serious” Vim My goals for Nvim: Ubiquity (IDE, browser, OS form-fields) Remove friction (cross-plat inconsistencies, defaults). nvim contributors: “et al.” nvim contributors: 262 6479 commits since January 2014 vim (3 years of VCS) contributors: ~323 $ git log --since='3 years ago' \ |sed -r 's/(Problem|Solution).*(\(.*\))/\2/'|grep -E '\(.*\)' vim (12 years of VCS) ...
Artifact System
Software projects produce artifacts—a concept less particular than package which has a version, manifest and structure conforming to some package system. Package systems are smart, and thus complex. The key feature of an artifact is that it is dumb. Package management is a hard problem, with lots of half-broken systems serving particular ecosystems: Cargo for Rust, pip for Python, NPM for node.js, Maven for Java. Artifact systems are not so well-studied, though the concept is high-leverage: unlike package systems, an artifact system can: ...
Economies of scale and self-interested cooperation
Quietly tucked away in the last slide of a 2011 Netflix cloud talk (Mr. Cockcroft talks a lot): Cloud Standardization? Cloud features and APIs should be a commodity not a differentiator Differentiate on scale and quality of service Competition also drives cost down This is a claim that competition and standardization are desirable and beneficial at the individual level—an insight perhaps also employed by Google with its Chrome and Android strategy. ESR made the case that there is economic motivation for sharing code. This was corroborated years later by OpenNT: ...
What I've Learned From GitHub
technically superior plugin isn’t always the most popular. hard to gain traction with users. signify is better than gitgtutter, but it didn’t hit the front page of HN sneak is better than seek, but seek hit the front page of HN plugins with better marketing/branding don’t always win. sneak has better branding. (but signify doesn’t really do much to market itself) you can announce the same thing every month and it will be completely new or at least newly-compelling to many people. each time I announced on /r/vim I gained about 50 stars in about a week, which then returned to the normal level of about 1 star every other day. most people don’t check /r/vim every day. ...
The Philosopher's Pile of Stones
The generalization of this is “communication”, but trying to focus on “improving communication” leaves important stones unturned. Like “end poverty”, it is a mission that begins without a fully-formed thought. There is no supply of communication that can be buttressed; rather, to improve communication, instances of the abstract must be identified. Shannon crystallized this as the problem of encoding information. We know from practice of information theory that information encoding benefits from semantic awareness: ...
How to make Vim like Sublime Text
disadvantages: I became familiar with Vim very gradually. By the time I found out about pico, I had long been editing X86Config with i and :wq. I was thankful for the syntax highlighting and remote availability writing C and Java on a Solaris ssh account. I embraced visual-block-mode during late nights at the CMOS lab after editing hspice input vectors manually became intolerable. I internalized [hjkl] by using Gmail shortcuts. And on OS X, actively-developed open source editors are few. ...
Java parser
I wrote a toy parser (or rather a parser specification in the syntax of a parser-generator) for COOL, and I’m wondering if mature, popular languages actually use these things to generate their parsers. The PMD project makes use of a (modified) copy of the JavaCC parser-generator definition for the Java grammar. Inspection of that file reveals the initial 1997 timestamp by author Sriram Sankar. According to Advances in Software Engineering, “The Java 1.1 grammar was developed by Sriram Sankar at Sun Microsystems and a copy of this grammar can be found in the distribution”¹. The syntax of JavaCC at a glance is similar to yacc, CUP, bison. In the PMD Java.jjt file, the familiar token declarations start around line 234, and the grammar starts at line 1122. ...
Brendan Eich comments on Dart, JavaScript
I stashed this away long ago and can’t find the source (HN? reddit? a blog?). Funny how lossy the web can be… Brendan Eich: Performance gaps in JS engines get filled all the time. This is different in kind from potentially adding a second VM, requiring cross-VM-heap cycle GC, etc. See https://lists.webkit.org/pipermail/webkit-dev/2011-December/018811.html Dennis described some of C’s flaws (which JS inherited) in typically humble style here: http://cm.bell-labs.com/cm/cs/who/dmr/chist.html JS has too many gaffes and WTFs, but at this point, for most developers, they are (mostly) avoidable paper-cuts. All but: ...
Low-level programming discourages automatic optimization
Frances Allen: C has destroyed our ability to advance the state of the art in automatic optimization, automatic parallelization, automatic mapping of a high-level language to the machine. Example from HN user ‘waps’: one example [vs Haskell] that C can never hope to optimize : deforestation. Before optimization : the programmer requests a list to be created, fill it by calling functions and then passes the completed datastructure list (or tree) along to another function, which executes commands according to what the list contains. ...
Impossible Ideas
Corollary to Paul Graham’s frighteningly ambitious startup ideas: a list of impossible ideas that interest me personally. ubiquitous, secure, painless (one-click) bitcoin payment ubiquitous, effortless, anonymous, encrypted communication painless, anonymous, decentralized internet access effortless expense/receipt management effortless information management / mind mapping Working on the impossible is like exercise: if you produce something half good then you have something better than any existing similar product.
Piñata Programming
We’ve all been there, perhaps some never leave: Having wandered the halls of a haunted debugging session for most of a day, you happen upon a room containing a piñata. In delirium and desperation, you ctrl-v and f5 the piñata until a cookie falls out. Somehow, your mad key-strokes have busted the ghost bug; time to go home, yay! Sometimes software code doesn’t fit perfectly. Third-party integration, protocol bugs, opaque libraries, timing and async bugs, and Katamari technical debt preclude a true understanding of the cause of the program behavior. ...
Computer security
hardening your system: remove/disable “root CAs belonging to the U.S. government” on OS X: “DoD Root CA 2” and “DoD CLASS 3 Root CA” why? carnivore, echelon, Clipper chip, NSA data center, (update 2023) may become illegal in the EU: eIDAS hardening network access: set up port knocking https://github.com/moxie0/knockknock
You say priori, I say posteriori
Levels of aspiration: Arguments like “but it works” or “it gets the job done” are tell-tale signs of someone happy at the lowest level of the technical hierarchy and your cue to just quietly back out of the debate. —DHH I bet you over-engineered your startup: Of the three startups I've worked with, two of the three were ridiculously over-engineered monstrosities that were way over time budget. It was clear that the CIO/CTO wanted to do cool fun stuff and not build a marketable product. The other was cobbled together with completely shit code, was constantly breaking on releases, and was glued together with perl scripts. They're now publicly traded.
Talk: Silicon Carbide and Body-Machine Interfaces
Notes from Dr. Stephen E. Saddow's presentation, "Silicon Carbide Biomedical Technology for Bone Implants, Stents and Brain-Machine Interfaces". Electrical Engineering Department Department of Molecular Pharmacology and Physiology University of South Florida Abstract: Amorphous silicon carbide (SiC) has been used for several years as a non-biofouling coating in biomedical devices such as coronary stents and bone implants. However, up to recently, the biocompatibility of single crystal SiC, which presents appealing bio-sensing potentialities, has been in question. A comprehensive study of the biocompatibility of this wide band-gap semiconductor has been performed with extremely promising results which show the higher performance of SiC in bio-environments with respect to Si, the leading semiconductor, and introduce SiC into a unique class of materials that is both bio- and hemocompatible. Goal: avoid glial scarring Carbon electrodes: replace gold/metal electrodes which can become toxic. Semiconductors (Si): long-term (unlike polymers) won’t corrode (unlike metals, eventually) …but is it biocompatible/hemocompatible? Silicon Carbide (SiC): ...
Singularity
human singularity: compulsive excellence (Fountainhead) neuro-chic: designer DNA trivializes current human cognitive limiations, perhaps changes human nature such that current human inclinations are obsolete technological singularity: AI, self-replicating nanobots = telekinesis energy singularity: near-perpetual motion One who overcomes his apparent nature is far more interesting than one whose nature is effortlessly extraordinary. The extraordinary are the drivers of stability and improvement.
The Most Interesting Things
In the spirit of Hilbert’s problems, here are the most interesting things I currently know of: Emergence fundamental (non-contact) forces & particles (muons, quarks, …) ⇨ fluid dynamics, etc. Collatz Ecologies “how structure emerges out of iteration” “When stable patterns emerge in some iterated system, it’s possible to build new systems on top of the old ones. Moreover, these new systems can be seen as independent of the old ones.” Collatz conjecture: Pick any (nonzero, whole) number. If it’s odd, multiply it by 3 and add 1; if it’s even, divide by 2. Now you have a new number. Apply the same rules, get a new number and keep going. The conjecture predicts that no matter what number you started with, eventually you’ll end up at 1, at which point you’re stuck in a little loop: 1, 4, 2, 1. ...
Why write?
It is a question that you will face, should you deign to start a blog (or column, journal, etc.). EUTHYPHRO: Why do you have a blog? YOU: Because it exercises my urchin mind and I want to share my meager kibbles with SearchEngineGod. Weak answer. Too cliché. We must find a better answer. 10 weeks later… YOU: Friend, ask me “Why do you have a blog?” again! EUTHYPHRO: You still have a blog? ...
The Holographic Principle
I am reading about and attempting to discuss the holographic principle, a conjecture in theoretical physics that the three-dimensional universe is a projection of a two-dimensional (i.e., surface area) encoding¹. This would imply that all the particles and properties and everything of our universe may be compressed substantially without losing information: reality is a (logical, not literal) projection of a very large bitmap. The theory also could “explain” surprising properties of the universe, such as the discrete (i.e., quantum) nature² of physics, the origin of gravity, and information density. ...
Learning Asymptote
Learning without thought is labor lost; thought without learning is perilous. - Confucius It is said that some people are “quick learners”. Does that mean they can learn anything quickly? No step in the path of learning challenges them? No; rather, they learn quickly compared to others, but that quickness is nevertheless measured in mortal units. For slow and quick learners alike, the process of learning requires some time and concentration. Over time, you can master your shortcomings and adapt to a less-awkward process in order to reduce friction; yet learning continues to be even for the shrewdest autodidact frustrating and slow, compared to what it might be if we had a less-cobwebbed conduit by which to hose the inner sanctum of cognitive retention. ...
Tomato in, IPCop out
It even shows inodes usage. A 100 MHz P1 was overkill. I've bid vale to my beige-box IPCop firewall. I had built it in 2004 out of a circa-1996 Pentium machine and a couple NICs. For 6 years I've wondered when this little choo-choo would die... it never did. Some neat things about IPCop compared to its contemporaries: usage graphs, port forwarding, intrusion detection, dynamic DNS; plus other things I never used, such as traffic shaping. ...
How to call a Cygwin bash command from Windows CMD
Using Cygwin on Windows, sometimes you need to run a bash command or script from the Windows command line (CMD, DOS, shell). This is particularly useful if you want to use the Task Scheduler instead of messing with cron on cygwin. If you’re going to schedule tasks on a Windows system, then the Windows Task Scheduler is probably the sane way to do it. To run a bash script or command from outside of cygwin, you need to pass it to the bash executable with a little prep work. That “prep work” is contained in the following script (adapted from here), called cygrun.bat: ...
Sunset Rubdown
Big Time invented a new adult beverage à la plage. Its working title was “Frankenberry”; the release title is “Sunset Rubdown”. Drink recipe: a good splash of Malibu coconut rum a grave splash of Cointreau (triple sec) a lil’ can of pineapple juice put the ice in now a nice bath of sangria on top The bedrock of ice breaks the fall of the sangria, and the two forbidden flavors are stratified like an ice-cream cake sunset. ...
The Secret History
Tartt, Donna. The Secret History. New York: Knopf Books for Young Readers, 2004. The original copyright year is 1992, so that explains why everyone uses payphones, and most knowledge–or rather, information–still, is available only at a premium, that is, by the study of untranslated primary texts, or contact with the educated. The book is dedicated to Bret Easton Ellis; it turns out that Ellis mentions the characters in one of his own novels. I wonder if the market for cocaine-rusted LA kids with gray-colored glasses has been saturated by Ellis and Tartt? It must be fun for method writers. ...
Planes
There is a plane at the end of the road on a planet. I found it by driving as far as possible. I drove undeterred towards the bushes. I followed the path to an opening. I pointed towards the water. I watch the silent traffic on the bridge. Palm trees with wild hair watch the water and the traffic. The big flat plain of water is a hole in the land, a dip in the high frequency, a pending project, an ignored part, ear-marked but forgotten. Jets poke into the sky above from the far side of the clouds, whine, then leave, behind me, and the air is quiet again. Tall brown grass flutters in the water. The white sunlight is comprehensive. The clouds and the blue of the sky cup the flat world. I am trapped under a bowl of infinite perimeter. There are many distractions in the bowl. A jet pushes through the clouds, approaches me, flies over me, leaves me, lands. ...