ARTS-week05

Algorithms

本周leetcode Palindrome Number
思路:先排除负数、末位为0的数字。剩下的考虑使用数字翻转就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int revertNum = 0;
while (x > revertNum) {
revertNum = revertNum * 10 + x % 10;
x /= 10;
}
return x == revertNum || x == revertNum / 10;
}
};

Review

本周英文文章Two-factor authentication with TOTP
2FA: 双因素身份验证
HMAC: 基于散列的消息验证代码
HOTP: 基于HCMA的一次性密码
OTP: 一次性密码
TOTP: 基于时间的一次性密码
U2F: 通用第二因素

支持2FA的软件令牌:
FreeOTP: 开源应用程序,由Red-Hat维护。
Google身份验证器: 可以与其他服务配合使用,但仅支持基于推荐的TOTP配置的密码。
Microsoft Authenticator: 由Microsoft制作,适用于Microsoft,也适用于其他服务。

TOTP(RFC-6238)是一种基于HOTP(RFC-4226)的算法,使用散列函数H从共享密钥K和当前时间戳生成一次性密码。当验证服务器从客户端接收到OTP时,它使用共享密钥K及当前时间戳自行计算OTP并比较OTP。如果他们是在同一个时间步骤内生成的并匹配,则验证成功。
共享密钥K是-随机生成或者导出的Base32字符串,仅对客户端和服务器是已知的,并且对于每个令牌是唯一的。算法必须使用强共享密钥。共享密钥的长度必须至少为128位。

Technique

环境: Ubuntu16.04, Python3.6.5, visdom: 0.1.8.5

在使用Visdom时遇到控制台输出的问题,部分代码:

1
2
3
import visdom
vis = visdom.Visdom()
vis.images(image,opts=dict(title="test"))

不断打印如下信息,导致正常信息被覆盖:

1
'>' not supported between instances of 'float' and 'NoneType'

经过查询是版本依赖有问题,详见: https://github.com/facebookresearch/visdom/issues/450
目前通过下面的方式解决:

1
vis = visdom.Visdom(use_incoming_socket=False)

也可以通过下面的方式去解决: https://github.com/facebookresearch/visdom/issues/450#issuecomment-416299084

Share

本周阅读《HTTP权威指南》日志记录与使用情况跟踪一章。记录一下关于命中率测量的一些内容:
场景:原始服务器通常会出于计费的目的保留详细的日志记录。内容提供者需要知道URL的受访频率,广告商需要知道广告的出现频率,网站作者需要知道所编写的内容的受欢迎程度。客户端直接访问Web服务器时,日志记录可以很好地跟踪这些信息。但是,缓存服务器位于客户端和服务器之间,用于防止服务器同时处理大量访问请求。缓存要处理很多HTTP请求,并在不访问原始服务器的情况下满足它们的请求,服务器中没有客户端访问其内容的记录,导致日志文件中出现遗漏。

命中率测量协议是对HTTP的一种扩展,它为这个问题提供了一种解决方案。命中率测量协议要求缓存周期性地向原始服务器汇报缓存访问的统计数据。

命中率测量扩展建议使用新增加的首部Meter,缓存和服务器可以通过它在相互间传输与用法和报告有关的指令,这与用来进行缓存指令交换的Cache-Control首部很类似。

0%