分层缓存 (Tiered Cache)
启用后自动为源站就近分配最佳回源数据中心(Argo),
后续仅由该数据中心最终响应处理回源请求、静态资源缓存
在访客就近访问Cloudflare边缘数据中心拉取缓存无果时,将会通过Cloudflare私有线路连入之前分配数据中心拉取资源,减少不必要的回源请求,依托Cloudflare各地数据中心之间组建的高速低延迟、高可用互联网络,提高整体访问性能
*该功能已由专项付费服务转为面向所有用户免费可用(需前往缓存管理中手动开启)
*原有Argo付费用户获得额外优化

俄耳甫斯 (Orpheus)
Orpheus 通过实时查找、识别互联网上不可达的路由并引导网络流量绕行,以提高回源请求可达性
*表现为:更少522错误
*已内置为所有用户启用

自动化签名交换管理 Automatic Signed Exchange(SXGs)
一键为网站配置启用 SXG ,使得网站内容更易被Google搜索缓存并在特定时机预读,以提高页面加载速度,改善用户由搜索到最终访问网页的体验
*测试阶段,Pro以上及APO等付费用户可在Speed选项卡下自行申请候补试用

近实时的数据分析&日志 (Live-updating Analytics and Instant LogsIs)
数据分析选择最近30分钟,开启实时更新
即时日志在打开后实时推送(延迟≥2秒)最近访问日志
*实时数据分析&日志面向Pro及以上付费用户可用
*即时日志(Instant Logs)目前需单独申请候补试用

资源加载预提示 (Early Hints)
引入新的 HTTP 状态代码(103 Early Hints),它定义用户浏览器可在服务器还在准备响应数据时预加载那些资源,通过提前准备页面渲染所需资源,来加速页面载入
*预期面向所有用户免费开放,目前测试阶段需在Speed选项卡下自行申请候补试用
*使用时应注意配置好 Link 响应标头(若未配置则由机器学习推导适配)
*Chrome从v95开始实验性地支持Early Hints,其它浏览器厂商陆续支持中

机制
浏览器<-Accept->Cloudflare<-Vary:Accept->源站

工作细节
源站上,为图像文件拓展(目前支持: avif、bmp、gif、jpg、jpeg、jp2、jpg2、png、tif、tiff、webp )设置 Vary:Accept 响应头,申明让Cloudflare进行图像类型转换并缓存

Cloudflare上,目前通过 API 去指定那些文件拓展类型需要进行格式转换(Pro及以上用户可用)

在资源被访问时,根据访客浏览器所申明支持(Accept)的图像文件类型,返回最佳资源类型

API文档
Variants setting

Vary for Images: Serve the Correct Images to the Correct Browsers

var $table = $('.dataTable').DataTable({
	......
	columns: [
		{
			title: 'Action',
			render: function (value, type, row, meta) {
				return '<a href="javascript:;" class="editBtn">Edit</a>';
			}
		},
		......
	],
	......
}).on('click', 'td>.editBtn', function () {
	var tr = $(this).parents('tr');
	var row = $table.row(tr);
	var rowData = row.data();
	......
});

近日网络安全威胁和漏洞信息共享平台发布漏洞预警,公布了微软Windows Print Spooler远程代码执行漏洞的风险公告,漏洞CVE编号:CVE-2021-34527。
该漏洞影响范围十分广泛,服务器操作平台Windows Server 2008 R2、Windows Server 2012 R2、Windows Server 2016、Windows Server 2019、Windows Server Version 2004和消费者操作系统平台Windows RT 8.1、Windows 7、Windows 8.1、Windows 10都受此次漏洞影响。
Print Spooler是Windows系统中用于管理打印相关事务的服务,黑客可通过Windows Print Spooler打印机服务执行该漏洞,如操作不当,黑客可利用该漏洞以系统权限运行任意代码,然后可以安装程序,查看、修改或删除数据,或者创建拥有完全用户权限的新账户。
目前微软尚未针对该漏洞发布补丁,网络安全威胁和漏洞信息共享平台给出了临时解决方法:禁用Windows Print Spooler打印机服务或通过组策略禁用入站远程打印。

Events

Bootstrap 的 modal 组件事件说明

Event TypeDescription
show.bs.modal当调用 show 方法时立即触发此事件。如果由单击引起,则被单击的元素可用作事件的 relatedTarget 属性。
shown.bs.modal当 modal 对用户可见时立即触发此事件(CSS 渲染完)。如果由单击引起,则被单击的元素可用作事件的 relatedTarget 属性。
hide.bs.modal当调用 hide 方法时立即触发此事件。
hidden.bs.modal当 modal 对用户完全隐藏时触发此事件(CSS 渲染完)。
hidePrevented.bs.modal当 modal 对用户可见、 backdrop 设置为 static 和 keyboard 设置为 false 时,modal 外单击或者按 Esc 键时触发此事件。

1、运行此命令下载Docker Compose的当前稳定版本:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2、给与docker compose执行权限

sudo chmod +x /usr/local/bin/docker-compose

3、创建连接,指向 /usr/bin

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

4、测试安装结果

$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c

如果出现 docker-compose: error while loading shared libraries: libz.so.1: failed to map segment from shared object: Operation not permitted 错误,执行:

mkdir $HOME/tmp
export TMPDIR=$HOME/tmp

为方便起见,创建目录后,可以将“export”语句放在shell 的配置文件中(例如:~/.bash_profile 或~/.bashrc)

alias docker-compose='TMPDIR=${HOME}/tmp docker-compose'

今天遇到了一个需要解决的小小问题,C#中没有对应Execl的标准偏差Stedev.s函数,那么怎么办呢?幸好,我们可以查到标准偏差的计算公式:

其中 x 是样本平均值 AVERAGE (number1,number2,…) n 是样本大小。

那么在C#中对应的代码:

public double Stedevs(IEnumerable<double> values)
{
	if (values.Count() < 2)
	{
		return 0d;
	}
	var avg = values.Average();
	var sum = values.Sum(d => Math.Pow(d - avg, 2));
	var result = Math.Sqrt(sum / (values.Count() - 1));
	return result;
}

使用 Asp.net core 开发网站时,不同于以往的Framework,Razor引擎并不能实时编译。因此需要手动添加运行时编译包:Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation。

解决步骤:

1、通过 NuGet 添加 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation;

2、在 Startup.cs 类文件中添加该模块;

在 Startup.cs 文件中的 ConfigureServices 函数中追加 .AddRazorRuntimeCompilation();

public void ConfigureServices(IServiceCollection services)
{
   //追加 .AddRazorRuntimeCompilation();
   services.AddControllersWithViews().AddRazorRuntimeCompilation();
}

一个简单的js生成GUID字符串方法:

function getGUID() {
	function S4() {
		return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
	}
	return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}