XStack

Deep into details

0%

记录一些DNS地址供以后开发用

1. 我正在使用的DNS#

61.50.244.66(联通DNS)

2. 一些Local DNS#

202.107.73.34(营口联通)
222.34.29.158(松原联通)
202.101.224.69(南昌电信)
221.12.49.114(宁波联通)

3. 一些Public DNS#

180.76.76.76(百度)
223.6.6.6(阿里)
114.114.115.115
114.114.114.114

4. 数据来源#

数据主要来自17ce.com
17ce接入PDF文档(WebSocket版本)
其它一些国内外Public DNS的列表(包含了实测数据——虽然未必准确)
2018公共DNS服务器地址排行
DNSPerf

5. TODOs#

使用Node.js实现一个包
检测各个DNS服务器的性能,详细如下:

  1. 每个服务器检测10次
  2. 性能指标包括最小延迟、平均延迟、抖动(变化量)
    可以查询特定host在各个服务器下的初次请求速度和当前的最新值
    特定记录查询可以显示缓存剩余时间等信息

6. 系统用例图#

记录近期一些学习内容

1. 软件功能方面#

2. 基础设施#

  • OpenResty安装、使用

  • 如何配置和使用nginx-lua

  • nginx-lua技术在现实场景中的应用和前景 => 《你不得不使用NginxLua的若干个理由》

  • 边缘计算

  • 网络延迟

  • GraphQL使用

3. 自动化测试#

  • 如何使用Puppteer

近期用到sketch插件相关内容,记录一下

使用skpm快速生成#

skpm是sketch官方出的快速生成插件的工具,目前已经越来越成熟了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ nmp install -g skpm
$ skpm create first-plugin
✔ Done!

The Sketch developer mode is not enabled (http://developer.sketchapp.com/introduction/preferences/#always-reload-scripts-before-running).
Do you want to enable it? (y/N) y
success Sketch developer mode enabled

To get started, cd into the new directory:
cd first-plugin

To start a development live-reload build:
npm run start

To build the plugin:
npm run build

To publish the plugin:
skpm publish
$ cd first-plugin

如果你在刚才的提问环节选择了y,那么,打开sketch就可以看到一个菜单,点击一下,就可以输出了

默认生成的这个代码很简单,只有一个弹出提示:It's alive 🙌

参考文档#

更多的文件修改和配置可以看这里

PS:语法支持ES6

更多资料#

所有JSAPI的列表

直播火了好几年了,当然要了解下原理。

周末使用RTMP做了几个简单实验,记录如下:

获取所有可以录制的视频源#

1
2
3
4
5
6
7
8
9
$ ffmpeg -devices
$ ffmpeg -f avfoundation -list_devices true -i ""

# outputs like:
[AVFoundation input device @ 0x7ff7d0504640] AVFoundation video devices:
[AVFoundation input device @ 0x7ff7d0504640] [0] FaceTime HD Camera
[AVFoundation input device @ 0x7ff7d0504640] [1] Capture screen 0
[AVFoundation input device @ 0x7ff7d0504640] AVFoundation audio devices:
[AVFoundation input device @ 0x7ff7d0504640] [0] Built-in Microphone

推流一个本地文件#

1
$ ffmpeg -re -stream_loop -1 -i out.mp4 -vcodec libx264 -acodec aac -f flv rtmp://xxxx.com:1935/hls/test

录制屏幕#

1
$ ffmpeg -f avfoundation -i "Capture screen 0" -r:v 30

播放视频#

1
$ ffplay https://xxxx.com/hls/test.m3u8

录制屏幕并推流#

1
$ ffmpeg -f avfoundation -i "Capture screen 0" -r:v 30 -vcodec libx264 -acodec aac -f flv rtmp://xxxx.com:1935/hls/test

推流工具#

实际使用中,一般都会采用OBS进行推流。

附:Nginx上安装rtmp服务器#

下载源码、编译与安装#

从下面两个地址找到源码包
最新的Nginx源代码
openssl最新源码地址
然后,解压缩到~/softs/目录下,再下载一份nginx-rtmp-module到~/softs/目录,然后三个包一起编译、安装:

1
2
3
4
5
6
7
8
9
10
$ cd ~/softs/ #没有可以自己创建,或者其它临时目录也可以
$ wget https://nginx.org/download/nginx-1.17.6.tar.gz
$ tar zxvf nginx-1.17.6.tar.gz
$ wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz
$ tar zxvf openssl-1.1.1d.tar.gz
$ git clone https://github.com/arut/nginx-rtmp-module
$ cd nginx-1.17.6/
$ ./configure --prefix=/usr/local/nginx --with-http_v2_module --with-http_ssl_module --with-openssl=../openssl-1.1.1d --add-module=../nginx-rtmp-module
$ make
$ make install #按需决定是否需要sudo

安装完毕后,执行命令测试是否安装成功:

1
sudo /usr/local/nginx

然后通过浏览器访问80端口: http://localhost/
如果看到Nginx欢迎页,说明安装成功,就可以继续配置环节了。

配置#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 将下面这个段落配置到http平级的位置
rtmp {
server {
listen 1935;
application live {
live on;
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
}
application vod {
play /tmp/video;
}
}
}
# server中添加一个目录,并配置mimetype
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
}

配置完成后重启就可以接收推流了

1
{font-family: "Helvetica Neue";font-weight: 500;}

Helvetica Neue字体, 在macOS下使用PingFang SC渲染,
当定义了font-weight:500后, 会变成PingFang TC.

Chrome和Safari都是如此. 怀疑可能是WebKit中做的处理.

初

Pi-Supply(树莓派专属配件, 英国royal mail国内转EMS)
7.8寸16级灰阶墨水屏(带驱动电路) ¥3054.77 kindle供应商, 有大尺寸的, 有带第三种颜色的
台湾墨水屏生产商 pervasive Displays, 可以在digi-key平台购买
4.41吋-¥514.62
7.4吋墨水屏 - ¥955
2寸长电子书开发套件 - ¥312
淘宝:大连佳显SPI2.9墨水屏 - ¥72
淘宝:树莓派墨水屏2寸方屏幕 - ¥360

假设一个ip地址为192.168.16.9, 如何用纯数字保存这个数字?

转换公式为:
192*256*256*256+168*256*256+16*256+9 = 3232239625

ping 3232239625即可得到和ping 192.168.16.9完全一样的结果.

注意, 转换后的值最大可能为2^32-1, 而int的最大值为: 2^31-1, 是会存在溢出的, 如何解决呢? 可以用long, 不过有点浪费, 用unsigned int, 不过JS不用考虑这些…

为什么要用input[type=range], 而不是div+touch事件模拟?#

  • 性能考量(拖拽的性能要比模拟的好一些)
  • 工作量考虑(改改样式就好了)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!DOCTYPE html>
<html>
<head>
<style>
body{padding-top: 30px;}
input[type=range]{
-webkit-appearance: none;
outline: none;
width: 478px;
zoom: 0.5;
}
input[type=range]::-webkit-slider-runnable-track {
-webkit-appearance: none;
height: 4px;
background: #dddddd;
background: -webkit-linear-gradient(left, #ffa42f 0%, #ffa42f 30%, #dddddd 30%)
}
::-webkit-slider-thumb {
-webkit-appearance: none;
border-radius: 20px;
height: 20px;
width: 20px;
border-radius: 20px;
background: #ffa42f;
box-shadow: 0 0 0 10px rgba(255,164,47,0.5);
margin-top: -8px;
}
</style>
</head>
<body>
<input type="range" value="30"/>
</body>
</html>