0%

初衷是解决中文输入法在 vim/evil 键位下的 insert 模式和 normal 模式的切换问题,实现 normal 模式自动切英文、insert 模式回复之前的输入状态。

当然各编辑器都有各自知名的解决方案,本次主要吐槽 Mac 平台 fcitx-remote-for-osx 和 squirrel 输入法间的“摩擦”。

Read more »

前言

本篇是为 elastic-apm-node 编写拓展系列的第二篇,主要介绍 egg 框架的定制指南。

单独拿 egg 出来讲,是因为市面主流的 APM 工具几乎都没有为 egg 提供支持。一方面 egg 底层基于 koa ,并且 egg-router 也是 koa-router 的二次封装,两者相似以致插件可以平稳切换,agent 的补丁方式也基本是一致的。另一方面,agent 代码必须早于 egg 和 egg-router 的加载才能生效,egg-bin、egg-script 等生态决定了编写框架之上的插件很难做到零代码入侵。

APM agent 作为 npm package 不适合做这样的事,更好的方法是我们利用 egg 工具链的接口,在引入 agent 的代码层处理好 egg 的配置。

Read more »

前言

苦于 hexo g 的效率问题,与其重新折腾框架,决定在彻底忍受不了之前再实行一点儿补救措施——依赖升级。

Hexo 主题 NexT 5.1.x 已经很久不维护,传说新版本 7.1.x 的速度有显著提升,它是本次的重点升级对象。这里只记录 Next 主题的变更,因为 Hexo 主体和其他依赖的升级都十分平滑,没有明显的 breaking changes。

Read more »

前言

根据上一篇《Node.js APM 产品调研》的市场调研结果,笔者更青睐 Elastic APM 这个开源产品,故决定带来它的一篇专题介绍。

尽管团队已经开始试用,但踩坑时间较短,与其编写测评,不如先带大家走进这个项目,剖析个别令人感兴趣的技术点。

Read more »

前言

服务进程登场时往往“蓄势而发”,犹抱琵琶半遮面,真正的服务端口跑起来之前做了太多准备工作,然而落幕工作常被人草草了之。

如何让进程自然结束,这本是 hello world 级的基础内容,却有很多项目忽视了这一步的必要性以及重要性。

目前使用 PM2 作为进程管理的项目仍占多数,有相关意识的朋友使用 pm2 reload 让进程“平滑”重启,但这就不需要额外的代码处理了吗?

举个例子,未捕获的异常导致服务强行退出时,是不是有可能进程尚未记录异常日志、请求执行到了一半、甚至中断了更复杂的业务工作?PM2 只能截住新的请求,旧的请求是否彻底执行完毕,仍需要业务自己判断。

下面我们先抛开 PM2 ,聊聊基本的进程退出需要哪些工作。首先我们从未捕获的异常说起。

Read more »

近期调研了当下 Node.js 主流的 APM 产品,为期不到一周,本文以介绍基本状况为主,引申对 APM 中间件选型乃至自研的一些思考。APM 虽和业务关系紧密,但实属于运维管理范畴,笔者从业务的角度思考,易受限于使用场景,请路过的读者及时指教问题。
Read more »

前言

突破查询瓶颈的方法有很多,但这里先不谈分库分表之流,当头问题就一个:单数据表分页查询过慢怎么办?

其实讲分页优化的博客真不少,但很多博主只顾分享点子忽略了细节,还有很多值得补充的地方。笔者回顾了曾经在千万级 BBS 项目的优化经历,尽可能结合实际地聊聊个人对分页查询的见解。也希望读者在亲身操作中验证,任何优化脱离了实际场景都是纸上谈兵。

Read more »

前言

部署 RabbitMQ、MongoDB 或其他服务的单节点,有时会将 bind_ip 之类的设置写作 127.0.0.1。然而在 Debian 系统这么操作可能就给自己挖了“坑”,不管你有没有遇到过 host 相关奇怪的部署问题,来看作者的一波填坑历程吧~

Debian 的 默认 hostname 配置

在 Debian 系的 Linux 发行版中,/etc/hosts 中前两行默认配置如下,其中 myhostname/etc/hostname 指定的本机名称,可通过 hostname 指令查看。

1
2
127.0.0.1 localhost
127.0.1.1 myhostname

第二行配置将本机 host 指向了 127.0.1.1,这又能对软件的安装造成什么影响呢?请看下面的例子。

Read more »

svn 给笔者的一大印象就是非常容易产生冲突,特别是项目加入新人后,由于初期没有强硬地制定规范,导致后期合并代码时灾难连天。决定在此分享这些“亡羊补牢”的规则,也算是避免 svn 产生合并冲突的一点经验。

Read more »