Emacs Pair Programming - Innovation-Week Q2/2022

2022-05-01 Software-Craftmanship Culture Emacs Innovation Lisp Nerdy Remote Tips & Tricks

We (at Community) just had another Innovation-Week. I was actually working on generating pact-files from frontend code and then generating openapi spec files from elxir backend code and then automatically check that the frontend pact is compatible with the backend openapi spec while running the build pipeline for the frontend(s)/backend.

But this is not what this blog post is all about :).

While working on this Geoff and myself also decided that it is a good opportunity to sharpen the tools and take remote-first pair-programming to the next level.

There are (obviously) lot’s of solutions available (and more like VS live …), but … on top of being distributed systems and remote-first software engineering craftsmen, Geoff and myself also like our emacs (Emacs Makes All Computers Special).

And now it’s time to nurture the nerd …

We looked around and found a couple of good/interesting solutions to support pair-programming in/with emacs. At the end we decided to take a look at lockstep, togetherly and floobits.

lockstep and togetherly are non-commercial and a kinda old (last commit was a couple of years ago), but they both work. floobits is a commercial solution. You can try it with a couple of free public workspaces, but if you want/need private workspaces you need to subscribe to it (USD 15/month for 5 private workspaces).

We tried and tested this by setting up an AWS instance and then SSH into the instance and then starting multiple emacs sessions on the same file/buffer. We then also tried to start a/the main emacs(-daemon) on that box and tried to connect to it from our local boxes.

Disclaimer: We spend about an hour on every solution and if we were not able to make it work by then we moved on (means if we did not make something work and/or did not find all solutions to all problems, that’s probably our fault (or the other way around: the tools might have capabilities that we missed or were not able to make work)).

Here is (in no particular order) what we found/think …

Lockstep

  • Very easy to install and then very easy to use
  • Just start a daemon and then use two emacsclients to connect to the daemon
  • If you then open the same file and start lockstep with M-x lockstep you can see each other typing
  • Even on the same line!!!
  • It is very fast and responsive
  • But there is no support to see each others cursor
  • And we where also not able to connect to the daemon from our boxes (which is not really a surprise, because the daemon was never build to be connected to from the outside)

Togetherly

  • Also very easy to install and use
  • You just have to start emacs on the AWS instance and open a file and start a/the togetherly-server with M-x togetherly-server-start
  • If you want to run it just on the box you can use localhost and any available port
  • You then start another emacs on the AWS instance and use M-x togetherly-client-start to connect with the server on the given (local)host:port
  • To join you are also asked to give yourself a screen name
  • And then you end up in a buffer where two people can collaboratively edit a file/the source-code
  • But this time you can also see each others cursor and regions and there is a very nice feature/function that is called M-x togetherly-server-comehere that you can use to make the other person join you on a certain line in the code
  • If you want to edit another file the person that runs the emacs with the server, just need to open the other file and run M-x togetherly-server-start again. But this time you will not be asked to specify a host:port. Instead togetherly will detect that there is already a server running and will just ask you, if you want to migrate the running session to the new file
  • Last but not least (you guessed it), you can also start the server on a publicly available ip-address:port and connect to it from your box
  • Overall very nice and simple and probably what we will end up using for now

FlooBits

  • Looks and feels like the most professional solution
  • But … you need to setup an account
  • And … to use it professionally you need pay for it, because you need private workspaces (to make sure your code is not/does not become visible publicly)
  • And … we were able to make it work, but the workspace concept takes some getting use to
  • And … after you have a shared (private) workspace and you can see each others screen, we were not able to make the cursor work (instead of a cursor we saw that the screen/buffer changed colour)
  • And … we tried the summon feature and where not able to make that work

Means for now Geoff and myself and the other emacs enabled engineers will probably start to use togetherly and will see how far we can go with it.

Happy hacking/pair-programming …