自动部署 HTTPS 证书
需求之前使用腾讯云的证书,只有 90 天的有效期,每次到期了就要手动部署,下载 .crt 和 .pri 文件(或者是 .key ,吧,记不清了),然后手动移动到对应的文件夹。一个域名就要花好几分钟,效率很低。
因此问了问 AI,有什么更好的方案。最终决定采用 Let’s Encrypt 和 Certbot 结合的自动化方案。
哪个证书这里需要澄清一个问题。Cloudflare 有一个 Edge Certficate 的方案,可以自动化地续期证书,这个证书是浏览器访问域名时用到的证书。
然而在 Cloudflare 的服务器和源服务器之间,仍然需要自动化处理证书。本文要解决的是后者。
1用户 -- Edge Certificate --> CF 代理服务器 -- 本文要解决的证书 --> 源服务器
环境配置安装 snapd12sudo apt updatesudo apt install snapd -y
安装 Certbot123sudo snap install core # 确保 snap 运行环境是最新的sudo snap refresh coresudo sn ...
计组 | 浮点数的运算
说在前面浮点数的运算步骤比较多,而且种类也比较多。
运算数的不同会影响运算进行多少步;而运算数的表示方式(原码、补码、移码)会影响具体问题的分析。
浮点数的加减法加减法大概需要这样几步:
对阶。小阶向大阶对齐,否则大阶的高位被舍去,误差太大;
尾数的相加;
规格化;
左规
右规
舍入处理;
截断;
末尾恒置 1;
0 舍 1 入。
看看流程图吧:
所以如果理解了这一个过程,就会明白,为什么浮点数中,一个很大的数加很小的数会损失精度了。
浮点数的乘除法浮点数的乘除法,要经历如下的阶段。不用文字了,直接展示流程图:
这里常考的一类题目是到底需要规格化几次,需要明白原码或补码表示时,数值的范围。
有时候是 0 次,不过最多是一次。
说明的是,在加减法和乘除法的过程中,如果使用更大的扩展位,可以提高精度。例如,Intel 在实现浮点数运算的时候,采用 80 位扩展,等保存结果的时候,再截断到 float 或者 double 的长度。
CS50AI - 第 3 章 - 优化
序这节讲优化问题,怎样找到最优解。
大概分成三种问题:爬山问题、线性规划问题,以及约束问题。
爬山问题爬山问题比较经典,解决的问题是:如何在一群状态中找到最值。
什么叫状态呢?状态就是一种方案。比如说,在哪里建医院可以让附近的居民区到达各自最近医院的路径开销最小;再比如,外卖平台怎样安排送餐顺序才能让所用路径最短等等。
有的时候,追求最大值,这种函数叫 Optimal Function,有时候追求最小值,这种函数叫 Cost Function。总而言之就是寻找最值。
解决这种问题最经典的思路是(以找最大值为例),从一个点开始,环顾四周(邻居),有更高的,则向上前进,否则就到了一个极值点。
注意我说的,这里到了一个极值点,而不是最值点。找到的只是一个相对优的解,但并不是最好的,总结来讲,有如下的问题:
找到的是极值点,是局部最值,而不是全局;
遇到大片相等的值时,会卡住,无路可走(因为是严格大于);
贪心,有时候走些弯路会爬的更高。
修改后的爬山算法要对算法进行优化,有许多思路。有一些地方可以做文章:
Steepest-ascent 选爬升最多的邻居(其实就是刚刚的思路);
Sto ...
春天又来了
又到了一年春天,日子渐暖,人也更加懒散。
这学期开学之后,一直找不到状态,总感觉还在放假中。。不知道怎样才能有点干劲呢?说实话,挺感谢那位的,也挺感谢那位的,虽然因她们产生的情感也让我备受煎熬,但至少让我在繁忙又繁忙的大一下和大二上有了奔头。不过这种 buff 的效果只能维持一学期。时间再长,就会发现,这种情感是单向的。
我承认我是恋爱脑,所以为了不让别人借助这一点伤害自己,我就只能尽量做到理智。爱这种东西,多半是荷尔蒙在作祟。看到有人做出这样的评论,当鸟类求偶的时候,会做出奇怪的动作。比如珠颈斑鸠在求偶的时候,发出“固固”“固固”的声音,在发出第一个音节的时候低下头,在第二个音节结束时抬起头,如此反复。
我也是一样,不过那是初中的时候了。对于喜欢的女生,莫名其妙跟对方搭话,喜欢在对方面前转,即使,也很遗憾,对方和我不在一个班。如果在一个班,我不知道我会选择放弃,还是选择勇敢地 A 上去。距离产生了滤镜。
说到滤镜,我想到,如果和对方的关系不同,看到的对方也不一样。什么是关系?一切皆集合。关系是存放有序对的集合。比如说,我大一的一个室友,在群里可是出尽了风头。不论是奋战到深夜,还是请求 ...
CS50AI - 第 2 章 - 不确定性
不确定性(Uncertainty)上节课讲的知识,那是布尔式的非黑即白。这里,我们考虑一个更细粒度的刻画,那就是发生的概率。
概率(Probability)样本空间(Possible Worlds)讨论概率,需要事先划定范围,这个范围就是样本空间。
比如,掷一个骰子,只有可能掷出来 ${1, 2, 3, 4, 5, 6}$。
概率的公理(Axioms in Probability)有一些概率相关的道理是人们共同承认的、显而易见的:
所有的概率都在 $[0, 1]$ 之间;
样本空间中所有样本点的概率之和为 1。
无条件概率(Unconditional Probability)考虑扔一个骰子,点数的可能;或者扔两个骰子,点数之和的可能,这种概率都是无条件的。条件的另一种理解方法就是知识。
条件概率(Conditional Probability)条件概率,记作 $P(a | b)$,表达的含义是,在事件 $b$ 发生的情况下,$a$ 发生的概率。也可以有另外一种方式,那就是,已知 $b$ 发生了,$a$ 发生的概率。
条件概率的一个思想是缩小考虑的范围。譬如说,已经知道 $b$ 发生 ...
计组 | 数据的运算
加法之前说过,补码的好处就在于可以直接使用无符号数的加法器硬件。因此,这里说的加法都是补码的加法,当然还涉及到了浮点数的阶码加法运算。
理论在进入到硬件层面之前,需要对加法进行理论分析,尤其是溢出判断的部分。判断溢出有如下几种方法:
双符号位;
进位;
符号位和进位标志;
运算前后的符号位(正 + 正 == 正?负 + 负 == 负?)。
3、4 只适用于同号数求和 or 异号数求差的判断,用得少。
1 在加法运算中对两个 operand 用两个符号位,如果运算结束后两个符号位不一样,那说明发生了溢出,表明当前的长度表示不下结果。扩展后的高位符号位肯定是真的,但是在结果中会被截断,低位的符号位会被保留。所以如果低位的符号位和最高位的符号位不一样,说明最终的符号位不符合预期,发生溢出。
2 记录最高位和次高位的进位情况,二者的异或表示是否发生了溢出。用穷举法证明,思路是:证明异号运算不会满足溢出判断的标准;再证明同号运算用此标准可以判断是否溢出(思路是:如果结果的符号位和加数一样,考察两个进位;如果不一样,也就是溢出了,再考察两个进位情况)。
...
计组 | 校验码
这些校验码的校验原理都是:在数据位之外,增加几个校验位,用来验证传送的数据是否正确。
奇偶校验码比较经典的奇偶校验码是在数据位之外添加一个校验位。分成两种校验方式,奇校验和偶校验。前者要求数据位和校验位中 1 的数量是奇数;后者要求 1 的数量是偶数。
检错能力:1 位;纠错能力:0 位。
如果有两位或两位以上同时在相反方向进行了变化,则不一定检查出错误。如果说 不一定 能检查出错误,就说明纠错的能力丧失了,这种评价标准对于后续的校验方式同理。
如果有 1 位发生了错误,确实不满足校验标准,然而,到底哪一位出错呢?不知道,任何一位出错都会造成校验失败。
举个例子。
偶校验,数据是 ASCII 码的 A: 00010001,当前二进制序列已经有偶数个 1 了,校验位是 0。所以发送方发送的数据是:0 + 00010001。
如果有 1 位发生了错误,不妨是数据位的最低位,那么接收方接收到的是:0 + 0010000,不满足偶校验,检出错误。但是不知道是哪位出了错,所有的位数其中之一,都具有翻转的可能。如果有两位发生了错误,不妨设最低两位,则接收到的是 0 + 0010010,仍然满足偶校 ...
MySQL 的用户和用户权限管理
创建用户1CREATE USER 'username'@'localhost' IDENTIFIED BY 'password123';
删除用户1DROP USER 'username'@'localhost';
授予用户权限12GRANT SELECT, UPDATE ON foo.* TO 'username'@'localhost';FLUSH PRIVILEGES;
查看某个用户的权限1SHOW GRANTS FOR 'username'@'localhost';
删除用户权限12REVOKE ALL PRIVILEGES ON foo.* FROM 'username'@'localhost';FLUSH PRIVILEGES;
MySQL 数据库的导入导出
需求可能需要迁移本地的表格到服务器,或者反之。也有可能在服务器之间传送数据库内容。总结一下。
图形化界面#TODO
命令行导出导出 foo 数据库中 bar 和 baz 表到 mydump.sql 中:
1sudo mysqldump --add-drop-table --databases foo --tables bar baz > /path/to/mydump.sql
导出所有表:
1sudo mysqldump --add-drop-database --databases foo > /path/to/mydump.sql
导入在启动 mysql 后(sudo mysql)
1source /path/to/mydump.sql
或者命令行中输入
1sudo mysql < "/path/to/mydump.sql"
CS50AI - 第 1 章 - 知识
0. 序这节课讲知识。在上节课的搜索中,我们的 agent 在 bfs 和 dfs 中如没头苍蝇一般,到处乱撞。然而有了启发函数和 A* 搜索后,agent 仿佛就智慧了些。
所以这节课就讲一讲,除了这种较为基础的函数来推断之外,还有哪些存储大量知识,并高效的用他们推理的技术。
1. 命题逻辑我们最先接触到的数理逻辑概念叫命题逻辑。
1.1. 符号与连接词命题逻辑有两个组成部分:符号和连接词。
符号很好理解,是非真即假的陈述句。几种常见的错误有疑问句、感叹句、悖论等等。
孤木不成林。连接词指的是把符号连接起来的组分,常见的有与、或、非、蕴含、等价连接词。
如果读者学习过数字逻辑和离散数学,对这些概念应该了然于胸,这里就不赘述了。补充一点,描述这些连接词的性质(什么时候真、什么时候假),经常用到的工具是真值表。
1.2. 模式课程原文用的是 Model,如果用屈婉玲老师《离散数学》那本教材的语言,应该是赋值或解释。也就是把所有的符号都赋一个真 / 假的值。
模式的另一种解释叫 Possible World,一种可能的情形。这个词我认为很科幻、很浪漫。就像是许多平行世界一样,有的 ...