不知不觉已经到了2020年,2019年一共52周,我去年完成了55篇blog,平均一周一篇,相对于2018年才写了19篇,进步很多,起码坚持做一件事,而且坚持了一年。

在行为心理学中,人们把一个人的新习惯或理念的形成并得以巩固至少需要21天的现象,称之为21天效应。这是说,一个人的动作、或想法,如果重复21天就会变成一个习惯性的动作或想法。其中,坚持利用业余时间记英语单词坚持了400多天,接下来打算看美国的老友记 (Friends),练习英语口语和听力。为什么要折腾英语?因为当年读书时代不努力,英语基础很差,词汇量很少,我想看看自己努力之后,英语能达到什么水平。

IMG_4972.JPG

在使用163邮箱开发收件服务的时候,提示:

SELECT Unsafe Login. Please contact [email protected] for help

并且收到一封邮件,

email.png

经分析,该问题是网易认为是不安全的登录。所谓的“一次被阻止的收信行为”,也就是第三方客户端收信他们就会认为是不安全的,然后邮件里推荐使用网易邮件大师 ??? 什么操作

然后网上查了一下,从2014.12.20开始有个入口解决,首先进入网址http://config.mail.163.com/settings/imap/[email protected]验证开启,按提示一步步来就可以。

伪随机

伪随机性是一个过程似乎是随机的,但实际上并不是。例如伪随机数是使用一个确定性的算法计算出来的似乎是随机的数序,因此伪随机数实际上并不随机。在计算伪随机数时假如使用的开始值不变的话,那么伪随机数的数序也不变。伪随机数的随机性可以用它的统计特性来衡量,其主要特征是每个数出现的可能性和它出现时与数序中其它数的关系。伪随机数的优点是它的计算比较简单,而且只使用少数数值很难推算出计算它的算法。一般人们使用一个假的随机数,比如电脑上的时间作为计算伪随机数的开始值。

package main

import (
  "fmt"
  "math/rand"
  "time"
)

func main() {
  rand.Seed(int64(time.Now().UnixNano()))

  fmt.Println(rand.Int())
}

真随机

随机数据生成器也可以创建在“随机”的宏观过程基础上,比如基于掷硬币、骰子、轮盘和彩票摇奖机。这些现象中的不可预测性可由动力系统和混沌理论证明。虽然在经典力学中宏观过程都是决定论的,但一个设计良好的此类设备是无法在现实生活中被预测的,因为它的每次使用都依赖于敏感的初始条件。

package main

import (
  "crypto/rand"
  "fmt"
  "math/big"
)

func main() {
    result, _ := rand.Int(rand.Reader, big.NewInt(10))
    fmt.Println(result)
  
}

讨论点

其实伪随机没什么可讨论的,知道初始值,往里面套公式,就可以算出随机值
关键是golang的这个真随机,之前知道有个网站,专门提供真随机的api
https://www.random.org/

那golang是如何实现的呢

看了下文档,是这么描述的:
第一个传入的参数
rand.Reader是加密安全随机数生成器的全局共享实例。

在Linux和FreeBSD上,Reader使用getrandom(2)(如果可用),否则使用/dev/urandom。在OpenBSD上,Reader使用getentropy(2)。在其他类unix系统上,Reader从/dev/urandom读取数据。在Windows系统中,Reader使用CryptGenRandom API。在Wasm上,Reader使用Web Crypto API。

其中在linux下 getrandom()在Linux内核的3.17版才加入的
如果没有则通过 /dev/urandom去获取真随机源

其中/dev/random & /dev/urandom
这两个特殊设备都是字符型设备。我们可以在用户空间通过read系统调用读这两个设备文件以此获取随机数。这两个设备文件的区别在于:如果内核熵池的估计值为0时,

/dev/random将被阻塞,而/dev/urandom不会有这个限制。

熵池

计算机本身是可预测的系统,因此,用计算机算法不可能产生真正的随机数。但是机器的环境中充满了各种各样的噪声,如硬件设备发生中断的时间,用户点击鼠标的时间间隔等是完全随机的,事先无法预测。Linux内核实现的随机数产生器正是利用系统中的这些随机噪声来产生高质量随机数序列。
内核维护了一个熵池用来收集来自设备驱动程序和其它来源的环境噪音。理论上,熵池中的数据是完全随机的,可以实现产生真随机数序列。为跟踪熵池中数据的随机性,内核在将数据加入池的时候将估算数据的随机性,这个过程称作熵估算。熵估算值描述池中包含的随机数位数,其值越大表示池中数据的随机性越好。

总结

一般直接只用伪随机就好了,需要安全系数高,则采用真随机,但是真随机性能不如伪随机好。

需求

有时候,我们使用git或者连接远程服务器的时候,对公司或者帮朋友处理一些任务,需要使用不同的ssh Key,这个时候有个很快的方案,就是

ssh -i [私钥文件路径] [ip]

然后要传文件

scp -i [私钥文件路径] 后面略

但是如果频繁操作就会很麻烦,有没有办法根据域名或ip自动使用合适的key呢,答案是有的

方法

修改ssh config

修改的路径

用户的配置文件(~/.ssh/config)
系统范围的配置文件(/etc/ssh/ssh_config)

根据需求修改其中一个即可

我们拿~/.ssh/config举例

Host rd
        HostName 192.168.17.20
        User 我登录的用户名
        IdentityFile 私钥路径

具体使用方法

可以使用man 去查看具体的使用

man ssh_config

在软件系统的高可靠性(也称为可用性,英文描述为HA,High Available)里有个衡量其可靠性的标准——X个9,这个X是代表数字3~5。X个9表示在软件系统1年时间的使用过程中,系统可以正常使用时间与总时间(1年)之比,我们通过下面的计算来感受下X个9在不同级别的可靠性差异。

3个9:(1-99.9%)36524=8.76小时,表示该软件系统在连续运行1年时间里最多可能的业务中断时间是8.76小时。
4个9:(1-99.99%)36524=0.876小时=52.6分钟,表示该软件系统在连续运行1年时间里最多可能的业务中断时间是52.6分钟。
5个9:(1-99.999%)36524*60=5.26分钟,表示该软件系统在连续运行1年时间里最多可能的业务中断时间是5.26分钟。
那么X个9里的X只代表数字3~5,为什么没有1~2,也没有大于6的呢?我们接着往下计算:

1个9:(1-90%)*365=36.5天
2个9:(1-99%)*365=3.65天
6个9:(1-99.9999%)365246060=31秒
可以看到1个9和、2个9分别表示一年时间内业务可能中断的时间是36.5天、3.65天,这种级别的可靠性或许还不配使用“可靠性”这个词;而6个9则表示一年内业务中断时间最多是31秒,那么这个级别的可靠性并非实现不了,而是要做到从5个9->6个9的可靠性提升的话,后者需要付出比前者几倍的成本,所以在企业里大家都只谈(3~5)个9。