nodejs在kubernetes中的时区设置

kubernetes的pod中默认的时区是0时区,如果要修改时区,一般是通过mount的方式,将/etc/localtime映射为/usr/share/zoneinfo/Asia/Shanghai

但是这种方式下,系统时区是改了,比如在bash中输出date已经是正确的,但是NodeJS应用中可能依然是0时区。这时候需要再加一个环境变量TZ即可。

1
2
3
4
containers:
- env:
- name: TZ
value: Asia/Shanghai

彻底删除macOS中的VSCode

需求源于交还公司电脑,除了在Applications(应用程序)中把VSCode拖到废纸篓,还需要手动删除个人信息。

总共有两个地方

1
2
rm -rf $HOME/Library/Application\ Support/Code
rm -rf $HOME/.vscode

根据背景色判断前景黑白颜色

类似于iPhone的最上方信息栏(电量时间等),根据背景颜色的深浅程度,判断文字应该显示为白色还是黑色。

实现思路是,先抛弃颜色,转灰度,然后即可简单的设置一个阈值(实测186是一个不错的值)来判断。

转灰度的公式是Gray = R*0.299 + G*0.587 + B*0.114

1
2
3
4
5
6
7
8
9
10
// example: background cccccc (without #)
function decideFontColor(background) {
const red = parseInt(background.substr(0, 2), 16);
const green = parseInt(background.substr(2, 2), 16);
const blue = parseInt(background.substr(4, 2), 16);
if ((red * 0.299 + green * 0.587 + blue * 0.114) > 186) {
return '#000000';
}
return '#ffffff';
};

创业与在大公司的回报概率曲线

回报概率曲线

较小和较大的收入,都是创业比较容易获取。较小的收入,可以对应国内的小规模“做生意”,有很大一部分人可以赚到比在公司更多的钱。但是通常有一个上限,比如年收入100万,在这之上则是在大公司比较容易,比如年薪百万以上的高级程序员和管理人员。而继续往上,实现“财富自由”,则还是创业比较容易。

Why You Want To Start a Startup


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