Pair神器 - Remote Pair Tool
什么是结对编程
“结对编程”是我司每天都会进行的一项实践,通常由两个人坐在一起,在同一台电脑上,一起开发某个功能或者解决某个问题。
在结对的过程中,两个人会进行强烈的交互。比如一个人写测试,另一个人写实现让这个测试通过。
在每一个时刻,只会有一个人在敲键盘。
结对时可能会遇到的一些困难
由于两个人要坐在一起,且共用一台电脑,难免会有一些不方便的地方。
比如:
快捷键和配色
- 我想用Idea默认快捷键,而我的同伴想用Vim快捷键(通过Idea Vim插件)
- 我有一些常用的快捷键,但同伴的电脑没有设置(并且也不想设置)
- 我想用黑色背景,而同伴习惯白色背景
两人共用一台电脑,就意味着一个人或者两个人的妥协,而顺手的快捷键设置和配色对开发效率大有帮助。
隐私与个人事务
- 我不想看同伴电脑上的隐私
- 我们在同伴的电脑上工作,但我需要随时关注我自己的邮件或者IM上的信息
距离
- 我需要与客户一起解决一个问题,但是我在中国,客户在澳洲
- 我们团队的人员分散在不同办公室,我在西安,同事在北京
只能通过视频交流问题,而编码工作将会交给某一个人或者同一个地方的人完成。
我们需要远程Pair工具
我们需要一个远程Pair工具,它拥有以下特性:
- 每个人可以使用他自己电脑上的编辑器(自己的快捷键、配色、设置等,不需要妥协)
- 每个人输入的内容可以实时更新到对方的编辑器中(保证内容一致)
- 两个人可以同时输入,互不影响(更加自由)
- 不同国家的人一起使用时,同步速度足够快
可能带给我们的变化
提高工作效率
- 坐在一起结对的两个人,由于使用各自电脑上更顺手的开发工具,可提高编码效率
- 相比共用一台电脑,两人可更加方便的并行探索
异地团队
- 同一个团队的人,既使不在同一个地方,也可以方便的结对
- 借助其它语音、视频工具,可做到足够好的交流,不需要再共处一地
在家办公
- 既然团队可异地,何不全都在家办公,只要网络够好
- 可节省上下班时间,不用挤公交,不用吸雾霾
与客户结对做卡
- 由于结对不方便,所以一张卡要么交给我们,要么由客户来做
- 现在可以与客户结对做卡,极大增强与客户的交流
当前市场上已有产品及问题
- floobits
- 优势:1. 可使用多种不同的编辑器(Vim, Emacs, Idea, Sublime)合作 2. 成熟,商业性
- 遗憾:1. 私有项目需要收费 2. 代码需要保存在floobits服务器上(外泄风险)
- etherpad
- 优势:1. 开源免费 2. 支持线上及桌面编辑器(跨平台)
- 遗憾:只能使用它提供的编辑器,而不是使用你习惯的编辑器
- vim/emacs + tmux
- 优势:简单,方便,很多人使用
- 遗憾:只能使用Vim/Emacs
- 其它很多
- 遗憾:多数都只能使用基于浏览器的编辑器,或者一个特制的编辑器
我们的特色
- 免费开源
- 服务器可位于内网(或者自己的电脑上),代码不外泄
- 支持不同的编辑器(Idea/Sublime/Eclipse等),你可以使用自己顺手的编辑器
- 支持两人或更多人协作(可结对,可code-review,可培训)
- 多种模式(光标跟随,或者并行编辑)
- 支持发送消息
哪些是我们不做的
- 语音
- 视频
- 屏幕共享
请与相关专业工具配合使用
目前已经完成的部分
- 服务器(独立运行,或者内嵌于Idea插件中)
- 基于Idea的插件(支持Idea、RubyMine、Webstorm等全系列)
- 多人协作,内容同步
- 多种模式(光标跟随,或者并行编辑)
更多功能还在开发中
技术栈
- Scala
- Netty (NIO)
- Idea Plugin API
架构:单服务器 + 多客户端(编辑器)

使用流程
- 首先要启动一个服务器(独立部署的,或者插件内嵌的),绑定某端口
- 每个人下载好代码(可放置于不同目录),尽量保证文件内容一致
- 在编辑顺中打开项目,通过Pair插件以ip:port方式连接到服务器
- 通过插件在服务器创建或者加入一个项目(一个服务器支持多个项目,供更多人同时使用)
- 一个项目中第一个加入的人为master,当文件冲突时,以他的内容为准(也可指定其它人为master)
- 设置“忽略的文件”,如项目配置文件,二进制文件,日志文件等不应该同步给其他人的文件
- 可要求master将自己的文件内容同步给其他人,保证大家文件内容完全一致(除了忽略的文件)
- 打开某个文件,开始工作(每个人修改的内容都会实时同步到其他人编辑器中)
- 项目默认为“光标跟随”模式,即一个人打开或者关闭某个文件、移动光标等,都会在其他人的编辑器中触发相同的操作(适合一个人写其他人看的场景,如同在共用同一台电脑同一个键盘)
- 也可更改为“并行编辑”模式,多人可同时编辑,可各自打开不同的文件(适合各自探索)
- 可通过插件直接向其他人发送文本消息
下面将以图片方式演示各功能
在一个插件中启动服务器

启动成功,默认绑定8888端口

连接到服务器


创建一个项目,并指定一个名字

选择应该忽略的文件(如配置文件,.git目录等)

打开另一个编辑器,并打开另一个项目目录

连接到相同服务器

加入之前创建的项目

同步文件


在一个编辑器中修改内容后,会实时更新到另一个编辑器


一个编辑器中的光标,在另一个编辑器中会以红色竖线显示

在一个编辑器选中的内容,会在另一个编辑器中显示为绿色背景

将模式改为“并行编辑”

两个编辑器可打开不同的文件进行编辑

实物演示!
Q & A