改变Vim模式时自动切换输入法的方法

VS Code的Vim插件有个很贴心的功能,可以在切换到普通模式时自动切换到英文输入法,而当切换回插入模式时再换到此前的输入法。

设置的方法很简单。先安装im-select,然后配置如下(macOS):

2020-02-19-21-59-02-510Ak5

当然,在Vim里也可以利用im-select实现这个功能。

在VS Code中快速创建PHPUnit测试类的方法

通过单元测试解决问题或者调试代码,可以避开错综复杂的依赖关系、直击问题的核心,从而极大地节约时间、提高效率。

但是,当创建测试类成为一个经常发生的操作时,每次都手动创建类、引入基类、添加测试方法就显得很烦琐。我需要这样一个解决方案,让我可以立即开始着手写测试代码。

继续看...

用Github当图床

微博图床的域名不知道什么时候改了,Google找不到相关信息,经过排查发现原域名中的“ws”改成了“wx”,浪费了不少时间。

于是打算换图床。

继续看...

用鼠须管输入日期时间的方法

原来在Linux下用小小输入法,输入日期时间很方便。换到Mac后,很早就在关注这个问题,直到后来鼠须管实现了嵌入Lua脚本的功能才得以解决。

继续看...

用PlantUML实现ERD

很长一段时间,我们都在用MySQLWorkbench画ER图。但是这个东西有一些缺陷,导致体验很不好。

首先它生成的文件是二进制的,做不了版本控制。这意味着在版本迭代的过程中做数据结构评审的体验很糟糕。其次,离线文件难以管理,不利于团队协作。第三,图形界面虽然简单,但并不等价于高效。用它画图的成本还是比较高的。

PlantUML是个基于文本、灵活且强大的UML画图工具,高度可定制,而且可以集成到多种开发工具中。主流的IDE、文本编辑器都可以集成PlantUML,以便用自己最熟悉的工具画图并实时预览。基于文本的特性使得版本控制和Code Review很容易实现。如果VCS用的是Gitlab,可以更进一步,借助PlantUML Server实现实时预览。即使对于像Github这种暂时没有提供支持的Web平台,也有变通的解决方案。

继续看...

AirPods Pro的使用感受

Bose QC35曾是带给我巨大幸福感的工具,并且三年来一直处于重度使用的状态。但是它的一些弱点,使得在某些细分场景下并不能得到很好的体验。首先是包耳式的设计在夏天会很热。其次,虽然有折叠的功能,但头戴式的设计对于日常通勤来说,还是不够便携。再次,QC35一代的降噪级别只能通过APP设置,很麻烦,所以我一直都保持默认开启状态,出于安全性考虑,不适合徒步或者骑行。

于是后来买了一副AirPods(以下简称AP)。高温和骑行的体验得以改善,但一直被通勤过程中北京公交糟糕的乘坐体验所困扰。其实在购买AP之前,更想买的是带降噪功能的耳塞,当时索尼的降噪豆一代才刚上市,评测普遍反馈体验不太好,而QC30的狗圈又让我完全接受不能,除此之外,在当时并无更多的选择。AP其实是权衡之后妥协的结果。

所以从看到AirPods Pro(以下简称APP)上市的消息到下单,并没有考虑太久。下单时提示可能一到两周才能到货,但其实第二天就发了货,次日到手。体验了几天,说说感受。

继续看...

解决Laravel中makeWith()无法取到被mock的实例的问题

被测单元有一行实例化一个类的代码,而且该类的构造方法需要参数。基于面向单元测试编程的原则,通过容器的makeWith()方法实现:

1
$api = app()->makeWith(Api::class, ['config' => $config]);

但是在执行单元测试时发现,虽然测试代码中已经mock了这个类且注入到容器,但在被测单元中取到的还是原类的实例。

继续看...

利用单元测试为开发提效

单元测试可以方便地伪造和回滚测试数据,这个特性决定了它其实是一个效率工具。

例如在开发退款单、发票的时候,由于这种后置的功能依赖订单、支付、库存等前置的数据,因此需要频繁地创建这些测试数据,这就导致开发的效率极低,有时甚至需要切换多个系统做诸如增加库存、下单、支付等操作。虽然在开发环境可以通过直接修改数据使之恢复可被测试的状态,但仍然存在效率很低、遗留垃圾数据和存在隐患等问题。

单元测试可以完美地解决这些问题。

继续看...