slate.js拼音输入法的光标错位及Safari/Edge下无法输入问题

目前,slate编辑器对中文拼音输入法的支持并不好,主要存在两个问题

  1. 比较轻的问题,在Chrome下,拼音可以输入,但是光标位置没有跟随移动
  2. 在Safari或者Edge(windows)中,甚至经常无法输入中文
阅读更多
以JS处理emoji表情为例简介UTF-8编码

Emoji 表情符号是直接保存在字符中的标签,不是一张图片,而是可以理解为和一个汉字同类的东西。因此在绝大多数可以打字的地方,就能放Emoji。但是某些地方会出现表情变成问号或者一个框框的情况,其中一个可能的原因是使用了自定义的,或者过时的UTF-8解码形式。

首先简单说明一下文字在计算机中是如何被存储的。毫无疑义的是,文字最终一定是以二进制的形式存储的。其中最简单的是著名的ASCII码,他是早期由美国指定的一个编码标准,建立了一个二进制数到字母和符号的映射关系,其中共有128个符号,包括了英文大小写字母和标点符号等。二进制范围从0000 00000111 1111,具体范围可以查看维基百科。后来互联网时代这套标准延续了下来,一直用于英语文字的存储,通常直接用8位二进制,即一个字节(Byte)存储。

可是问题来了,世界并不只有英文,欧洲有法语、德语等语言不全是有26个英文字母组成的,亚洲又有众多的象形文字,比如中文字符的数量就多了去了。所以继续拓展,一开始,欧洲国家使用一个字节中剩下的128个空间各自表示自己语言的符号,而中文则是以GB2312为主(如Windows系统),用两个字节来存储常用的6万多个汉字。由于各种编码之间并不是遵循同样的标准,所以有些时候我们会看到各种乱码,比如著名的手持两把锟斤拷,口中直呼烫烫烫

阅读更多
node-canvas的模糊实现

在较新的HTML版本中,图像的模糊可以用canvas的filter指定为blur的方式实现,但是node-canvas库目前还不支持filter。不过它开放了像素的访问和设置,所以业务需要自己实现了一个简单的图像模糊。

具体思路为,使用某种算法,对一个像素p,通过计算其周边的像素点(模糊半径)得到一个新的像素值,写入p,并且按顺序对于每一个像素操作一边。这里举例最简单的,均值模糊,即一个像素等于它周边像素的平均值。通常称为均值滤波器。常见的还有中值模糊、高斯模糊等。

阅读更多
添加位于本地目录的npm包

npm包默认从registry远程获取并放在node_modules文件夹中。有时候自己写的代码由于相对路径太长,import比较痛苦,或者是代码写的还“拿不出手”无法上传到远程,这问题可以通过将本地文件夹安装为npm包的方法解决。

假设有一个src/config文件夹,需要设置为本地的npm包,包名config,设置成功后希望达成:

1
2
const config = require('config'); // 新代码
const config = require('./src/config'); // 老代码

代码包创建配置

src/config文件夹下新建package.json文件,内容为:

1
2
3
4
5
{
"name": "config",
"main": "index.js",
"version": "0.1.0"
}

安装本地代码包

1
npm i file:./src/config

安装成功后,可以发现在项目的package.json文件夹中出现了一个相对路径的dependency

1
2
3
4
5
{
"dependencies":{
"config":"file:./src/config"
}
}

ionic 插件 In App Browser 简单上手

In App Browser 是 ionic 的一个native插件,可以用来在app中打开一个“网页浏览器”,用途类似于 Native App 中的 webView,可以直接加载远程资源。例如,可以全屏加载一个单独的h5游戏,实现 ionic app 中嵌入其他h5游戏。

但是 In App Browser 在 ionic4 中的文档资料非常的少,仅有安装方法和一个简单的usage:https://ionicframework.com/docs/native/in-app-browser/。不过 ionic 的这个主要是对 cordova 做了一下 binding,所以直接看 cordova 的文档也很有参考价值:https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-inappbrowser/。

下面举例嵌入h5游戏的步骤。

阅读更多
升级certbot版本从0.26到0.28

之前使用Let’s encrypt的免费https证书,最近收到邮件 Action required: Let’s Encrypt certificate renewals,发现需要把certbot升级到0.28,否则就不支持了。

但是用邮件里的说明,无法正确的升级certbot版本

于是使用强制升级,实测成功

1
apt-get upgrade -f certbot

parallels虚拟机使用mac代理

在mac中已经配置了http或socks代理的情况下,可以直接被parallels中的虚拟机使用,原理类似于局域网共享。

首先配置代理端允许局域网共享,具体配置方法见相应的软件。在Surge中,只要将listen设置为0.0.0.0即可允许所有来源的代理请求

Parallels的网络默认情况下,使用类似虚拟路由器的方式,可以理解为mac端和虚拟机组成一个局域网,因此需要获取这个局域网中的mac端ip地址。用下面的命令获取mac的IP地址:

1
ifconfig vnic0

之后在虚拟机中正常设置代理即可,如果是windows的虚拟机,在Internet选项中设置http代理,其他软件同理。


git为仓库配置单独的ssh-key

为了跳过输入密码的流程,服务器上如果使用git部署,一般使用deploy key,但是如果一台机器需要同时部署多个项目的话,默认情况下所有项目都会使用相同的ssh-key,但是GitHub并不支持不同的repo拥有相同的deploy key。

通过对ssh进行一些设置可以实现不同repo使用不同的ssh-key。

主要原理是通过host域名的不同来识别

例如,本来repo的git地址为git@github.com:wangsijie/awesome,为其配置一个专用的ssh-key,而不是使用系统默认的ssh-key的步骤如下:

创建一个新的ssh-key

1
ssh-keygen

Enter file in which to save the key这一行出现后,填写一个特别的名字单独存储这个key,而不是覆盖默认,比如可填写/home/work/.ssh/id_rsa_awesome,其他选项根据实际情况填写,可全部默认

配置Host与key的映射

新建文件~/.ssh/config

1
2
3
Host awesome.github.com
Hostname github.com
IdentityFile ~/.ssh/id_rsa_awesome

有了上面的配置,当git遇到awesome.github.com这个域名的时候,会自动转发到github.com,并使用id_rsa_awesome这个ssh-key

修改repo地址

本来repo的git地址为 git@github.com:wangsijie/awesome,这里需要进行修改,把域名改为 awesome.github.com,于是完整地址变为:

1
git@awesome.github.com:wangsijie/awesome

用这个地址进行正常的clone、push、pull等操作,就会自动的使用id_rsa_awesome这个ssh-key了


git忽略文件的权限变更
1
git config core.fileMode false

git快速删除已合并分支

会自动检查与master的差别,只会删除没有领先master的分支,所以可以安全的使用

删除已合并的远程分支

1
git branch -r —merged | grep -v master | sed ’s/origin\///‘ | xargs -n 1 git push —delete origin

删除已合并的本地分枝

1
git branch —merged | egrep -v “(^*|master|dev)” | xargs git branch -d