找到 15877 个结果
· 第 1/794 页(1-20)
谓词逻辑/一阶逻辑
blog.restkhz.com · 8879-09-19
使用了wiki内容和自己翻译了一部分英文和德文的教材,整理后作为笔记,公开出来给各位.德文可以无视.如果有错误非常希望各位能指出来! 语义和语法(Syntax und Semantik)这一段很重要,否则后文无法理解 符号(Zeichenvorrat) Individuenvariablen(个体变量): x,y,z或者带下标x1,x2…Individuenkonstanten(个体常量): a,b,c或者带下标a1,a2…Funktionssymbole(函数符号): f,g,h或者带下标Prädikatssymbole(断言符号): P,Q,R或者带下标Junktoren(逻辑符号):$\lor \land \lnot \dots$Quantoren(量词): $\forall ,\exists$Hilfszeichen: 偶尔也会有逗号之类的 项(Terme) 每个个体变量是一个项每个个体常量是一个项带有n个元(Stellig)的函数是一个项,而每个元也必须是项(元:可以类比参数,比如f(a,b,c)就有三个元) 注意:项是不能包含断言符号的. 公式(Prädikatenlogische Formeln)通常用希腊字母表示 如果 t1,t2, … ,tn 为项并且P为n元断言符号,那么$P(t_1,t_2…t_n)$就是一个公式如果$\alpha$为一个公式,那么$\lnot \alpha$是一个公式二元运算符连接的公式$\alpha \lor \beta$是公式如果$\alpha$是公式,$x$为自体变量,那么带有量词如$\forall x \alpha$是公式等式: 如果$t1,t2$是项,那么$t1=t2$是公式. 例子比如$\forall x (P(x)\lor S(x))$是公式而$\forall f \forall x P(x,f(x))$不是公式 优先级(Bindungsregeln)$\forall, \exists,\lnot$强于$\land$$\land > \lor > \to > \leftrightarrow$ 所以有$\forall x P(x) \lor Q(x)$, 解释为$(\forall x P(x)) \lor Q(x)$ 作用域(辖域Wirkungsbereich)一个变量可以和多个量词连接,如下: $\forall x \exists y (P(x,y)\land \exists x (Q(x,x)\lor S(y)))$ 但是这样:$P(x) \land \exists x(S(x))$后面的那个存在x就管不着P(x)了 还有这样: $(\forall x P(x)) \lor Q(x)$ 这种情况”所有x”管不到Q那里 一些名词 一个变量在作用域内被称为约束变元(gebunden)一个变量不在作用域内被称为自由变元(Feien Variablen????)一个公式不存在自由变元,被称为闭式(geschlossene Formel),而这才是命题. 改名(在这里我用B来表示这个解释函数) 约束变元: 在同一个作用域下的同名约束变元要改名,同步改.不能和别的重名 自由变元: 整个公式里的同名的同步改名.不能和别的重名$\exists xB(x) = \exists yG(y)$$\forall x B(x) = \forall y B(y)$ 公式解释(Interpretation von Formeln)(在这里我用B来表示这个解释函数) 规则与推导 $B(P(t_1,\dots,t_n))\leftrightarrow P(B(t_1),\dots,B(t_n))$$B(\lnot \alpha) = w$ 那么 $B(\alpha) = f$$B(\alpha \land \beta) = w$ 那么 $B(\alpha)=w,B(\beta) = w$, “或”同理 一些基本概念(Grundbegriffe)与命题逻辑类似,设$\alpha$是一个谓词逻辑公式 erfüllbar可满足:一个解释存在$B(\alpha) = True$falsifizierbar可证伪:一个解释存在$B(\alpha) = False$widerspruchvoll矛盾:一个公式所有解释都$B(\alpha)=False$tautologisch重言:对于所有解释$B(\alpha) = True$ 所以有:如果$\alpha$是矛盾的,那么它不可满足,$\lnot \alpha$重言,并且不可证伪. 语义推论(Semantische Folgerung)同样和命题逻辑类似: Semantischer Folgerungsbegriff设$\alpha,\beta$为谓词逻辑公式,那么存在$\alpha \models \beta$ $\alpha \models \beta$,那么$\alpha \land \lnot \beta$矛盾$\alpha$矛盾,那么对于所有$\beta$存在$\alpha \models \beta$ 演绎推论(Deduktionstheorem)(没有详细写,见wiki)设alpha和beta是谓词公式,M是一个如此的公式集合,那么存在:$M \cup {\alpha } \models \beta \Longrightarrow M \models (\alpha \rightarrow \beta)$ 逻辑等价(Logische Äquivalenz)也类似于命题逻辑设Alpha和Beta是谓词公式并且等价,写做:$\alpha \approx \beta$ 这意味着$B(\alpha) = B(\beta)$.和$\alpha \models \beta, \beta \models \alpha$ 转化规则(Umformungsregeln)基本规则这边的规则和命题逻辑那篇一样.但是我还是决定重写一遍.中文翻译见命题逻辑.设$\alpha,\beta,\gamma$为PL1公式,那么存在以下规则: Vererbung $\alpha \approx \beta \Longrightarrow \lnot \alpha \approx \lnot \beta$$\alpha \approx \beta \Longrightarrow \gamma \land \alpha \approx \gamma \land \beta,\quad \gamma \lor \alpha \approx \gamma \lor \beta$$\alpha \approx \beta \Longrightarrow \exists x \alpha \approx \exists x \beta , \quad \forall x \alpha \approx \forall x \beta$ Negation: $\lnot\lnot \alpha \approx \alpha$ Idempotenz: $\alpha \lor \alpha \approx \alpha$$\alpha \land \alpha \approx \alpha$ Neutrales Element: $(\alpha \land \lnot \alpha) \lor \beta \approx \beta$$(\alpha \lor \lnot \alpha) \land \beta \approx \beta$ Kontrad. /Tautol. $(\alpha \land \lnot \alpha) \land \beta \approx \alpha \land \lnot \alpha$$(\alpha \lor \lnot \alpha) \lor \beta \approx \alpha \lor \lnot \alpha$ Kommutativität $\alpha \lor \beta \approx \beta \lor \alpha$$\alpha \land \beta \approx \beta \land \alpha$ Assoziativität $(\alpha \lor \beta) \lor \gamma \approx \alpha \lor (\beta \lor \gamma)$$(\alpha \land \beta) \land \gamma \approx \alpha \land (\beta \land \gamma)$ Distributivität $(\alpha \land \beta) \lor \gamma \approx (\alpha \lor \gamma) \land (\beta \lor \gamma)$$(\alpha \lor \beta) \land \gamma \approx (\alpha \land \gamma) \lor (\beta \land \gamma)$ De morgan $\lnot(\alpha \land \beta) \approx \lnot \alpha \lor \lnot \beta$$\lnot (\alpha \lor \beta ) \approx \lnot \alpha \land \lnot \beta$ Absorption $\alpha \land (\alpha \lor \beta) \approx \alpha$$\alpha \lor (\alpha \land \beta) \approx \alpha$ 带有量词的规则 Quantorenwechsel:$\lnot(\exists x \alpha) \approx \forall x (\lnot \alpha) \quad \lnot (\forall x \alpha) \approx \exists x (\lnot \alpha)$(量词转换)Quantortausch: $\exists x \exists y \alpha \approx \exists y \exists x \alpha$ ($\forall,\exists$均适用)Quantorenzusammenfassung: $\exists x \alpha \lor \exists x \beta \approx \exists x (\alpha \lor \beta)$($\forall,\exists$均适用)(量词分配)Quantorelimination: 当x不是Alpha中自由变量(元)$\exists x \alpha \approx \alpha \quad \forall x \alpha \approx \alpha$Quantifizierung:当x不是Beta中自由变量(元) $\exists x \alpha \land \beta \approx \exists x (\alpha \land \beta)$ ($\forall,\exists$均适用,替换全部的$\land,\lor$也适用)(量词扩张\收缩率) 范式(Normalformen)否定范式(Negationsnormalform, NNF)定义这里定义什么的见命题逻辑部分 转换 $\lnot \lnot \alpha \Longrightarrow \alpha$(Negation)$\lnot (\alpha \land \beta) \Longrightarrow \lnot \alpha \lor \lnot \beta$(de Morgan)$\lnot (\exists y \alpha) \Longrightarrow \forall y\lnot \alpha$(Quantorenwechsel) 前束范式(Pränexe Normalform, PNF)定义 如果它可以被写为量词在前,随后是被称为母体的无量词部分的字符串。(wikipedia) 简单的理解就是把所有量词提前,量词作用域覆盖了整个公式(不知道这样理解对不对)比如:$\forall x \exists y \forall z (P(x,y) \lor H(y,z))$ 因为有量词扩张/收缩率,并且可以改名,所有的经典逻辑公式都可以转换为等价的PNF 转换举例,来自某大学讲义: $\forall x \lnot P(x) \land \forall x (P(x) \lor R(x)) \land \forall x( Q(x)\land \exists y R(y))$ $\approx \forall x_1 \lnot P(x_1) \land \forall x_2 (P(x_2)\lor R(x_2)) \land \forall x (Q(x) \land \exists y R(y))$(改名) $\approx x_q \lnot P(x_1) \land \forall x_2 (P(x_2) \lor R(x_2)) \land \forall x \exists y (Q(x) \land R(y))$ $\approx \forall x_1 \lnot P(x_1) \land \forall x_2 \forall x \exists y ((P(x_2) \lor R( x_2 )) \land (Q(x) \land R(y)))$ $\approx \forall x_1 \forall x_2 \forall x \exists y (\lnot P(x_1) \land (P(x_2) \lor R(x_2)) \land (Q(x) \land R(y)))$ 斯科伦范式(Skolem Normalform, SKNF)定义若一个式子$\alpha$是斯科伦范式,那么$\alpha = \forall x_1 \dots \forall x_n \beta$,此处的beta没有量词.同时,此时Alpha的量词中不含存在量词 有点晦涩啊,看看wiki 一阶逻辑的公式是Skolem 范式的,如果它的前束范式只有全称量词。(wikipedia) 相较于命题逻辑: 定义:可满足等价(Erfüllbarkeits-Äquivalenz)若两个谓词公式Alpha和beta可满足等价,写做$\alpha \approx _{sat} \beta$,意味着:当alpha可满足的时候beta也是可满足. 转换
微信小程序云存储图片上传及UI框架兼容补丁(wx.cloud.uploadFile, Wux)
blog.restkhz.com · 7839-09-19
一最近在折腾微信小程序, 因为我没有备案域名所以目前只能考虑通过调用微信自己提供的serverless API进行开发.5G的免费存储,千次操作,带1G的CDN流量,还是很可观的. Serverless概念, 不需要备案, 没有理由不用吧?但是我也遇到一些问题, 听我慢慢说来: 我开发的项目对于个人来说有点点大, 有使用框架的必要. 一开始用的iView组件库, 后来又自己补了一个客户图片上传功能,但是iView没有upload这个组件. 于是我又在项目里加了Wux UI混合使用.可是当我看起Wux的文档的时候人傻了: 根本没有云存储上传支持.赶快又去看了看微信亲儿子 weui, 也没有云存储上传支持.哦豁.亲妈不管. 二 本文接下来的代码是Wux的4e19b28 on 29 Nov 2020, 未来下面的代码可能会变化,不确保长期有效,当然Wux提供云上传支持那最好了. 我其实不太会ES6那啥玩意, 但是这个补丁得我还是得打.如果有大佬看见我的方法,别见笑. 好在微信组件库并没有特别复杂的依赖关系, 根据Wux文档:量身定制在github中下载的那个项目中的src/upload/index.js能看到upload的可读源码. 在文件的380行我们可以找到wx.uploadFile函数的调用, 观察是如何运行的: if (!this.tempFilePaths.length) return const { url, name, header, formData, disabled, progress } = this.data const file = this.tempFilePaths.shift() const { uid, url: filePath } = file if (!url || !filePath || disabled) return this.onStart(file) this.uploadTask[uid] = wx.uploadFile({ url, filePath, name, header, formData, success: (res) => this.onSuccess(file, res), fail: (res) => this.onFail(file, res), complete: (res) => { delete this.uploadTask[uid] this.triggerEvent('complete', res) this.uploadFile() }, }) // ... 根据微信官方API文档:wx.uploadFilewx.cloud.uploadFile 对照一下, 普通上传必须要url, filePath, name三个参数, 云上传要cloudPath,filePath这两个参数.filePath完全可以重用, url可以用于控制识别应该用那个函数,毕竟url格式应该是固定的. 至于name则是可以合并在后者cloudPath之中的.另一方面这两个API返回的对象也是一样的.所以应该可以考虑补丁. 简单的说,我就是让url这个参数格式为开头是cloud的时候就使用云函数,除去cloud和分割符后面就是云函数路径,加上name就是cloudPath可以上传了. 比如url是cloud:avatar, 那就是上传到云存储的avatar路径之下 我自己的脏patch代码如下 uploadFile() { if (!this.tempFilePaths.length) return const { url, name, header, formData, disabled, progress } = this.data const file = this.tempFilePaths.shift() const { uid, url: filePath } = file if (!url || !filePath || disabled) return this.onStart(file) //云上传补丁 begin //console.log('[*] upload:'+url.substring(6,) + '/' + name) if (url.substring(0,5) === "cloud") { //检查url参数开头是否是cloud this.uploadTask[uid] = wx.cloud.uploadFile({ cloudPath: url.substring(6,) + '/' + name, //拼凑cloudPath filePath, //直接利用filePath success: (res) => this.onSuccess(file, res), fail: (res) => this.onFail(file, res), complete: (res) => { delete this.uploadTask[uid] this.triggerEvent('complete', res) this.uploadFile() }, }) } else { this.uploadTask[uid] = wx.uploadFile({ //原本的调用 url, filePath, name, header, formData, success: (res) => this.onSuccess(file, res), fail: (res) => this.onFail(file, res), complete: (res) => { delete this.uploadTask[uid] this.triggerEvent('complete', res) this.uploadFile() }, }) } //云上传补丁 end // ..... 对应wxml, 只用在url那边如此填写: <wux-upload listType="picture-card" defaultFileList="{{ fileList }}" max="3" url="cloud:avatar" name="{{imgName}}" bind:change="uploadChange" bind:success="uploadSuccess" bind:fail="uploadFail" bind:preview="uploadPreview" bind:before="uploadBefore"> <text>上传</text> </wux-upload> 这个patch并不是个很好的方案,但是的确兼容了.希望未来wux能加入这个API的支持.
MYSQL: 如何快速导入上亿规模大量数据
blog.restkhz.com · 6986-09-19
长话短说,用自带的mysqlimport工具。基于LOAD DATA INFILE。少用INSERT。 起因服务暴露在外网,我发现一些爬虫和扫描bot十分有趣,想要跟踪他们。我收集了很多站,几年加起来总共上亿条访问日志,要导入Mysql用于查询分析。毕竟我之前导入过最多也只是一些博客和小日志的SQL。直接在服务器一如既往用了source一堆insert导入一个InnoDB表,结果先是炸了内存OOM。于是,我自己用Python拆分SQL成200多个sql文件,写了一个sh自动导入结果导入速度依旧不怎么好看。导入进行了大约12个小时,一个列的索引的建立又进行了12个小时。 btw,我的Mysql在虚拟机上,性能有限。 用中文搜索了一下,感觉回答零碎且不可信:有人各种玄学改参数,有人关log,有人source外面套事务。没人说为什么这么做,也没有整理。更有甚者自己数据库引擎到底是否支持事务都不知道。也真敢写,底下评论还真敢用? 我这里就不具体列举了。 用英文搜索了一遍。我找到了: How to Quickly Insert Data Into MariaDBLOAD DATA INFILEmysqlimport 惊觉LOAD DATA INFILE这不是之前SQL注入后利用的东西吗?不得不说我的确是知其然不知其所以然了。 而后我使用了mysqlimport在一个MyISAM引擎表插入,2.5小时后,导入和两个索引全部完成,整个过程最大内存占用略微大于1G(我参数设置保守了)。对比之前source insert和一个的索引花费的24+小时,附加还炸一次,已经好太多了。 一开始不想写这篇,因为看文档就解决了。但是看到简中圈子里绝大多数是一些奇怪的玩意儿,还是一群程序员写的。我还是打算这里半翻译半自由发挥整理,写一下。 有能力的话,推荐你亲自去看看上面链接里的官方文档文章。 最快的导入方法:使用LOAD DATA INFILE 推荐使用LOAD DATA INFILE,而不是INSERT。(若一定要用INSERT的话,如何优化在后面。) 这条命令设计就是为了快速导入。文件格式类似CSV,可以手动指定分隔符等等。详细用法请参考文档。 LOAD DATA INFILE 'file_name' INTO TABLE table_name; 这条命令会让服务器自己去读取服务器里的文件。 LOAD DATA LOCAL INFILE 'file_name' INTO TABLE table_name; 加了个LOCAL可以让本地客户端程序读客户端的文件发到服务器。 为什么是最快的? 不需要解析SQL,省CPU省内存。服务器是按一个大块来读取文件的(Big block,我不太懂,应该是read buffer里的block,目前权当字面意义。也可能是把I/O单位弄的很大节约I/O, 批量处理。)会自动禁用索引(UNIQUE除外)引擎会先缓存行再写入一个大块(MyISAM,Aria支持)对于空表,像Aria这样的事务引擎会停止log插入事务。毕竟回滚操作直接删表就行。 另外,对于MyISAM它还支持并发插入。和INSERT比,优势明显。 而且很节约内存。对于导入大的sql遇到内存不足很有用。我一个10+G级别的日志可以不需要拆分。服务器内存3.5G。之前我用source insert,客户端读一遍,socket过一遍,而后丢到数据库里缓存,缓存后还要解析,解析完了也先堆服务器里…别忘了SQL的括号逗号单引号也占用不少空间。 工具:mysqlimport(Mysql和Mariadb都有自家的,但是貌似略有不同)这个工具内部调用LOAD DATA INFILE,很方便。另外,在网络带宽不足的时候可以压缩发送流量,提高传输效率。 回归老问题:插入速度优化原理脱离工具我们应该做什么。除了工具内部优化的部分,还有什么别的我们可以做的? 背景当我们插入数据的时候,什么消耗时间?如果按重要程度排序的话。 事务最后一步把数据同步到硬盘,众所周知硬盘读写和内存比特别慢。引擎没有事务,一条一条写硬盘很慢。而事务又要一条条记录,一次又一次的锁,解锁,又记录日志,又写硬盘……我们可不可以批量一次多写一点呢?键的更新,索引越大耗时越长。可以想象你手里抓着3张牌往里面插入牌和抓着30张牌插入的速度肯定不同。而且一条一条INSERT就是一张一张插入,排序。可能还涉及写硬盘…这个我们可以到插入完数据以后再做。检查外键,如果有的话在存储引擎里加新的行把数据发给server 同步到硬盘和发数据这里我就不多说了,我没有RAID也没有千兆网。这方面我不懂。 禁用索引由上面第二点,我们知道每次都更新索引很麻烦,那我们可以到最后再做。 当原本表中数据本来就不多的时候,我们可以临时禁用索引。LOAD DATA INFILE会自动暂时禁用索引。INSERT导入你需要自己禁用。 注意,空表插入MariaDB会自动DISABLE KEYS,并且在结束后调用ENABLE KEYS。无论是INSERT还是LOAD DATA ALTER TABLE table_name DISABLE KEYS; BEGIN; ... 用INSERT或者LOAD DATA插入数据 .... COMMIT; ALTER TABLE table_name ENABLE KEYS; 在很多存储引擎中,至少对于MyISAM和Aria是这样:ENABLE KEYS是直接扫描所有行,然后排序键。 这样创建索引块比一行一行处理会快很多很多,并且使用更少的键值缓冲,节约内存。(如果你记得有个配置叫key_buffer_size) 禁用约束完整性检查在大量数据插入时也会很耗时。如果可以的话,可以禁用唯一约束,外键约束和唯一性索引。 SET @@session.unique_checks = 0; SET @@session.foreign_key_checks = 0; 对于InnoDB我们可以设置自增锁模式global.innodb_autoinc_lock_mode = 2;,改成交错锁。不锁表。对于并发有帮助。 触发器什么的,如果可以,也删了。 还有什么相关参数可以优化? innodb_buffer_pool_size:老生常谈。如果使用InnoDB并且有很多索引,可以调大点。key_buffer_size: 老生常谈。如果使用MyISAM并且有很多索引,可以调大点。max_allowed_packet: 当你还在用INSERT,调大。至少得装下你source的文件吧?read_buffer_size: 这里缓存了你LOAD DATA 读入的文件。 至于到底调多少,视具体情况。前提是弄清楚它到底是做什么的。如果不清楚,继续找官方文档。 还是用INSERT导入,如何优化?1. 根据原则首先还是根据之前列出的,首先临时禁用索引和外键。这两个开销很大。 2.扎堆放进一个事务很多插入连续在一起,可以放进一个大的事务。可以避免频繁同步到硬盘,硬盘读写很耗时。比如1000次写入放进一个事务,可以提高性能1000倍左右。(文档如此) BEGIN; INSERT x1000 END; BEGIN; INSERT x1000 END; ... 某些地方你会看到有人把所有INSERT全都放进一个事务里,那样会产生一个庞大的日志记录操作。一个事务跑一半炸了是要重做,有的还要回滚的。那个日志就是为了以防万一。但是你绝对不希望它变得太大。于是有人干脆就禁用了日志(CSDN上比比皆是这种做法)我相信对于空表插入这问题不大。但是如果它原来有数据的话可能出现意外数据库挂了可能就麻烦了。你禁用了日志,那么表在你插入新数据之前是什么样子呢? 3.一次INSERT插入多个值INSERT INTO table_name values(1,"row 1"),(2, "row 2"),...; 一堆冗余的INSERT字符也很浪费空间影响效率。要对得起max_allowed_packet的空间。 结尾总结:RTFM pls 如果你看到了这里,感谢你的阅读。 不要盲信CSDN,某乎上的做法。希望这篇文章能帮助到你,更希望你学会看文档,理解原理,而不是抄答案。同样我也不保证我这里的理解就是100%正确的,如果有问题,欢迎指出。
Docker搭建邮件系统(mailu)
blog.restkhz.com · 6703-09-19
废话去年,曾经在自己房间里的Gen10服务器上搭建过一个 邮件系统 . 在Proxmox中的一个容器上使用了EwoMail. 然而身处异乡又频频搬家,最后因为生活中各种毛刺琐事,那个CT便再也没有闲心启动过了.当时我选择使用EwoMail是因为它在国内还比较活跃,相关资料也很齐全.简要说明一下当时搭建过程: 使用了CentOS的CT模板利用FRP转发端口到AWS的VPS上设置SPF和DKIM等等 当时用了一阵子,也还可以(就是能用),但是这样子缺点也很明显: 在2020年centOS的变质,已经不再可靠.由于网络环境,和内网转发这两个情况,使得这个本对服务可靠性要求极高的服务变得不稳定.动态IP和民用宽带导致对于PTR和SPF设置成为了一大问题.尽管当时已经在mail-tester的spam测试中高分通过并且并没有邮箱会Block我的邮件.EwoMail在日后的维护上还是有点繁琐.(独占一个CentOS)尽管已经用CT单独创建了. 以上这些原因还是让我最终放弃了这个方案. 选择:寻找新方案我决定在AWS上直接搭建邮件服务了,那么又有问题了: 服务器已经在跑别的服务了,很多国内开源邮箱的安装对于原来的服务是一场灾难.无视你之前安装的服务强行覆盖,并且日后维护的环境混乱是致命的. 干净的CentOS? 我哪有钱再开一个?至于EwoMail必须需要一个CentOS,显然我不会选择CentOS.AWS默认不开放SMTP出站(最后写了解决) 看了看各种开源邮件系统,最终 Mailu成为了我的选择. 介绍: Mailu的哲学看到首页,文档式的页面赫然写着一行General Concepts: Philosophy. Mailu背后的哲学是基于几条重要性递减的原则的: 一个适当/合适的邮件服务器只运行免费软件一个适当/合适的邮件服务器应容易设置和维护一个适当/合适的邮件服务器提供合适的安全性一个适当/合适的邮件服务器应该有简单美观的UI 哈,有点意思. 首先,Mailu是开放且免费的. Mailu运行在Docker之中,而且使用了多个Docker容器,通过一个虚拟的内网来通信,对于一个VPS来说,很好的解决了一个多用途VPS管理维护的问题,某种意义上也解决了部分安全问题. 如图,portainer容器管理能看出来mailu是怎样的架构. 另外,和别的很多邮件系统一样,使用Roundcube或者Rainloop作为web email client. 有着美观的UI. 管理台基于Flask,维护配置也很简单.而且安装过程几乎只需要点一点,复制粘贴一下就行.非常的友好. 安装环境和准备吹了一波了,开始动手吧.首先就是啃文档,准备环境和选择Mailu版本.在写本文时,Mailu的1.7是最新的稳定版,那么就选择Mailu1.7了. 至于环境,不像EwoMail,Mailu理论上可以在任何支持docker的机器上运行. Mailu官方更推荐使用Debian,因为他们的测试几乎都是在Deb上完成的.DockerAPI版本大于等于1.11.而如果用docker-compose安装,那么(目前)需要compose版本为2.22GRAM,1G空闲,虽然我512M机器跑起来了. 硬件环境官方认为至少需要2GRAM机器并且确保1G是空闲的,出于稳定性考量,是应该这么做.但是很有趣的是,我vps机器只有512M的RAM, 居然跑了起来. 现在占用内存大概300M出头.SWAP几乎满载.因为在安装的时候数据库选择使用了sqlite.(个人邮件和机器邮件通知应该不会需要那么好的数据库性能)当然你也有诸如Mysql的选择,整个安装过程是一键自动的,你也不需要操心配置. 2021/2/8补充: 512M内存有宕机可能. 任何暴露在互联网上的固定端口服务时时刻刻都在遭受攻击,我的SMTP服务一直在经受洪水般的暴力破解. 在二月八日因为SMTP不堪重负服务挂了一会. 大量swap硬盘操作导致CPU一直空闲. 出于稳定性考虑, 非常不建议使用512M的机器, 建议更换大一些的内存的机器. 我相信1G内存对于sqlite的mailu应该是足够. 准备增加RAM. 2021/6/6: 1G内存的VPS已经稳定跑sqlite数据库的mailu几个月了, 依旧反应迅速. 之前512M用了几个月后两三个星期挂一次… 施工中Mailu的安装很有意思,在线生成docker-compose.[安装生成工具] 由于点点鼠标要啥有啥,具体需求因人而异并且未来应该会有变化,所以不会上截图, 而且至于你要敲什么命令, mailu会因人而异的自动生成你要敲的命令,安装文档,手把手告诉你该做什么.太贴心了,我不啰嗦了. 存储卷就默认的/mailu就行,TLS除非有别的方案,letsencrypt,挺好的.Mailu会自动更新自己的SSL证书完全不需要自己操心(更新:目前Letsencrypt证书在个别邮箱客户端因为SSL pin问题后需要在邮箱客户端手动禁用SSL pin安全功能.因为Letsencrypt证书三个月过期后更新的证书显然和SSL pin的证书不一致导致客户端认为受到中间人攻击自动放弃连接.不过也就是第一次配置点一点的问题,不麻烦.) 至于邮件客户端,可以选一下,提供rainloop和roundcube.都挺好看.我用的rainloop, 没啥问题. 反病毒因为机器性能不行,没开.webdav,fetchmail随意. 至于IPv4 listen address按需要改一改,虽然不推荐0.0.0.0但是我设置的是0.0.0.0 至于数据库,为了压缩内存消耗,我选择了最轻量的sqlite.嗯,和这个博客系统一样. 一些都设置好了,点击生成后会跳转链接,根据你刚才的选择配置,你跟着它一行一行把命令复制粘贴进终端,不会出错. 跟着自动生成的安装文档,到此为止,你的邮件系统应该就搭建好了. 防止暴力破解的验证次数限制不宜设置过低,这里有坑:Rainloop每次操作都存在验证,防止暴力破解的block工具并没有在意你有没有通过验证. 也就是说,尽管你每次验证都是通过的,短时间Rainloop频繁操作依旧会把自己Block掉.然后在Rainloop中只会提示摸不到头脑的“authentication failed”然而任何第三方客户端并不会受到影响. 哦对了,希望你DNS的MX也设置好了.如果设置好了,此时进入后台配置一下,去/webmail里接收邮件应该没有任何问题. 我真没觉得这块还有啥好说的 剩下就是SPF,PTR这些设置.另外DKIM,DMARC设置也都是后台自动生成的,只需要你自己复制粘贴填写进域名txt字段就好.非常简单. 如果不知道咋整, 请结合别人文章或者你DNS服务商的帮助文档. 一搜一大把, 不提. 结束以后可以去mail-tester测试一下你的邮件分数, 如上配置几乎满分, 不用担心你的邮件被投入垃圾箱. 最后如果你是在lightsail搭建的,那么你的所有smtp通信都是被屏蔽的.你需要提交一份工单.现在可以看下一篇文章.刚刚已经设置好了SPF,PTR,DKIM,DMARC,只需要和lightsail工作人员详细说明你已经进行了足够安全的设置避免spam,就可以unblock. 至于AWS中lightsail服务器smtp发邮件限制解除看这里
2021杂谈:2021年的博客和大学一年级的学习
blog.restkhz.com · 5318-09-19
博客有一个月没有任何更新了, 最近比较忙.这些年汉语博客生态不难发现几乎都是一些笔记,技术类的文章资料之类的. 毕竟在这些年,在博客,视频的生态之中文字所描述的一切生活感受都是没有价值的东西.为什么? 谁在意你怎么过的?没有流量.谁不喜欢视频呢?视频也太长了,来不及看,那就压缩成为短视频.相比于大米白面的正餐,还是花样多的零食更有它的魅力.唯独技术类的东西文档比视频更加直观清晰. 但是就算是技术博客文章,若是给linux装个打印机, make intall一个什么东西的文章, 个人认为还是没什么价值. 这显然是烂大街的内容. 我希望写一些能节约他人学习查找资料时间的东西,帮助一些学习,搞技术的人. 生活内容看心情.毕竟我这个人no life. 可以两三天不开口和别人说一句中文(自言自语除外) 这些年国内作为流量入口,搜索引擎已经开始逐渐失去它的光辉. 如果说十多年前的web2.0还是小农经济自产自销,内容创作者自己就是自己的品牌,那么很快的,就开始有大型内容社区,像地主,企业一样.这些年的营销号背后的写手编辑其实就是那些生产搬运信息的工人,替一个大型的企业做着生产. 这个时候大型企业的APP就是流量入口.几乎人人都有微博x音bilibili(这三个我至今一个都没有),每天也都要花时间在那几个APP上浏览信息. 而这些年的人工智能算法也可以很好的根据个人口味精准投喂零食. 这两年打开外卖APP连自己吃什么用户都要纠结很久, 需要用户自己主动找吃的的那种搜索引擎自然不讨好. 而至于那些营销号的”中心化”,”恶性竞争”,”产品质量”, 我不多谈. 哦,顺便说一句,在2021年2月15日,某度对我站的收录量是: 1我不会再多考虑某度的SEO问题了. 毕竟G站和B某站很早都已经做到了全站收录,这几个月来搜索展示量无论如何超过了1k.这个博客系统设计也考虑到了SEO,我不会再做任何动作讨好那个企业. 我不知道一个博客站在未来是怎样一个定位. 毕竟这就是一个小摊子, 生产的任何东西,多半不会有搬运,不会有投喂, 就安静的放在荒郊野外某个灌木丛里, 饥人自取. 而我的博客净是一些高不成低不就的东西, 绝大多数人的博客其实也都是. 这就是一个尴尬的现状: 一个博客的内容的受众十分有限, 通常是某一个技术类别中的一个圈子其中的一个并不太宽的水平层次的人. 可以这么说, 如果一个博客没有一个团体支持内容创作, 那么它定为永远就是一个做公益的小摊子, 想做做公益的大摊子的可能微乎其微. 在现在,在未来, 必定是一个小众的东西. 做一个东西没有任何回报,没有任何成就,没有任何希望 这是这些年很多个人博客快速死亡的原因. 我在大学一年级的第一学期, 依旧做一个学生.因为之前中学我实在太垃圾,前阵子考试之前在梦中被批:”学不起就别学, 活不起就别活”挺惊异于我大脑在不和人交流的情况下的梦境创造力.第一学期从数学命题逻辑,积分,级数,一路杀到欧拉公式图论贝叶斯另一条路从自动机杀到BNF,上下文无关文法. 作业里从Python,java,c一路又杀到Scheme和SML.我一个老学渣,不得不加班加点… 难哦?难哦.
从DeepSeek开始,再瞎扯一次AI(LLM)
blog.restkhz.com · 4553-09-19
纠结了一下到底写不写,这个话题目前看争议挺大的。这篇文章会在草稿箱里多呆一会了。等到风头过了,我再发。我不是什么AI专家,文章有主观感受内容而且非常不严谨,你们看着乐一下就好。 回顾虽然用了很久的chatgpt,但是已经有很长时间我没有太关心LLM有什么新消息了。比较巧合的是,我前段时间大概一月中旬才开始真的“再次”接触LLM(大语言模型)。正好撞上了DeepSeek r1 发布。 上次玩的时候,貌似还是LLAMA才发布后不久。当时费好大劲跑了一个llama 大概7b大小的模型,那个时候的模型文件巨大无比。而且那时候的LLAMA貌似中文很差。英文和中文对话的智商不是一个水平的。后来看到有不少人给模型做测试只用中文我觉得似乎不是特别公平。 我们先给部分读者扫一个盲,说一个基础概念。就是这几b几b是啥。这里指的是参数量,有多少个参数,b是billion(十亿)的意思。一般这个数字越大,模型越大。模型越大,通常,会更聪明。但是训练和运行对硬件的要求也会更高。有不少模型,都是有不同规模的。比如google的Gemma-2就有2b, 9b, 27b三种尺寸。 2b就刚好能用,能总结,能简单翻译,但是几乎没智商,也没什么知识。好处是很差的商务笔记本也能流畅运行。9b就能扮演个角色了,各种能力都好了不少,感觉“有点脑子了”。至于27b,给我一种开始接近chatGPT-3.5的感觉。但是有点大,本地我这电脑就跑不起来了。这个时候可以部署在云端跑。 最近因为想做一些有趣的事情,可能会依赖LLM。所以又跑到HF上玩了。现在的Ollama,LM-studio这些工具把本地运行LLM变得很简单,优秀的量化算法和强悍的小模型把LLM对机器配置的门槛又降低了。机器实在不行,那就接一个API,直接云端跑。而且还有很多客户端开始集成RAG和在线搜索功能,LLM会变得更加有用。 我觉得我博客的任何读者都可以去试试。 从DeepSeek扯扯最近DeepSeek r1刷屏刷得厉害。其实元旦之前在他们发布v3的时候就上过新闻,但是那个时候国内关注度不算很高,圈子里关注,圈子外比如知乎上有讨论,但是感觉气氛不好。国外LLM圈子里貌似反而对v3挺好奇的。 比较巧合的是他们发布r1的那会我正好就赶上了,去玩了玩。当时根本没想那么多,单纯是因为之前听说了v3。压根没想到下周一,r1的新闻铺天盖地。 我说一下我最初用DeepSeek r1的第一感受:官方网站上的r1,我觉得还不错。思考出来的结果没什么问题。有些有坑的问题回答完美,比v3强。而且有自己的风格和特色。中文回答质量高。HF上面DeepSeek官方所说,他们模型有671b,活动参数30b出头。 至于蒸馏模型,那就不太能看了。我当时跑的蒸馏8b 14b的,基本上不能用。为什么呢?推理的自言自语很耗时,而且智商和知识明显不够,对于某些基本问题推理半天依然会经常出错。换成Google的Gemma-2-9b模型在回答正确性差不多的情况下速度更快。32b终于可以正确推理,回答问题算能看了(这也可能是llama的锅?14b本质是llama) 虽然官方有放出分数,但是我还是想说我的主观对比:原版r1可以和chatGPT o1上同一个擂台。但是就我实际体验,我没觉得r1就真超过了o1。蒸馏模型32b我不好说,没觉得比o1-mini好用。甚至70b蒸馏模型也没有。 以上我说的任何东西都不负责,只是主观感受。 但是我觉得这个东西的意义不在于和OpenAI的商业模型做对比。我觉得,他们最强的是:用新的技术在确保模型质量的同时大大降低了成本。他们的论文比较有意思:一路RL逼模型也能逼出来。用MLA,MoE等等新技术,大大降低训练成本。这篇论文相比于别的很多企业放出来的资料算是非常细节了。 这种技术细节的公开可能会改变LLM未来的发展。 舆论说全面超越OpenAI,不至于。原因上面分析过了。说DeepSeek r1是假的,也不至于。论文中新技术已经被复现了。说用和chatGPT对话的数据,这个貌似已经是标准做法了。论文出来几年了。 我倒是觉得,DeepSeek R1还有一个意义:我发现有很多中国人在接触到它的时候非常震惊,甚至惊喜。我有种感觉,DeepSeek R1是他们第一次接触到o1这样的模型,甚至可能是第一次接触到LLM。 舆论会是捧杀吗当然,随着媒体持续轰炸,市场和政策上的那些事情反而变得紧张。什么禁令什么东西都来了。 我只是说一个有趣的事情: 我们先来看看目前在HF上的开放LLM排行榜上都是谁: 所以呢??我们看一下他们的架构和基座模型: 你会发现几乎都是阿里QWEN的魔改。 我自己有试了阿里QWEN 72b和这榜单上的一些LLM,我觉得这可以和OpenAI的4o在同一个擂台上。这是24年夏天的模型。 为什么很少听媒体吹Qwen?嗯…我有猜想的原因,但是我不会说。 最后所以我们现在到底在用LLM干嘛?我不知道,我感觉LLM目前貌似被用于客服。
简单密码:写给程序员的密码学入门(三:古典密码,从凯撒到OTP)
blog.restkhz.com · 2868-09-19
讲到加密,就不得不想想它的历史故事。加密其实没有那么简单。 从凯撒位移说起这个恐怕是最有名的古典密码了。怕观众不记得,给各位复习一下:其实就是把整个字母都往右边移动了几位,至于几位这个就是密钥。很明显26个字母你只有25种移动方法,还有一个就是原来的样子。比如下面这就移动了6位。 明文字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ密文字母:GHIJKLMNOPQRSTUVWXYZABCDEF 比如我想加密“BOB”那么就找对应的就行,B对应H,O对应U,结果是“HUH”. 它的缺点在哪里?很明显: 总共也就25个不同密钥,每个都试一试,结果肯定能出来啊。统计学。根据字母出现频率,比如 E 在英文中出现频率极其高,那么我们只要分析哪个字母出现频率最高,它很有可能就是 E 。只要有足够的密文就会让统计更加准确,就有可能破解。 这个网站就可以做频率分析:http://quipqiup.com/ 当然以上还是我们在只有密文的情况下,我们已经可以对密码分析。 实际情况,可能攻击者已经知道了更多… 比如一部分密文对应的明文,甚至可以接触到加密或解密的机器(程序):比如黑客已经知道“HELLO”加密后是“NKRRU”,那么可以很轻松的推断出位移(密钥) 如果黑客能接触到密码机呢…黑客输入“AAAA”出来了一个“DDDD”这不一眼就看出来密钥了嘛? 这里就引入根据攻击者知道的信息由少到多,对攻击的分类: 唯密文攻击:攻击者仅知道密文已知明文:攻击者知道了部分密文相对应的明文选择明文攻击:攻击者可以随意使用密码机生成密文,试图分析选择密文攻击:攻击者可以随意用解密机解密密文,试图分析 所以加密算法必须抗住选择明文和选择密文才算行。如果都拿到密码机还分析不出来,那么就更不可能已知明文,或者仅仅根据密文就能破解。 而凯撒位移甚至连唯密文都抗不住。呃…只能说是娱乐水平的了。千万别用! Enigma机其实简单的理解这玩意儿,就是:每次输入都会换偏移量的凯撒位移机器。 这玩意儿在当时给盟军破解造成了很多困难。但是在早期,波兰人找到办法通过已知德军明文中的重复规律(已知明文)大大降低了暴力的复杂程度。而后德国人也不傻,随着开战,直接加俩转子,可能性翻几倍后,把波兰人整不会了。波兰在被拿下之前把这个技术给了英国。英国又发现,一个字母不可能在加密后变成它自己的特性,而恰好德语一个词又很长,所以能大概猜出这个词的位置。这又降低了可能性。 注意安全!!!我在第一篇文章讲过,不要搞自己的加密算法。绝大多数人发明的密码不会比Enigma更好。 我来举一个反例: 这里他用This is my coat.经过他的算法得出jZubpd!zn!tj!tiU思考题:你能猜出他是怎么加密的吗?(提示:观察感叹号,还有周边字符数量)这是已知明文了。如果你猜出来一大半(因为这里信息未必够)那你就已经超越他认为的顶尖黑客了。但是对于他开发的别的web项目,由于你能接触他加密脚本,那就是选择明文。只会更加不安全。 异或和OTP你或许听过异或(XOR) 符号: $\oplus$ 是一个特别安全的加密… 从异或开始说起给各位复习一下,我们先看看xor这个逻辑吧 xor 0 1 0 0 1 1 1 0 输入都是0或者都是1的时候,输出就是0. 但是输入一个0和一个1的时候,输出为1. 啊那为什么xor特别安全呢?你会发现这个逻辑输出0和1的概率是均等的。也就是说,只要我们密钥概率足够随机,那出来的结果0和1也是随机各占一半。这样密文对于统计,统计不出什么啊。由于密钥随机,完全消灭了明文的特征,使得密文就像随机数,仅有密文的话目前认为不可破解。 而加密的过程也非常简单:明文 xor 密钥 = 密文解密: 由于相同的东西经过xor会抵消,(密文) xor 密钥 = (明文 xor 密钥) xor 密钥 = 明文 这么好?那为什么我们不这样用xor加密? 别急,因为有缺陷,我们过一会讲此外,其实有用,这就是OTP了 OTP(一次性密码本 )因为这玩意儿有xor的安全性,这是当年华盛顿-莫斯科电话专线的加密方式。也算是古典密码的高级玩意儿了。 那它是怎么做的呢? 密钥:你需要一个至少有明文长度那么长的随机并且一次性的密钥异或:一位一位地让密钥和明文xor 就这么简单! 比如我们想加密“HALO”先转换成二进制:H(01001000) A(01000001) L(01001100) O(01001111) 明文:01001000 01000001 01001100 01001111 密码:11011001 00100010 00101011 11111010 --------------------------------------------------------------------- 密文:10010001 01100011 01100111 10110101 单纯的OTP现在不常见了。我之前说它的缺陷: 你很难找到一个足够长并且足够随机的一次性密钥长:如果你要加密1G的数据,那么你的密钥也必须有1G。啊,这还怎么玩?这1G的密钥你打算怎么给对方? 随机:随机其实很难。比如你有0到50这个区间的真随机数,现在你想把它乘二扩展成0到100区间,可以吗? 不可以。不然你得到的都是偶数。其实并不随机。 很多时候我们都是在用伪随机的。不信你开个python,用一样的随机数种子,你会发现出来的随机数是一样的。还有很多时候,很多人用时间戳当种子。如果我知道这个密钥是什么时候生成的,那么我也可以得到和你一样的密钥。 用操作系统的随机数发生器会好一些,比如/dev/random和/dev/urandom。前者质量好但是会不够用。后者质量略差但是够用。 一次性:xor的密钥必须一次性。如果有重复的话,带上已知明文,是可以获取到密码的。如果就算没有明文,我们依旧可以得到点什么。 前文说过,由于相同的东西经过xor会抵消明文 xor 密文= 明文 xor (明文 xor 密钥 ) 这里明文抵消,直接得到密钥。 那么密钥因为重复而相同,但是不知道任何明文会怎么样呢?密文1 xor 密文2 = (明文1 xor 密钥) xor (密钥 xor 明文2)= 明文1 xor 明文2这里密钥会抵消,留下两个不同明文的xor。这有什么用?看图:(图片来自: https://www.crypto101.io/ 的pdf的一段。这书很好。) OTP留下了什么?人们一直在想方设法改进OTP的缺点。因为他优点实在是…太香了。那么它的缺点可以解决吗?比如,我们可不可以根据什么方式生成足够长,足够随机的密码… 现代密码的流密码(stream cipher)就是这种思路。就像溪流一样,密码和明文源源不断地流进去,密文流出来。而流密码的重点就在:我们如何生成OTP的密码。 比如:通常人们用AES作为块加密,但是谁说AES不能作为流加密 ? 这是AES-CTR,你会发现这里的AES只是用key去加密随机的 Nonce和计数器(Counter),AES产生的密文将作为一个类似随机数的东西,去和明文(Plaintext)异或得到真的密文(Ciphertext) 注意: $\oplus$ 是xor (图片来自:wiki 公有领域) 而到了这里就已经逐渐步入现代密码学了。
谈谈Monero门罗币匿名生态应用:支持XMR匿名购买的VPS
blog.restkhz.com · 2772-09-19
当你找到这篇文章,应该都多少对门罗币有点了解了。匿名?隐私?臭名昭著的矿马?快成稳定币的价格?交易所人人喊打不断被下架?今年LocalMonero关闭,币安也下架了Monero。令人唏嘘。 简单说一下这个东西吧,它设计的目的就是可以当现金一样,尽可能隐藏流动痕迹。 Monero有三宝: 环签名构造的公钥让发送者隐藏RingCT隐藏交易金额接收者实际上每次交易都有一个不同的收款地址。 简而言之就是难以追踪。 而为了区块链整体的安全Monero又用了抵抗ASIC的算法作为PoW,目前是RandomX。通过大量代码分支和在一大块内存(没记错是2G)中随机访问让ASIC变得不划算,从而避免算力垄断(结果都是黑蒜矿马满天飞,而且算力都集中给矿池了是吧…) 我原先打算重点谈谈Monero在隐私保护方面的应用,把它放到隐私保护系列去的。 可能计划谈谈Monero交易所现状,但是我知道的不多,没啥好说的。谈谈Monero生态里匿名购买手机号,手机卡,代理等等的应用。但是考虑到各种问题,我大概会放弃编写这些内容。 可能最实际的还是购买VPS吧。毕竟手握一个匿名IP还是挺有意思的事情。 支持Monero支付的匿名VPS首先声明,我并没有每个都尝试过。这也是我头一次写这种东西,没啥经验。顺序不代表推荐程度,我是想到哪个写哪个的。我会详细介绍几个我比较熟悉的,但是他们未必是最好的选择。 我会尽可能介绍他们的特色,价格,顺便会用wayback machine看他们首次收录的时间来帮助你推断他们跑路的可能性。当然跑路了我也不负责哈。 如果链接存在推广我会告诉你。 KYUN 链接:KYUN (没有推广链接,他们也不提供) 我第一反应是他们网页做的不错,价格也便宜。反正就玩玩…买了目前最低配 1u 512Mb 10G的配置3.28EUR/mo,大概3.4美元那样。huh。增加到1G ram也就3.56EUR,非常非常便宜。 提供: 目前服务是VPS,另一个容器服务一直没上线 提供: 美国机房 Spokane罗马尼亚机房 Bucharest一个kyun.li的子域名 付款方式: Monero (如果使用Monero充值会送10%)Stripe KYC: 不要邮箱,你付钱就ok。没有KYC。 如果选择低配主机价格非常的便宜,但是带宽不怎么高。后期可以对配置进行更改。提供IPv4/6对于流量来说有一定限制。他们不喜欢你搞VPN。虽然后台可以自己限制网速,但是就算自己不限制也快不起来。Anyway,对于一个小鸡来说完全够。如果你只是想要匿名的IP,顺便VPS跑一些无关痛痒不要求配置的服务,这个我想完全足够了。 我在这里有一台小鸡,用了一段时间了。他们应该在罗马尼亚,根据Wayback machine和官方博客考究了一下他们比较新,在2023年左右才启动。 我也想把网页做这么好… Cockbox 链接:Cockbox (注意,这个链接含有推广) 全站恶俗,貌似老牌。尤其是用户感言,非常有特色,不得不提他们。用户感言是随机刷的,我按爆了F5,这截图里是唯一一条中文的。我:鸡掰盒子,真的鸡掰 提供的机房主要在罗马尼亚,也有Moldova机房的。最低配置0.5u 1G ram 15G硬盘。10刀乐一个月。 支付: moneroBTC仅仅支持上面两种。 根据wayback考古能追溯到2019年。应该也在罗马尼亚。 SporeStack 链接:SporeStack (鼠标放上来,哈哈也有推广) 当然咯,这个是比较老牌的了。他们主要是通过调用Vultr和Digital Ocean的API来在Vultr/DO创建主机。他们价格肯定也更贵。比Kyun贵。但是你的选项也很多。但是我想宽带和稳定性可能更好。 最便宜的机器1u 512mb 10gb配置的0.5T带宽, 7.5刀一个月。DO的机器。 提供: VPSspore.garden的子域名 接受付款: Monero对,只接受门罗币。 KYC: 他们会给你一个Token,这玩意儿就是全部了。忘了就没了。等于没有KYC 根据wayback考古能追溯到2016-2017。讲道理他们应该不太可能跑路。反正他们没机房。 INCOGNET 链接:INCOGNET (没有推广) 这家,相比于之前的,感觉更老美。所以看起来提供的服务就比较多。 提供: 域名购买建站荷兰和美国的VPS/专用服务器WireGuard VPN代理可能还有,但是我眼神不好。 他们的理念是:我就做我技术的事,没那么多屁事。价格便宜不贵而且选择比较多。但是最便宜的套餐目前可能都要一买一年。 付款: Monero,BTC,LTC等等,貌似也内置兑换接口来处理更多虚拟货币。应该支持USDT-TRC20Paypal。可能也支持信用卡。 KYC: 邮箱,基本上等于没有。 wayback: 2021年上线。 其他的这里单纯就是不熟,并非他们不好。写文章的时候我也没深入了解他们。个别我觉得还是有潜力的。你们自己看着玩玩吧。 这里不会有任何推销链接 ServersGuru:便宜,不限流量,说有DDOS保护。付款方式很多。MyNymBox: 主机域名VPS,价格还行。NiceVPS:提供的服务类似INCOGNET,价格贵了点。OrangeWebsite:建站和VPS,贵。UDN: Ukrainian Data Network:VPS/专用,价格还行。但是UI基本没有,想买问客服。
逻辑:命题逻辑,语义后承,和转化规则
blog.restkhz.com · 2395-09-19
命题逻辑和语义后承最近在自己学逻辑, 逻辑是计算机的一个重要基础学科.然而本人自己找的教材资料是德语英语中文各个语言,在此做出整理.可能存在错误,欢迎指正. 逻辑学起源于古希腊. 当时“雄辩“(Rhetorik)时常用”演绎推论法”(Deduktion). 由前提(Prämissen)和结论(Konklusionen)构成. [TOC] 命题逻辑的语法(Syntax der Aussagenlogik) 命题逻辑由 原子公式(占位符,命题字母,命题变量) 和 逻辑运算符 组成. 而这样的一个式子(Formel)通常会用一个希腊字母表示.(在此文档中如此, 中文资料也见过使用拉丁字母abc的) 这样的陈述可能很难想象出式子,那么在这里附上一个式子: $\alpha=((\lnot A \land B)\lor C)$ 原子公式(Aussagenlogische Atome)原子公式也叫占位符,命题字母,命题变量(Aussagenlogische Atome, Elementaraussagen, aussagenlogische Variablen)由带或不带下标的大写字母构成, 比如:A,B,X_i如上面例子中的ABC. 运算符(Junktoren)这里目前列出一些基本的运算符. Junktoren $\land$ Konjunktion和 $\lor$ Disjunktion 或 $\lnot$ Negation非 $\rightarrow$ Implikation蕴涵 $\leftrightarrow,\equiv$ Äquivalenz等价 符号记忆很简单, 我是觉得or比较容易true,贱贱的笑笑$\lor$. and比较刁难,不容易true, 摆脸色了$\land$. 其中的和, 或, 非, 不难理解.and很明显从自然语言语义上就是”两者都成立才行”, or就是两个随便哪个行就ok, not 就是取反.等价是两者同为True或同为False才是True,也不难理解. 而蕴涵则可以理解为一个条件. 比如: P为人活着, Q为有水源:那么$P/rightarrow Q$真值表可以解释为如下 人活着就要有水源. True人没活着, 但是有水源, True人没活着, 没有水源. True人活着, 但是没有水源. False(这不可能) 此时, 有水源就是人活着的必要条件. 也就是说, 人活着(P)是有水源(Q)情况的子集.同样充分条件也可以用蕴含关系表达. 而等价可以当作”充分必要条件理解”能被2整除的自然数是偶数, 自然数偶数能被2整除. 逻辑真值表等价. 运算符号优先级Bindungsregeln dienen der Ersparnis von Klammern $\lnot > \land > \lor$也不难记,小学牛津英语的神回答:not at all(not and or) 此外我接触过的大多数编程语言,php, python, C(++), java, javascript都遵从这个运算规定. 真值表(Wahrheitstafel)我个人觉得没啥好做笔记的 一些基本概念(Grundbegriffe)先设一个集合$V$,是某式子所有原子公式(上面的A,B,C那样的变量)的集合 一个函数$l()$存在映射$V\to \left{ True, False \right}$ (解释,Interpretation) 假设存在一个$\alpha$: Erfüllbar(可满足): 至少存在一个赋值方法可以让$l(\alpha) = True$ 比如$A\lor\lnot B$ 当 $A=True,B =True$Tautologie(重言,永真): 无论如何赋值$l(\alpha) = True$ 比如$A\lor \lnot A$Widerspruchsvoll(矛盾): 无论如何赋值$l(\alpha) = False$ 比如 $A \land \lnot A$Falsifizierbar(可证伪): 至少存在一种赋值,让$l(\alpha) = False$ 比如 $A \lor B$ 当 $A,B = False$ 这里有一个结论,一个”矛盾”的$\alpha$,在其取not时$\lnot \alpha$是重言的 因为$\alpha$是”矛盾的”,所以根据定义,$l(\alpha) = False$, 所以无论定义域$V$中如何取值(alpha中变量如何取值),都不影响这个结论. 同样的当$l(\lnot \alpha)$时,无论定义域如何取值也不会影响$l(\lnot \alpha) = True$. 语义后承(语义蕴涵,Semantische Folgerung) 如果我们假设M为非空集合, 存在$\alpha_1, \dots,\alpha_n$使$M={\alpha_1, \dots,\alpha_n}$(也可写做$\alpha_1 \land \dots \land \alpha_n$)当存在$\beta$,当解释$l(M)=True$时同样$l(\beta) =True$, 那么可以认为此为语义后承. 写做$M\models \beta$ (说白了就是Alpha是真的时候beta也是真) 如果此时集合M里只有一个$\alpha$那么可以写作$\alpha\models\beta$, 若M是空集,存在$\models\beta$那么意味着$\beta$重言(Tautologie).这是一种特殊的语义后承. 一些推论: $\alpha \models \beta$: $\models \alpha \rightarrow \beta$, $\models \lnot \alpha \lor \beta$$\alpha \models \beta$: $\alpha \land \lnot \beta$ 是矛盾(Widerspruchsvoll)如果$\alpha$是矛盾的(永为False)那么$\alpha \models \beta$ 此处$\beta$可以为任意式子.如果$\alpha$是矛盾的(永为False)那么存在$\alpha \models (A \land \lnot A)$ 语义后承的一些重要规则这些规则在后面的归结(Resolution)中会有用 $\alpha, \; \alpha \to \beta \models \beta$(Modus Ponens(拉丁语,肯定前件))$\alpha \to \beta,\; \beta \to \sigma \models \alpha \to \sigma$(Kettenregel,链式法则(?))$(\alpha \lor \beta),(\lnot \beta \lor \sigma) \models (\alpha \lor \sigma)$ 逻辑等价(Logische Äquivalenz)如果两个式子$l(\alpha) = l(\beta)$成立即等价. 写做$\alpha\approx\beta$(国内资料也有很多使用=表示) 此时也存在$\alpha \models \beta,\beta\models\alpha$ 逻辑转换化规则(Umformungsregeln)此处偷了懒, 等价用了等于号. Negation(对合律): $\lnot \lnot a = a$Idempotenz(幂等律): $a \lor a = a,\;a \land a = a$Neutrales Element(互补律的一种用法): $(\alpha \land \lnot \alpha)\lor \beta = \beta,\;(\alpha \lor \lnot \alpha) \land \beta = \beta$Kotradiktion/Tautologie: $(\alpha \land \lnot \alpha) \land \beta= \alpha \land \lnot \alpha,\;(\alpha \lor \lnot \alpha)\lor \beta= \alpha \lor \lnot \alpha$ Kommutativität(交换律): $\alpha \lor \beta = \beta \lor \alpha,\;\alpha \land \beta = \beta \land \alpha$ Assoziativtät(结合律): $(\alpha\lor\beta) \lor \gamma = \alpha \lor (\beta \lor \gamma),\;(\alpha\land\beta)\lor\gamma = \alpha\land(\beta \land \gamma)$Distributivität(分配率): $(\alpha \land \beta)\lor \gamma = (\alpha \lor \gamma) \land (\beta \lor \gamma),\;(\alpha\lor\beta)\land \gamma = (\alpha\land \gamma) \lor (\beta \land \gamma)$De Morgan(德摩根定律): $\lnot(\alpha \land \beta) = \lnot \alpha \lor \lnot \beta,\;\lnot(\alpha\lor \beta) = \lnot \alpha \land \lnot \beta$Absorption(吸收率): $\alpha\land(\alpha \lor \beta) = \alpha,\; \alpha \lor(\alpha \land \beta) = \alpha$
紹介:frig--Feiron Iguista是谁?
fr1g.github.io · 2090-04-13
[个人纹章] 草 好中二的感觉 纹章制作器:Rockstar Socialclub Custom Emblem 没想到吧咕嘿嘿 本文编辑日期:2020/04/13_18:00 ↳嗯?为什么页面标记的日期是2090年?因为这样是最简单的置顶方法啊! 开始介绍自己了哦~ ⇩⇩⇩⇩⇩概述
CMFS经济指南
fr1g.github.io · 2030-04-13
新手引导:法棍的经济 beta.1 update@2020-04-13 吶!欢迎加入CMF群组服!这是来自法棍的经济指导—— 法棍只需要游戏中一个星期时间就能赚到接近1万CMFY!怎么做到的呢——扎实工作!
Visual Studio Code 1.139 (Insiders)
code.visualstudio.com · 2026-09-23
Learn what is new in Visual Studio Code 1.139 (Insiders) Read the full article
1200块的鸟抓绒穿一次就起球,5年没起的那位到底做对了什么:翻完6个避雷帖546条评论、"P200只标胸前"的吊牌罗生门和6天6篇榜文,今秋这件中间层是读标题,不是读Logo
post.smzdm.com · 2026-09-18
9月18日,迪卡侬试衣间帖子的评论区有人问:国庆川西徒步,MH100会不会薄?同一天的另一条帖子里,有人把衣柜摊开问:硬壳冲锋衣+羽绒内胆+抓绒内胆够不够?更早几天,五台山景区发了提示——台顶气温0~...
中秋还剩7天,小红书已经开始"摇人喝茶"了:我把4.2万家门店的218亿账本、2元到268元的8档价签、"割韭菜还是闷声赚"的三篇翻车帖摆齐,理清4种茶馆的收费规则、3个拦截动作和节前4类人的动作
post.smzdm.com · 2026-09-18
9月18日,一个杭州用户在小红书发帖:"找中秋或者国庆去二白茶馆的搭子。"同一天往前数一周,东莞、番禺、兰州、武汉、昆明、徐州、杭州、成都玉林、江门、郑州的"新茶馆开业/探店"笔记几乎天天在冒。双节前...
说「你脱敏了」和劝「你憋着」的,都在卖你新杯:对「没感觉」,先做三件免费的事
post.smzdm.com · 2026-09-18
「我要开启四月不起飞挑战」,是对子哈特官方B站「健康冷知识」视频评论区里的最高赞,拿到了1192个赞。 它下面跟着成排复读的「我现在要开启5月不飞挑战」,又是一条551赞。这条视频发布于4月24日,标...
100块买到的灯、拼多多挂190、盲盒开出三个同款:牧高笛14个"星"字辈灯的版本账我盘完了,国庆前补灯先对清手上那盏
post.smzdm.com · 2026-09-18
先说结论:牧高笛的灯不是"一条产品线",而是一个"星"字辈的散装货架——提灯、营灯、灯串、花园灯、联名应急灯全挤在一起,型号多到用户在2026年5月专门发帖求助:“星斗、星愿、星昼、星果……数都数不完...
海力士美国厂地基打了,15.7万个操作位还空着:想等"美国造"把价打下来的,先看完这本人力账
post.smzdm.com · 2026-09-18
这周刷海力士新闻的朋友,大概已经看累了"赴美"连续剧:9月18日,有报道称SK海力士旗下NAND子公司Solidigm正在考虑在美国东海岸建设首座NAND工厂,连产品组合、量产时间表都在谈了。 海力士...
翻车帖热评第一说"不丑,是你灯错了":对完5篇自曝帖6737条评论、近6000人挤进免费设计楼、老师傅交底"一套全房利润不到5000",我把全屋定制的"效果图"拆成1张物料与交付资格线、1张画图人真相表、1张廉价感真凶投票、5个交钱前钉死的落地资格项
post.smzdm.com · 2026-09-18
签单前的人大概率已经背熟了板材、封边、五金那些坑——近两年全屋定制的避坑内容,一轮一轮刷过来。但如果你去翻小红书上那些真实安装完的自曝帖,会发现评论区投出来的票,跟攻略帖教的完全不是一回事。一、翻车帖...
采暖季前"锅炉保养"推销刷屏:99元事故、200到500元的真实行情和三种频率口径我对完了,林内锅炉业主约人上门前先弄清这钱买的是什么
post.smzdm.com · 2026-09-18
这周开始,知乎和小红书的采暖圈同时进入了一个固定节目:锅炉保养。9月11日有人喊"保养黄金期已到,售后再不约就排不上队";9月13日成都一位暖通工程师发帖,接手了一单电商平台上买的99元冷凝壁挂炉保养...
点雪茄该烧哪把火:「煤油毁茄」和「一块钱够用」吵出178条评论,扒完三平台实测,只剩三条火候标准
post.smzdm.com · 2026-09-18
9月15号,B站有UP主发了条实拍:都彭格兰德系列"海底两万里",直喷双火,还能软硬火切换。往前翻五个月,小红书上一条"点雪茄用什么打火机"的求助帖,评论区已经刷了178条。一边是几千上万的品牌在往"...