Dotfiles & Vim

My “dotfilesrepo is a decade old now, and it has been interesting to see a progression through

  • .vimrc (ye olde days)
  • init.vim (“modern” vim)
  • init.lua (All-in on Lua with NeoVim)

(is there a moral to this story? perhaps “don’t be surprised at how much practices and tools change over time”, and “try to identify things that don’t change”)


I had the opportunity to use this excellent tool/service/platform over the last month.

I won’t go into details about features etc (maybe later?) but the part that impressed me was how the core concept of breaking down everything into “resources” and “streams” was reflected at all levels.

It’s one thing to represent logs and metrics and so forth this way. It’s another thing to have it show up in how billing is handled, or diagnosis in response to support questions.

It is an example of a deep, recursive metaphor. I am reminded of “everything being a buffer” in Emacs, or “everything being an object” in Pharo, etc.

This comes up in other domains too — a tradeoff between this sort of uniformity and simplicity of structure, and a more “surface-level simplicity” that hides complexity of structure.

The latter can’t be extended, can’t be accessed or customized, but tends to win out (unfortunately) — so it is rare and pleasing to encounter something that can.

Tools for Thought

If you like “this sort of thing“, you should watch this talk by Mark Bernstein.

It talk isn’t a TED talk, it isn’t on StrangeLoop, but it might be the best overview of this area yet.

Touches on lost tools, lost ideas, some things you thought were recent but aren’t, etc.

Full set of slides here.

If you’re still curious, I’d suggest looking at his homepage, and plug the excellent tool that he’s been building and improving over decades, Tinderbox.

Some screenshots of slides1, to whet your appetite:

  1. Though, as he points out, given the pitiful computational power of that era, the ideas are much better than the way they appear as demos on old hardware.

The making of a friendly robot

Learnt more about the “origin story” of Roomba from an article in the WSJ this weekend.

  • First sold as a product 20 years ago
  • Joe Jones joined the AI pan 20 years before that
  • Various hiccups: lab lost funding, he was fired from the next gig
  • Rescued from irrelevance by a serendipitous Pepsi ad
  • First prototype was made with Lego (!)

Extension Languages

Found this old post by Jon Skinner on why SublimeText went with Python.

If you’re building an application, then your users will get much more out of it if you given them a plugin API. For Sublime Text, I settled on Python as the extension language. In fact, I think you’d be mad to choose anything else.

It’s well-reasoned, and considers all the alternatives at that time.

What about JavaScript? It’s an underrated, elegant language, with a huge number of people acquainted with its syntax. Its weakness is that it’s not used as a general purpose language, so there’s no selection of libraries your users will be able to build on. No libraries and no built-in standard APIs (file system access, I’m looking at you) rule JavaScript out.

However, it’s also clear how, 14 years later, the landscape favors JS/TS as the scripting language for an editor/IDE like VSCode.

Lua is another candidate, which has a lot of uptake in games. It has a very small code footprint, and excellent runtime speed. However, its paucity of libraries, weak Unicode support, and small-medium user base make it hard to justify as an extension language for desktop applications.

Ditto for Lua in Neovim today.

Use an outliner

  • I’d say pick one of Workflowy or Roam
  • I’m biased towards Roam because
    • I already use it
    • It works for me
    • It has a lot of “power features” that go beyond jotting down thoughts
  • But … Workflowy is “good enough”, especially to get started somewhere with something, which is a whole lot better than what I did for a decade before, which is … nothing
  • Some nit-picking reasons I prefer Roam
    • Each “bullet” has its own timestamp and version: I use this to figure out things like “time taken”
    • Text can be formatted to have headers or separators: I find this useful
  • Pick one of them and start using them. If you’re totally new to this, I’d recommend Workflow to start with.
  • (Yes, I wrote this in outline form and am sharing it as such …)

Wherever I may Roam

Poetic license on the title aside, I’m doubling down on Roam.

“Sometimes you have to let things go…” and so on, but that’s what I did earlier.

I spent a year trying out all kinds of alternatives, and figuring out their pros and cons.

In the end, I concluded, empirically-but-subjectively — this being for me and my use cases, yours may be different — that Roam is uniquely well-suited to my way of thinking.

Since then, things have gotten better, with two big changes:

  1. no limit on new graphs, and
  2. the availability of encrypted graphs.

Previously, I was reluctant to use Roam for “work stuff” — now I know I don’t have to worry

Previously, I was reluctant to adopt separate graphs for separate mental silos, because “hey, I don’t want to waste my last remaining graph on that!”. Now, that isn’t a concern.

There will always be other products around, and people will continue to make decisions based on a variety of factors, and they should.

I would like to see a couple of features (again, this is from my personal experience, and I have no expectations of seeing them fulfilled anytime soon).

It would be good to have the ability to have different graphs open in different tabs. Not a very big deal because I don’t switch that often, and if I did I could use different browsers, but … it would be nice to do this easily.

Next up: more spaces in the document — or at the ability to carve out at least one additional space to split nodes on to. I understand this is hard and must be introduced carefully, if at all. If a general solution is too hard, three is a better number than two (before anyone points it out — yes, in a way, the sidebar is a third space, but c’mon).

I will say that for a product that affords a dizzying amount of creative flexibility as Roam does, you need a spare aesthetic and I commend the development team for having the discipline to stick to it.