也谈西方伪史论
最近看了一些西方伪史论的言论,觉得很是荒诞,也写一点看法。
所谓西方伪史论,大体上就是认为西方的历史(部分甚至大部分)是伪造的,更深一层的思想则是认为西方也不过尔尔,没什么了不起的。
关于西方伪史的言论,一开始是一些人质疑西方历史中可能有造假的部分,这还属于正常的探讨。接着,一些人继续推进,认为古希腊的哲人比如亚里士多德等都是假的,流传下来的著作都是后人的伪作,这时的种种论点就有点经不住推敲了。再接着,既然西方那些先贤不存在,那么那些思想是哪里来的呢?有人就说全部源自古代中国,是被西方偷走的,更有甚者认为《几何原本》也是中国古人写的,现代科学也是中国古人发明的,还例举了种种所谓的“证据”,将西方文明贬得一无是处,同时将中国古代文明无限拔高。这些言论荒诞不经,错漏百出,但大概听着让人高兴,于是附和者甚多。
那些西方伪史论的鼓吹者,不知是真的相信这套理论,还是只是为了利益或者吸引流量故意语出惊人。不过,显然他们并不是最早这么做的,西方伪史论并不是什么新奇的东西,一百多年前,严复先生在《救亡决论》中就曾写道:
近代以来,西方领先世界已有数百年,这期间尤其是最近一百多年里,世界各国有无数学者穷尽毕生精力,不断研究总结西方领先的秘密,各类学说、著作汗牛充栋。倘若真如西方伪史论者所说,西方的科技都是从中国偷的,如此大规模的偷窃不可能没有痕迹留下来,为何一百多年来从未有人给出让人信服的证据?西方世界并不是一个整体,内部也常常互相拆台,甚至多次打得头破血流,并非铁板一块,难道他们偏偏就能在“科技是从中国偷的”这个话题上统一守口如瓶,这么多年没能让外人找到丝毫证据?
晚清时期,中华持续数千年“天朝上国”的地位被打破,国家和民族跌入深渊,这种心理上的强烈落差让人很难接受,人们迫切需要一些理论能让他们在面对西方文明时能保持一些心理优势,于是,西方伪史论应运而生。
现在我们则又走到了另一个重要的历史节点,经过无数国人的艰苦奋斗,中华文明再度崛起,已到达重回世界巅峰的前夜,但由于此前上百年落后的阴影实在太大,很多人面对西方时仍然不够自信,他们需要一种理论,证明我们配得上复兴后的地位,于是西方伪史论便再次有了土壤。
中国古代有过辉煌,留下了无数光彩夺目的思想和成果,但我们也不可否认,在近代我们落后了,西方文明有其值得学习之处。
我们确实需要重建自信,但这种自信应该实事求是,而不是建立在臆想或者对对手的无脑贬低之上。我们祖祖辈辈都在这块土地上奋斗,我们强大过,也落魄过,现在,我们通过数代人勤奋踏实的努力再次找回了一度丢失的东西,并且我们知道,即使再遭遇挫折我们也有勇气以及韧性重新站起来,这才是我们自信的底气。
而那些夸张荒诞的西方伪史论,或许能兴起一时,博得若干眼球,却终将贻笑大方,被扫入历史的垃圾堆。
via oldj's blog
最近看了一些西方伪史论的言论,觉得很是荒诞,也写一点看法。
所谓西方伪史论,大体上就是认为西方的历史(部分甚至大部分)是伪造的,更深一层的思想则是认为西方也不过尔尔,没什么了不起的。
关于西方伪史的言论,一开始是一些人质疑西方历史中可能有造假的部分,这还属于正常的探讨。接着,一些人继续推进,认为古希腊的哲人比如亚里士多德等都是假的,流传下来的著作都是后人的伪作,这时的种种论点就有点经不住推敲了。再接着,既然西方那些先贤不存在,那么那些思想是哪里来的呢?有人就说全部源自古代中国,是被西方偷走的,更有甚者认为《几何原本》也是中国古人写的,现代科学也是中国古人发明的,还例举了种种所谓的“证据”,将西方文明贬得一无是处,同时将中国古代文明无限拔高。这些言论荒诞不经,错漏百出,但大概听着让人高兴,于是附和者甚多。
那些西方伪史论的鼓吹者,不知是真的相信这套理论,还是只是为了利益或者吸引流量故意语出惊人。不过,显然他们并不是最早这么做的,西方伪史论并不是什么新奇的东西,一百多年前,严复先生在《救亡决论》中就曾写道:
也就是说,早在晚清时期,“西方伪史论”、“西方科技是从中国偷的”这类言论就已经存在了,现在那些动机可疑的鼓吹者们也不过是拾人牙慧,却偏偏一个个以“独立思考”、“世人皆醉我独醒”的姿态在网络上大放厥词。
“晚近更有一种自居名流,于西洋格致诸学,仅得诸耳剽之余,于其实际,从未讨论。意欲扬己抑人,夸张博雅,则于古书中猎取近似陈言,谓西学皆中土所已有,羌无新奇。……
“……尤可笑者,近有人略识洋务,着论西学,其言曰:「欲制胜于人,必先知其成法,而后能变通克敌。彼萃数十国人才,穷数百年智力,掷亿万赀财,而后得之,勒为成书,公诸人而不私诸己,广其学而不秘其传者,何也?彼实窃我中国古圣之绪余,精益求精,以还中国,虽欲私焉,而天有所不许也。」有此种令人呕哕议论,足见中国民智之卑。”
近代以来,西方领先世界已有数百年,这期间尤其是最近一百多年里,世界各国有无数学者穷尽毕生精力,不断研究总结西方领先的秘密,各类学说、著作汗牛充栋。倘若真如西方伪史论者所说,西方的科技都是从中国偷的,如此大规模的偷窃不可能没有痕迹留下来,为何一百多年来从未有人给出让人信服的证据?西方世界并不是一个整体,内部也常常互相拆台,甚至多次打得头破血流,并非铁板一块,难道他们偏偏就能在“科技是从中国偷的”这个话题上统一守口如瓶,这么多年没能让外人找到丝毫证据?
晚清时期,中华持续数千年“天朝上国”的地位被打破,国家和民族跌入深渊,这种心理上的强烈落差让人很难接受,人们迫切需要一些理论能让他们在面对西方文明时能保持一些心理优势,于是,西方伪史论应运而生。
现在我们则又走到了另一个重要的历史节点,经过无数国人的艰苦奋斗,中华文明再度崛起,已到达重回世界巅峰的前夜,但由于此前上百年落后的阴影实在太大,很多人面对西方时仍然不够自信,他们需要一种理论,证明我们配得上复兴后的地位,于是西方伪史论便再次有了土壤。
中国古代有过辉煌,留下了无数光彩夺目的思想和成果,但我们也不可否认,在近代我们落后了,西方文明有其值得学习之处。
我们确实需要重建自信,但这种自信应该实事求是,而不是建立在臆想或者对对手的无脑贬低之上。我们祖祖辈辈都在这块土地上奋斗,我们强大过,也落魄过,现在,我们通过数代人勤奋踏实的努力再次找回了一度丢失的东西,并且我们知道,即使再遭遇挫折我们也有勇气以及韧性重新站起来,这才是我们自信的底气。
而那些夸张荒诞的西方伪史论,或许能兴起一时,博得若干眼球,却终将贻笑大方,被扫入历史的垃圾堆。
via oldj's blog
怀念爷爷
爷爷生于 1924 年,今年是爷爷诞辰 100 周年。
1
爷爷受过良好的教育,解放前当过老师,在山村小学教书育人,也曾一腔热血,保护过被敌人追捕的游击队员。解放后,爷爷先在县法院工作,后转向水利、航运方向,参与主导了很多复杂的工程,并逐渐成为这个领域的知名专家。
1970 年代,云南省开发澜沧江,爷爷以专家身份被聘为技术指导。那个年代的工作条件非常艰苦,在一次位于西双版纳的工程作业中发生了意外,奋战在一线的爷爷不幸负伤致残,从此不得不离开热爱的事业,提前退休回到家乡。
2
从我有记忆起,爷爷就是一个整天坐在客厅藤椅上的老头,很瘦,很慈祥,从未见他发过脾气,对谁都很和蔼。
爷爷的伤在腿上,这个伤让他失去了自由行走的能力,因此他只能天天宅在家,极少出门。
爷爷有一大箱子书,我曾好奇地翻过,但那时我还不识字,只依稀记得书中有很多复杂的图表。
有时会有一些同样头发花白的人来看爷爷,爷爷会很高兴地与他们聊很久。
没有客人时,爷爷会看书看报,还会教我唱歌,但更多的时候他就那么静静地坐在那儿,不知是在回忆还是思考。
3
也许是长年的坐卧损害了健康,爷爷去世得很早。
爷爷弥留之际被大伯接了过去。有一天母亲带我去大伯家看爷爷,我进了屋,看见爷爷正躺在病床上,见我进来,就睁大了眼睛看向我。
年幼的我还不理解死亡的含义,只觉得爷爷睁大眼睛的样子很有趣,还以为他马上就要像以前一样逗我玩了,于是嬉笑着跑了出去。
却没有意识到,那就是我和爷爷的最后一面。
4
爷爷虽然脾气温和,却是家里的定海神针。他去世一年之后,我们举家搬迁去了外省,从此故乡对我而言成为了遥远的回忆。
5
多年后的一天,回到老家大伯家小聚,期间大伯娘指着我感慨地说:“其实他最像爹。”
回想起爷爷的照片,我这才发现,原来不知不觉间,我竟真的有了几分爷爷的样子。
via oldj's blog
爷爷生于 1924 年,今年是爷爷诞辰 100 周年。
1
爷爷受过良好的教育,解放前当过老师,在山村小学教书育人,也曾一腔热血,保护过被敌人追捕的游击队员。解放后,爷爷先在县法院工作,后转向水利、航运方向,参与主导了很多复杂的工程,并逐渐成为这个领域的知名专家。
1970 年代,云南省开发澜沧江,爷爷以专家身份被聘为技术指导。那个年代的工作条件非常艰苦,在一次位于西双版纳的工程作业中发生了意外,奋战在一线的爷爷不幸负伤致残,从此不得不离开热爱的事业,提前退休回到家乡。
2
从我有记忆起,爷爷就是一个整天坐在客厅藤椅上的老头,很瘦,很慈祥,从未见他发过脾气,对谁都很和蔼。
爷爷的伤在腿上,这个伤让他失去了自由行走的能力,因此他只能天天宅在家,极少出门。
爷爷有一大箱子书,我曾好奇地翻过,但那时我还不识字,只依稀记得书中有很多复杂的图表。
有时会有一些同样头发花白的人来看爷爷,爷爷会很高兴地与他们聊很久。
没有客人时,爷爷会看书看报,还会教我唱歌,但更多的时候他就那么静静地坐在那儿,不知是在回忆还是思考。
3
也许是长年的坐卧损害了健康,爷爷去世得很早。
爷爷弥留之际被大伯接了过去。有一天母亲带我去大伯家看爷爷,我进了屋,看见爷爷正躺在病床上,见我进来,就睁大了眼睛看向我。
年幼的我还不理解死亡的含义,只觉得爷爷睁大眼睛的样子很有趣,还以为他马上就要像以前一样逗我玩了,于是嬉笑着跑了出去。
却没有意识到,那就是我和爷爷的最后一面。
4
爷爷虽然脾气温和,却是家里的定海神针。他去世一年之后,我们举家搬迁去了外省,从此故乡对我而言成为了遥远的回忆。
5
多年后的一天,回到老家大伯家小聚,期间大伯娘指着我感慨地说:“其实他最像爹。”
回想起爷爷的照片,我这才发现,原来不知不觉间,我竟真的有了几分爷爷的样子。
via oldj's blog
不要做“微操”型管理者
工作多年,被人管过也管过人,有一个不算新颖但深有感触的心得,即管理者应该要尽量避免“微操”。
“微操”一词源自游戏,指玩家对游戏中的单位进行非常细微的操作,比如在即时战略游戏中,非常细致地控制每个士兵的行为。
对一些游戏来说,“微操”是褒义词,表明玩家的水平非常高,能发挥出各个单位最大的战斗力,这很好理解,因为游戏中的单位通常智能程度不高,同时总是能不折不扣地执行玩家的指令。但在现实世界中,“微操”则通常不是什么好事。
我曾有一段比较痛苦的工作经历,当时的上司就非常喜欢“微操”,细微到产品的每个设计细节都要管,比如每个按钮的位置和文案、每个输入框的样式以及每个操作的流程他都要发表意见。
他的能力确实很强,在业内小有名气,也有过几个成功的项目,因而十分自信强势,加上有着上司的身份,在团队内威信极高,对产品的各个细节都有着最终裁决权。
刚加入团队时,我非常有干劲,尽心尽力地投入产品的设计和开发,但一段时间后,我发现我提交的方案常常会被他改动很多地方,而有时一个看似很小的改动却可能意味着之前的大量工作需要推倒重来。
一开始我陷入了自我怀疑中,是不是我的能力真的太差了?不然为什么有这么多细节不符合上司的要求?我尝试努力总结上司的各个修改逻辑,但大部分修改我实在看不出有什么规律,对我来说,哪些地方会被打回似乎是完全随机的。
反复的细节修改以及确认,让我的工作量增加了很多,精神上也疲惫不堪。
终于有一天,在再一次无奈的修改之后,我决定摆烂了。由于无法预测哪些方案可能会被打回修改,我便尽可能地不做决定或者少做决定,每一个我觉得有被打回风险的设计都尽量先去问一问他。
摆烂之后,我果然轻松了不少,很少再遇到方案被打回或者需要大量修改的情况了,因为实际上我只是在做一些不太需要动脑子的执行工作,需要决策的部分都扔回给了上司。
但这显然不是正常的或健康的状态,一段时间后,上司发现自己越来越累,于是变得愤怒,开会时常常斥责我们没有达到他的期望。我也很愧疚,尝试再次担起责任,但当我再次深入方案设计然后继续遭遇大量细节被打回后,我彻底摆烂了,并且在不久之后离开了那个团队。
后来我回顾那段工作经历,逐渐意识到了其中令彼此痛苦的根源。那些被打回修改的细节设计,真的都有必要,或者都有对错之分吗?
不可否认,上司提出的一些意见确实更好,遇到这样的修改要求时,相信任何一位合格的员工都会接受,并且心悦诚服。但在那段工作经历中,从数量上来说这样的修改只占少数,更多的则只是一些纯粹的偏好性质的改动,比如一些文案的表述方式,几个元素是左对齐还是居中对齐,一些操作流程的顺序安排等等。在上司介入的阶段,我们的方案已经经过了反复的思考和讨论,通常来说已经没有明显的问题,但上司总是能提出很多修改意见,而在我们看来这些意见和原方案相比并没有明显的优劣或者绝对的对错,无论哪种选择都有其道理,但说到底,很多方案的差异其实只是口味或习惯的不同罢了,就像有人喜欢川菜,有人喜欢淮扬菜,因此在烹饪时流程和用料不一样,仅此而已,但只要在整体上保持风格一致,做出来的就不失为一道好菜。
每个人都有自己的偏好,除非他人的思维习惯和你完全相同,否则他的方案和你预想的方案多多少少总是会有差异。员工如果是新手,管理者手把手地指导自然没有问题,但这显然不应该成为常态,当员工成长起来,有足够的经验之后,作为管理者,我想只要大方向没有问题,细节上应该允许下属自由发挥。这也是所谓的“抓大放小”、“充分放权”。
况且很多时候,作为一线员工,在产品方案上他们了解的信息可能比管理者更多,很多方案可能已经是综合考虑体验和成本之后的结果,一个看似不起眼的“小”修改意见,可能会需要几个小时甚至几个人日的工作,而连着几个“小”意见,则可能意味着成本的飙升。
喜欢“微操”、坚持按自己的喜好指挥每一个细节的管理者,从本质上来讲,要么是对员工不信任,认为员工没有能力做好工作,要么则是沉迷于操纵一切的掌控感,不愿意放权。无论哪种情况,对团队来说都是有害的。
如果管理者真的认为某个设计或者细节很重要,必须严格执行,那么最好的方式是在一开始就清晰地向员工说明,而不是等到方案都已经基本完成时才不断提出各种“重要”修改意见。
如果员工自己的创意总是被管理者修改甚至否定,那么逐渐地,员工就会放弃主动,——既然自己没有决定的权力,那么就干脆做个不动脑筋的执行者吧。最终,员工不开心,没有足够的参与感和成就感,成长有限;管理者也不开心,觉得招了一帮废物,什么都要自己来决定,让自己都没有时间去做更重要的工作了,却没有意识到造成这一切的根源可能就是自己。
在团队中,管理者天然有着更大的权力,合格的管理者应该学会控制自己的欲望,合理地使用这个权力。很多时候,并不是管得越多越细就越好,作为管理者,在准备提出意见时应该先想一想,这是必要的吗?
via oldj's blog
工作多年,被人管过也管过人,有一个不算新颖但深有感触的心得,即管理者应该要尽量避免“微操”。
“微操”一词源自游戏,指玩家对游戏中的单位进行非常细微的操作,比如在即时战略游戏中,非常细致地控制每个士兵的行为。
对一些游戏来说,“微操”是褒义词,表明玩家的水平非常高,能发挥出各个单位最大的战斗力,这很好理解,因为游戏中的单位通常智能程度不高,同时总是能不折不扣地执行玩家的指令。但在现实世界中,“微操”则通常不是什么好事。
我曾有一段比较痛苦的工作经历,当时的上司就非常喜欢“微操”,细微到产品的每个设计细节都要管,比如每个按钮的位置和文案、每个输入框的样式以及每个操作的流程他都要发表意见。
他的能力确实很强,在业内小有名气,也有过几个成功的项目,因而十分自信强势,加上有着上司的身份,在团队内威信极高,对产品的各个细节都有着最终裁决权。
刚加入团队时,我非常有干劲,尽心尽力地投入产品的设计和开发,但一段时间后,我发现我提交的方案常常会被他改动很多地方,而有时一个看似很小的改动却可能意味着之前的大量工作需要推倒重来。
一开始我陷入了自我怀疑中,是不是我的能力真的太差了?不然为什么有这么多细节不符合上司的要求?我尝试努力总结上司的各个修改逻辑,但大部分修改我实在看不出有什么规律,对我来说,哪些地方会被打回似乎是完全随机的。
反复的细节修改以及确认,让我的工作量增加了很多,精神上也疲惫不堪。
终于有一天,在再一次无奈的修改之后,我决定摆烂了。由于无法预测哪些方案可能会被打回修改,我便尽可能地不做决定或者少做决定,每一个我觉得有被打回风险的设计都尽量先去问一问他。
摆烂之后,我果然轻松了不少,很少再遇到方案被打回或者需要大量修改的情况了,因为实际上我只是在做一些不太需要动脑子的执行工作,需要决策的部分都扔回给了上司。
但这显然不是正常的或健康的状态,一段时间后,上司发现自己越来越累,于是变得愤怒,开会时常常斥责我们没有达到他的期望。我也很愧疚,尝试再次担起责任,但当我再次深入方案设计然后继续遭遇大量细节被打回后,我彻底摆烂了,并且在不久之后离开了那个团队。
后来我回顾那段工作经历,逐渐意识到了其中令彼此痛苦的根源。那些被打回修改的细节设计,真的都有必要,或者都有对错之分吗?
不可否认,上司提出的一些意见确实更好,遇到这样的修改要求时,相信任何一位合格的员工都会接受,并且心悦诚服。但在那段工作经历中,从数量上来说这样的修改只占少数,更多的则只是一些纯粹的偏好性质的改动,比如一些文案的表述方式,几个元素是左对齐还是居中对齐,一些操作流程的顺序安排等等。在上司介入的阶段,我们的方案已经经过了反复的思考和讨论,通常来说已经没有明显的问题,但上司总是能提出很多修改意见,而在我们看来这些意见和原方案相比并没有明显的优劣或者绝对的对错,无论哪种选择都有其道理,但说到底,很多方案的差异其实只是口味或习惯的不同罢了,就像有人喜欢川菜,有人喜欢淮扬菜,因此在烹饪时流程和用料不一样,仅此而已,但只要在整体上保持风格一致,做出来的就不失为一道好菜。
每个人都有自己的偏好,除非他人的思维习惯和你完全相同,否则他的方案和你预想的方案多多少少总是会有差异。员工如果是新手,管理者手把手地指导自然没有问题,但这显然不应该成为常态,当员工成长起来,有足够的经验之后,作为管理者,我想只要大方向没有问题,细节上应该允许下属自由发挥。这也是所谓的“抓大放小”、“充分放权”。
况且很多时候,作为一线员工,在产品方案上他们了解的信息可能比管理者更多,很多方案可能已经是综合考虑体验和成本之后的结果,一个看似不起眼的“小”修改意见,可能会需要几个小时甚至几个人日的工作,而连着几个“小”意见,则可能意味着成本的飙升。
喜欢“微操”、坚持按自己的喜好指挥每一个细节的管理者,从本质上来讲,要么是对员工不信任,认为员工没有能力做好工作,要么则是沉迷于操纵一切的掌控感,不愿意放权。无论哪种情况,对团队来说都是有害的。
如果管理者真的认为某个设计或者细节很重要,必须严格执行,那么最好的方式是在一开始就清晰地向员工说明,而不是等到方案都已经基本完成时才不断提出各种“重要”修改意见。
如果员工自己的创意总是被管理者修改甚至否定,那么逐渐地,员工就会放弃主动,——既然自己没有决定的权力,那么就干脆做个不动脑筋的执行者吧。最终,员工不开心,没有足够的参与感和成就感,成长有限;管理者也不开心,觉得招了一帮废物,什么都要自己来决定,让自己都没有时间去做更重要的工作了,却没有意识到造成这一切的根源可能就是自己。
在团队中,管理者天然有着更大的权力,合格的管理者应该学会控制自己的欲望,合理地使用这个权力。很多时候,并不是管得越多越细就越好,作为管理者,在准备提出意见时应该先想一想,这是必要的吗?
via oldj's blog
从打牌想到的
最近几个月打了很多次牌,有时是线下聚会时和朋友玩,有时则是在手机上玩。玩得久了,逐渐发现扑克牌游戏和现实生活中的规则有一些类似之处。以下是一些感想。
手中的牌
打牌时,手中拿到什么牌非常重要,这一点很容易理解,无论你是高手还是菜鸟,如果起手就拿到一手好牌,那么只要不乱打,并且运气不是差到极点,你基本上都能赢。同样的,就算你是绝顶高手,如果拿到一把烂牌,要赢恐怕也非常难。
当然,拿到极品好牌和极品烂牌的概率都不大,很多时候,我们以及我们的对手拿到的都是中等牌,这种时候,如何组合手中的牌打出最好的效果,就看各自的技术了。
我们的人生也类似,总有一些人一开始就拿到一手好牌,比如家境良好,父母见识不凡,自身也健康聪明,因而只要自己不走错路,人生总体上会非常顺利。还有一些不那么幸运的人,出生在落后的地方贫穷的家庭,几乎没有什么可利用的资源或者助力,要获得成功可就不容易了。
拿到好牌时,不要得意忘形,因为你的成功很大程度源于运气。拿到烂牌时,也不要破罐子破摔,认真思考,尽最大努力打好手中的牌,因为只有这样你才能多一点获胜的机会。
合适的才是最好的
摸牌的时候,一般来说摸到大牌比摸到小牌更好一些,不过稍有经验就会发现,和单独的大牌相比,那些能让现有的牌组合起来的牌可能更好。比如,有一些时候,摸到一张最小的 2 可能会让你的几张散牌组成同花顺,这时对你而言 2 就比大王更好。
生活和工作中也是类似,有一些团队,单独来看每位成员可能都相对普通,但由于配合出色,于是团队整体的战斗力非常强悍。
团队招人的时候,也不是招越牛的人越好,而是要看新来的人能否让团队的整体能力得到提升。有时候,也许加入一位履历一般但却能搞定一些其他人不擅长处理的小事的成员,会让团队整体焕发新生。同样的,一位看似不重要的成员离开,也有可能打断团队内部的某种连接,让团队效率大受影响。
寻找人生伴侣也是如此,那些光彩夺目的潜在选项当然也不错,但一位能与你互补,让你成为更好的自己的伴侣,也许是更好的选择。
本钱
拿到什么牌很大程度上能决定你单局的胜负,有多少本钱则决定你能在牌桌上待多久。
以腾讯欢乐斗地主的掼蛋游戏为例,新手场单场输赢封顶是 5 万欢乐豆。即如果你手中的欢乐豆不足 5 万,那么你赢的时候手中的欢乐豆翻倍,输的时候会赔得精光。当然,实际上输赢的数额还取决于对手的豆子够不够,不过为了简化讨论,此处我们假设对手总是有足够的豆子。
这个规则很容易理解,而且看起来似乎也很公平。但在玩了很多场之后,我发现这其实是一个对水平普通且本钱较少的玩家非常不友好的规则。
假设你是一位普通水平的玩家,即你的水平处在中游,每局有 50% 的概率赢,也有 50% 的概率输,并且初期你只有 1000 欢乐豆,你会面临什么情况呢?
当你的豆子数量在 5 万以下时,无论你之前赢了多少次,只要输一次,你的豆子就被清空了。也就是说,想要让自己的豆子超过 5 万,你需要连赢 \(6\) 次,才能让自己的豆子从 1000 增长到超过 5 万的数量(\(1000 \times 2^6 = 64000\))。但是,由于你的赢率只有 50%,因此连赢 6 次的概率也只有 \(\frac{1}{2^6}\),即 \(\frac{1}{64}\) 或者 1.56% 。
但即使你有了 6.4 万豆子,你仍然不安全,只要连输两次(发生的概率为 \(\frac{1}{4}\) 或 25%,这并不是一个小概率),你就又会回到一无所有的状态。要让自己更安全一些,你可能需要至少 20 万豆子,这样只有连输四次(发生的概率为 \(\frac{1}{16}\) 或 6.25%),你才会输光所有豆子。而要从 1000 豆子变成 20 万豆子,你需要先连赢 6 次,然后在接下来保住本金的情况下再净赢至少 3 次。
粗略计算一下就可以知道,作为一名赢率只有 50% 的中等水平玩家,取得这个成就的概率不足 1%。
另一方面,如果你仍然只是一名中等水平的玩家,但你已经有 20 万甚至更多的豆子了,会怎么样呢?
由于你的输赢概率各一半,并且每次输赢都只是增减 5 万欢乐豆而不是一下子输光所有,因此你的账户余额从概率上来讲将会一直持平。期间可能会因为随机因素出现一些波动,甚至有非常小的概率你在某次大波动中余额被击穿从而破产,但更大的概率是你的资产经过波动之后又回归到初始值附近。
换一句话来说,对一名中等水平玩家来说,从底层逆袭的成功概率极小,因为在初期他需要连赢很多次才行,同时只要输一次就会完全失败。但同样水平的玩家,如果一开始就拥有大量本钱,他却有很大的概率能守住这些财富,因为他不怕输,即使输了也仍然有机会赢回来。也即本钱越少,越不容易出头,财富越多,则越容易守住财富。
这大概也是阶级固化的一种解释吧。
via oldj's blog
最近几个月打了很多次牌,有时是线下聚会时和朋友玩,有时则是在手机上玩。玩得久了,逐渐发现扑克牌游戏和现实生活中的规则有一些类似之处。以下是一些感想。
手中的牌
打牌时,手中拿到什么牌非常重要,这一点很容易理解,无论你是高手还是菜鸟,如果起手就拿到一手好牌,那么只要不乱打,并且运气不是差到极点,你基本上都能赢。同样的,就算你是绝顶高手,如果拿到一把烂牌,要赢恐怕也非常难。
当然,拿到极品好牌和极品烂牌的概率都不大,很多时候,我们以及我们的对手拿到的都是中等牌,这种时候,如何组合手中的牌打出最好的效果,就看各自的技术了。
我们的人生也类似,总有一些人一开始就拿到一手好牌,比如家境良好,父母见识不凡,自身也健康聪明,因而只要自己不走错路,人生总体上会非常顺利。还有一些不那么幸运的人,出生在落后的地方贫穷的家庭,几乎没有什么可利用的资源或者助力,要获得成功可就不容易了。
拿到好牌时,不要得意忘形,因为你的成功很大程度源于运气。拿到烂牌时,也不要破罐子破摔,认真思考,尽最大努力打好手中的牌,因为只有这样你才能多一点获胜的机会。
合适的才是最好的
摸牌的时候,一般来说摸到大牌比摸到小牌更好一些,不过稍有经验就会发现,和单独的大牌相比,那些能让现有的牌组合起来的牌可能更好。比如,有一些时候,摸到一张最小的 2 可能会让你的几张散牌组成同花顺,这时对你而言 2 就比大王更好。
生活和工作中也是类似,有一些团队,单独来看每位成员可能都相对普通,但由于配合出色,于是团队整体的战斗力非常强悍。
团队招人的时候,也不是招越牛的人越好,而是要看新来的人能否让团队的整体能力得到提升。有时候,也许加入一位履历一般但却能搞定一些其他人不擅长处理的小事的成员,会让团队整体焕发新生。同样的,一位看似不重要的成员离开,也有可能打断团队内部的某种连接,让团队效率大受影响。
寻找人生伴侣也是如此,那些光彩夺目的潜在选项当然也不错,但一位能与你互补,让你成为更好的自己的伴侣,也许是更好的选择。
本钱
拿到什么牌很大程度上能决定你单局的胜负,有多少本钱则决定你能在牌桌上待多久。
以腾讯欢乐斗地主的掼蛋游戏为例,新手场单场输赢封顶是 5 万欢乐豆。即如果你手中的欢乐豆不足 5 万,那么你赢的时候手中的欢乐豆翻倍,输的时候会赔得精光。当然,实际上输赢的数额还取决于对手的豆子够不够,不过为了简化讨论,此处我们假设对手总是有足够的豆子。
这个规则很容易理解,而且看起来似乎也很公平。但在玩了很多场之后,我发现这其实是一个对水平普通且本钱较少的玩家非常不友好的规则。
假设你是一位普通水平的玩家,即你的水平处在中游,每局有 50% 的概率赢,也有 50% 的概率输,并且初期你只有 1000 欢乐豆,你会面临什么情况呢?
当你的豆子数量在 5 万以下时,无论你之前赢了多少次,只要输一次,你的豆子就被清空了。也就是说,想要让自己的豆子超过 5 万,你需要连赢 \(6\) 次,才能让自己的豆子从 1000 增长到超过 5 万的数量(\(1000 \times 2^6 = 64000\))。但是,由于你的赢率只有 50%,因此连赢 6 次的概率也只有 \(\frac{1}{2^6}\),即 \(\frac{1}{64}\) 或者 1.56% 。
但即使你有了 6.4 万豆子,你仍然不安全,只要连输两次(发生的概率为 \(\frac{1}{4}\) 或 25%,这并不是一个小概率),你就又会回到一无所有的状态。要让自己更安全一些,你可能需要至少 20 万豆子,这样只有连输四次(发生的概率为 \(\frac{1}{16}\) 或 6.25%),你才会输光所有豆子。而要从 1000 豆子变成 20 万豆子,你需要先连赢 6 次,然后在接下来保住本金的情况下再净赢至少 3 次。
粗略计算一下就可以知道,作为一名赢率只有 50% 的中等水平玩家,取得这个成就的概率不足 1%。
另一方面,如果你仍然只是一名中等水平的玩家,但你已经有 20 万甚至更多的豆子了,会怎么样呢?
由于你的输赢概率各一半,并且每次输赢都只是增减 5 万欢乐豆而不是一下子输光所有,因此你的账户余额从概率上来讲将会一直持平。期间可能会因为随机因素出现一些波动,甚至有非常小的概率你在某次大波动中余额被击穿从而破产,但更大的概率是你的资产经过波动之后又回归到初始值附近。
换一句话来说,对一名中等水平玩家来说,从底层逆袭的成功概率极小,因为在初期他需要连赢很多次才行,同时只要输一次就会完全失败。但同样水平的玩家,如果一开始就拥有大量本钱,他却有很大的概率能守住这些财富,因为他不怕输,即使输了也仍然有机会赢回来。也即本钱越少,越不容易出头,财富越多,则越容易守住财富。
这大概也是阶级固化的一种解释吧。
via oldj's blog
使用 acme.sh 申请 SSL 证书
之前很长一段时间,这个博客一直在用云服务商提供的免费 SSL 证书,那个证书有一年有效期,也即一年只需要申请部署一次,因此全手动操作也不算麻烦,但现在免费 SSL 证书的有效期统一缩短为 3 个月了,意味着每 3 个月就要操作一次,这就让手动申请和部署变得麻烦起来了。
最近,我尝试了一下使用 acme.sh 申请 SSL 证书的方法,确实方便了不少,在这里记录一下。
安装 acme.sh
acme.sh 是一个实现 ACME 协议的脚本,主要用途是申请或更新免费 SSL 证书。运行以下命令即可安装:
更多安装方式可见官方文档:https://github.com/acmesh-official/acme.sh。
acme.sh 会被安装在
手动申请证书
安装好 acme.sh 后,可以用以下命令申请证书:
记得把其中的
上面的代码中,我申请了泛域名证书,所以同时添加了
另外,
还需要注意的是最后一个参数
如果一切顺利,acme.sh 命令会输出两段 TXT 信息,需要你手动添加到对应域名的 DNS 解析中,以验证你确实对这个域名拥有权限。在证书申请完成之后,可以删除对应的 TXT 记录。
登录域名服务商(比如阿里云)后台,在域名解析中添加上对应的 TXT 记录,然后再运行以下命令,即可生成证书:
证书会被保存在
●
●
●
●
其中在网站场景主要使用
自动申请证书
可以看到,上面手动申请的步骤,主要的手动操作就是要为域名添加 TXT 记录以验证域名权限,acme.sh 支持让这个步骤自动化,即自动添加 TXT 记录,并在验证完成之后自动删除对应的记录。
以阿里云为例(如果你的域名是在阿里云注册并解析的),首先需要去阿里云控制台获取一个 AccessKey,建议专门设置一个 RAM 用户,只开通 DNS 权限。
得到 AccessKey 之后,在命令行中执行以下命令:
随后再执行以下命令,即可自动申请或更新证书了:
注意
一切顺利的话,证书申请会自动完成,并被保存在
其他各大域名服务商的自动申请方式类似,具体可参见官方文档。
一些注意点
如果你使用了自动申请,AccessKey 会被明文保存在
另外,使用自动申请后,acme.sh 会添加一条定时任务,每天自动检查证书是否需要更新。可运行以下命令查看当前系统的定时任务列表:
现在 acme.sh 默认使用的证书颁发机构是 ZeroSSL,还有一些其他可选机构,比如 Let's Encrypt。可以用
我没有修改 CA,在使用默认的 ZeroSSL 的证书,目前来看暂时没有遇到什么问题。
除了自动申请证书外,大部分网络服务商也支持自动上传 SSL 证书,不过这部分我还没有研究,后续如果觉得值得记录,会另外写文分享。
via oldj's blog
之前很长一段时间,这个博客一直在用云服务商提供的免费 SSL 证书,那个证书有一年有效期,也即一年只需要申请部署一次,因此全手动操作也不算麻烦,但现在免费 SSL 证书的有效期统一缩短为 3 个月了,意味着每 3 个月就要操作一次,这就让手动申请和部署变得麻烦起来了。
最近,我尝试了一下使用 acme.sh 申请 SSL 证书的方法,确实方便了不少,在这里记录一下。
安装 acme.sh
acme.sh 是一个实现 ACME 协议的脚本,主要用途是申请或更新免费 SSL 证书。运行以下命令即可安装:
curl https://get.acme.sh | sh -s email=my@example.com
更多安装方式可见官方文档:https://github.com/acmesh-official/acme.sh。
acme.sh 会被安装在
~/.acme.sh 目录下。手动申请证书
安装好 acme.sh 后,可以用以下命令申请证书:
acme.sh --issue --dns -d mydomain.com -d "*.mydomain.com" --yes-I-know-dns-manual-mode-enough-go-ahead-please
记得把其中的
mydomain.com 换成你自己的域名。上面的代码中,我申请了泛域名证书,所以同时添加了
mydomain.com 和 *.mydomain.com 域名。需要注意的是,*.mydomain.com 不包含 mydomain.com,如果你希望证书除了包含 www.mydomain.com 这样的二级域名,也包含 mydomain.com 的话,记得把 mydomain.com 也加上。另外,
*.mydomain.com 也不包含更深的层级,比如它包含 home.mydomain.com,但不包含 app.home.mydomain.com 。如果你需要更深层级的泛域名,需要把对应的域名也填上。还需要注意的是最后一个参数
--yes-I-know-dns-manual-mode-enough-go-ahead-please 。acme.sh 更希望用户使用自动申请证书的方式(见下一小节),如果你确实需要手动申请,需加上这个参数,否则命令不会正常执行。如果一切顺利,acme.sh 命令会输出两段 TXT 信息,需要你手动添加到对应域名的 DNS 解析中,以验证你确实对这个域名拥有权限。在证书申请完成之后,可以删除对应的 TXT 记录。
登录域名服务商(比如阿里云)后台,在域名解析中添加上对应的 TXT 记录,然后再运行以下命令,即可生成证书:
acme.sh --renew -d mydomain.com -d "*.mydomain.com" --yes-I-know-dns-manual-mode-enough-go-ahead-please
证书会被保存在
~/.acme.sh/ 目录下,包含以下四个文件:●
mydomain.com.cer 证书●
mydomain.com.key 密钥●
ca.cer●
fullchain.cer 全链路证书其中在网站场景主要使用
fullchain.cer 文件和 mydomain.com.key 文件。自动申请证书
可以看到,上面手动申请的步骤,主要的手动操作就是要为域名添加 TXT 记录以验证域名权限,acme.sh 支持让这个步骤自动化,即自动添加 TXT 记录,并在验证完成之后自动删除对应的记录。
以阿里云为例(如果你的域名是在阿里云注册并解析的),首先需要去阿里云控制台获取一个 AccessKey,建议专门设置一个 RAM 用户,只开通 DNS 权限。
得到 AccessKey 之后,在命令行中执行以下命令:
export Ali_Key="key"
export Ali_Secret="secret"
随后再执行以下命令,即可自动申请或更新证书了:
acme.sh --issue --dns dns_ali -d mydomain.com -d "*.mydomain.com"
注意
--dns 参数后面的值为 dns_ali。一切顺利的话,证书申请会自动完成,并被保存在
~/.acme.sh/ 目录下。其他各大域名服务商的自动申请方式类似,具体可参见官方文档。
一些注意点
如果你使用了自动申请,AccessKey 会被明文保存在
~/.acme.sh/account.conf 文件内,如果介意,可在申请完之后修改这个文件并删除对应的 AccessKey。另外,使用自动申请后,acme.sh 会添加一条定时任务,每天自动检查证书是否需要更新。可运行以下命令查看当前系统的定时任务列表:
crontab -l
现在 acme.sh 默认使用的证书颁发机构是 ZeroSSL,还有一些其他可选机构,比如 Let's Encrypt。可以用
--set-default-ca 修改默认证书颁发机构,比如:acme.sh --set-default-ca --server letsencrypt
我没有修改 CA,在使用默认的 ZeroSSL 的证书,目前来看暂时没有遇到什么问题。
除了自动申请证书外,大部分网络服务商也支持自动上传 SSL 证书,不过这部分我还没有研究,后续如果觉得值得记录,会另外写文分享。
via oldj's blog
最近在产品中用到了 Electron 中的 Kiosk 模式,记录一下要点。
什么是 Kiosk 模式?
Kiosk 模式是一种专门为限制用户操作而设计的应用运行模式,通常用于构建锁定的全屏应用程序,禁止用户访问系统其他功能或退出应用。在这种模式下,应用程序占据整个屏幕,并且用户无法通过常见的方式(如键盘快捷键、窗口控制按钮等)退出或切换到其他应用。
Kiosk 模式的主要用途是为用户提供一个专注且受限的操作环境,避免对系统的其他部分产生干扰。
哪些场景下需要使用 Kiosk 模式?
Kiosk 模式被广泛应用于以下场景:
● 公共信息亭:自助服务终端,如银行 ATM、自助点餐机、自助售票机。
● 展览展示:在博物馆、展览会、零售店中,用于展示信息或广告内容的屏幕。
● 教育场景:限制学生只能使用特定的教学应用,避免访问其他不必要的内容。
● 会议或演讲:锁定演示内容,避免误操作或退出。
● 数字标牌:作为广告屏幕或公告牌,循环播放内容。
当然,我在开发的是日常效率软件,并不属于以上场景。我用到 Kiosk 模式的场景主要如下。
图几截图软件
我开发并维护着一个截图软件图几,它有三种截图模式:全屏截图、窗口截图、区域截图。
其中区域截图的交互方式是:用户点击截图按钮(或按下截图快捷键),先生成当前屏幕的截图,随后显示一个全屏无边框窗口,在窗口中显示将刚刚生成的屏幕截图,同时允许用户在窗口上进行框选等操作。
这个无边框窗口就需要使用 Kiosk 模式,以免用户无意中切换窗口。当然,等用户完成或取消截图时,需要再退出或关闭对应的 Kiosk 窗口。
WonderPen 写作软件
WonderPen 写作软件最近添加了小黑屋模式,进入这种模式后,软件将全屏显示,屏蔽一切干扰,在完成预设的写作目标之前,将无法退出或切换到其他软件。
这个禁止退出的小黑屋,自然也使用了 Kiosk 模式。
Electron 中的 Kiosk 模式
在 Electron 中,将一个窗口设为 Kiosk 模式非常简单,在创建窗口时设置
有时,我们的窗口在创建时需要以普通模式显示,然后再在一定条件下切换为 Kiosk 模式,只需用类似下面的代码切换即可:
其中
你还可以使用
在实践过程中,我发现很多时候只设置 Kiosk 属性还不太够,还需要设置
即使这样设置之后,在 macOS 上有时仍会出现 Docker 栏和顶部系统菜单栏出现在 Kiosk 窗口上方的情况,因此还需要进一步设置 alwaysOnTop 的属性为
在 Windows 和 macOS 中,alwaysOnTop 的窗口有多种极别,按层级由低到高分别是:
● normal
● floating
● torn-off-menu
● modal-panel
● main-menu
● status
● pop-up-menu
● screen-saver
如果只是简单地
另外需要注意,在 macOS 下,太高的级别会挡住系统自带输入法的候选字窗口,如果你的 Kiosk 窗口需要用户输入,并且可能使用系统自带输入法的话,这个级别不能高于
一些其他注意点
Kiosk 模式只对当前窗口有效,一个窗口只能覆盖一个屏幕,若用户有多个显示器,则需先检测显示器数量,然后创建多个 Kiosk 窗口分别覆盖。
设置 Kiosk 模式后,用户仍可以使用
Windows 下退出 Kiosk 模式后,窗口的大小可能会变成全屏大小,如希望退出时恢复原大小,可以在进入 Kiosk 模式之前先记住窗口大小,退出后再设置为原大小。
Kiosk 模式并不能阻止用户重启计算机。如果希望重启计算机后能自动恢复 Kiosk 状态,可以将软件设置为随系统启动,并且启动时自动进入 Kiosk 模式。
via oldj's blog
什么是 Kiosk 模式?
Kiosk 模式是一种专门为限制用户操作而设计的应用运行模式,通常用于构建锁定的全屏应用程序,禁止用户访问系统其他功能或退出应用。在这种模式下,应用程序占据整个屏幕,并且用户无法通过常见的方式(如键盘快捷键、窗口控制按钮等)退出或切换到其他应用。
Kiosk 模式的主要用途是为用户提供一个专注且受限的操作环境,避免对系统的其他部分产生干扰。
哪些场景下需要使用 Kiosk 模式?
Kiosk 模式被广泛应用于以下场景:
● 公共信息亭:自助服务终端,如银行 ATM、自助点餐机、自助售票机。
● 展览展示:在博物馆、展览会、零售店中,用于展示信息或广告内容的屏幕。
● 教育场景:限制学生只能使用特定的教学应用,避免访问其他不必要的内容。
● 会议或演讲:锁定演示内容,避免误操作或退出。
● 数字标牌:作为广告屏幕或公告牌,循环播放内容。
当然,我在开发的是日常效率软件,并不属于以上场景。我用到 Kiosk 模式的场景主要如下。
图几截图软件
我开发并维护着一个截图软件图几,它有三种截图模式:全屏截图、窗口截图、区域截图。
其中区域截图的交互方式是:用户点击截图按钮(或按下截图快捷键),先生成当前屏幕的截图,随后显示一个全屏无边框窗口,在窗口中显示将刚刚生成的屏幕截图,同时允许用户在窗口上进行框选等操作。
这个无边框窗口就需要使用 Kiosk 模式,以免用户无意中切换窗口。当然,等用户完成或取消截图时,需要再退出或关闭对应的 Kiosk 窗口。
WonderPen 写作软件
WonderPen 写作软件最近添加了小黑屋模式,进入这种模式后,软件将全屏显示,屏蔽一切干扰,在完成预设的写作目标之前,将无法退出或切换到其他软件。
这个禁止退出的小黑屋,自然也使用了 Kiosk 模式。
Electron 中的 Kiosk 模式
在 Electron 中,将一个窗口设为 Kiosk 模式非常简单,在创建窗口时设置
kisok 属性为 true 即可。有时,我们的窗口在创建时需要以普通模式显示,然后再在一定条件下切换为 Kiosk 模式,只需用类似下面的代码切换即可:
win.setKiosk(flag)
其中
flag 是一个布尔值。你还可以使用
win.isKiosk() 方法判断当前窗口是否为 Kiosk 模式。在实践过程中,我发现很多时候只设置 Kiosk 属性还不太够,还需要设置
frame 等属性。以下是一个示例:const win = new BrowserWindow({
// 其他属性...
closable: false,
maximizable: false,
minimizable: false,
resizable: false,
fullscreen: false,
fullscreenable: false,
frame: false,
skipTaskbar: true,
alwaysOnTop: true,
useContentSize: true.
autoHideMenuBar: true.
movable: false.
thickFrame: false.
titleBarStyle: 'default',
paintWhenInitiallyHidden: false,
roundedCorners: false,
enableLargerThanScreen: true,
acceptFirstMouse: true,
kiosk: true,
// 其他属性...
})
即使这样设置之后,在 macOS 上有时仍会出现 Docker 栏和顶部系统菜单栏出现在 Kiosk 窗口上方的情况,因此还需要进一步设置 alwaysOnTop 的属性为
screen-saver,代码如下:win.setAlwaysOnTop(true, 'screen-saver', 1)
在 Windows 和 macOS 中,alwaysOnTop 的窗口有多种极别,按层级由低到高分别是:
● normal
● floating
● torn-off-menu
● modal-panel
● main-menu
● status
● pop-up-menu
● screen-saver
如果只是简单地
win.setAlwaysOnTop(true) ,则窗口的级别只是 floating,仍有可能被其他系统组件遮挡。另外需要注意,在 macOS 下,太高的级别会挡住系统自带输入法的候选字窗口,如果你的 Kiosk 窗口需要用户输入,并且可能使用系统自带输入法的话,这个级别不能高于
modal-panel。一些其他注意点
Kiosk 模式只对当前窗口有效,一个窗口只能覆盖一个屏幕,若用户有多个显示器,则需先检测显示器数量,然后创建多个 Kiosk 窗口分别覆盖。
设置 Kiosk 模式后,用户仍可以使用
Cmd+Q 这样的快捷键退出应用,因此需要在代码中监听窗口的 close 事件,并检查是否处在 Kiosk 状态,如是则阻止退出。代码类似下面这样:win.on('close', async (e: Electron.Event) => {
if (win.isKiosk()) {
e.preventDefault()
return
}
// 其他逻辑
}
Windows 下退出 Kiosk 模式后,窗口的大小可能会变成全屏大小,如希望退出时恢复原大小,可以在进入 Kiosk 模式之前先记住窗口大小,退出后再设置为原大小。
Kiosk 模式并不能阻止用户重启计算机。如果希望重启计算机后能自动恢复 Kiosk 状态,可以将软件设置为随系统启动,并且启动时自动进入 Kiosk 模式。
via oldj's blog
更短的有效期和更长的保质期 - 肘子的 Swift 周报 #80
在上周一,我的博客的 HTTPS 证书出现了短暂的失效。好在失效后五分钟,就有热心网友提醒了我。联系云服务商后发现,是对方处理 SSL 证书自动续签的代码出现了故障。经过两个小时的排查,问题得以解除,网站恢复了正常。
Subscribe English RSS
阅读全文
via 肘子的 Swift 记事本 | Fatbobman's Blog
在上周一,我的博客的 HTTPS 证书出现了短暂的失效。好在失效后五分钟,就有热心网友提醒了我。联系云服务商后发现,是对方处理 SSL 证书自动续签的代码出现了故障。经过两个小时的排查,问题得以解除,网站恢复了正常。
Subscribe English RSS
阅读全文
via 肘子的 Swift 记事本 | Fatbobman's Blog
两年的 Rust 使用感悟
我学习 Rust 的方式并不常见:阅读教程、书籍或编写小项目。恰恰相反,我把学习 Rust 作为构建 Austral 的研究工作的一部分。我会阅读有关 Rust 的论文和规范,有时我还会去 Rust playground 写一个小程序,以了解借用检查器在特定边缘情况下是如何工作的
via TecHug (author: techug)
我学习 Rust 的方式并不常见:阅读教程、书籍或编写小项目。恰恰相反,我把学习 Rust 作为构建 Austral 的研究工作的一部分。我会阅读有关 Rust 的论文和规范,有时我还会去 Rust playground 写一个小程序,以了解借用检查器在特定边缘情况下是如何工作的
via TecHug (author: techug)
Linux 下的高效压缩工具 Zstandard
Zstandard 的简介
Zstandard 是由 Facebook 开发并开源的一种快速无损压缩算法,自 2015 年首次发布以来,凭借其高压缩比和快速的解压缩速度,逐渐受到了开发者的青睐。它不仅在压缩效率上超越了传统的 gzip 等工具,还能在保持高压缩率的同时,实现极快的解压速度,特别适合对数据处理效率要求较高的场景,如大数据处理、日志压缩、网络数据传输等。
Zstandard 的特点
● 高压缩比 :通常情况下,Zstandard 能够获得比 gzip 更好的压缩效果,有效减少数据的存储空间。
● 快速解压缩 :其解压缩速度极快,即使是低压缩等级时,解压速度也能远超一些 SSD 的读取速度,大大提高了数据的读取效率。
● 多线程支持 :Zstandard 自带多线程压缩功能,可以充分利用多核 CPU 的性能,大幅提升压缩速度。例如,在处理大量数据时,多线程压缩能够显著缩短压缩时间,提高工作效率。
● 丰富的压缩级别选择 :提供了从 1 到 22 的压缩级别选择,用户可以根据实际需求在压缩速度和压缩率之间进行灵活权衡。压缩级别越高,压缩率越大,但压缩速度会相应减慢;反之,压缩级别越低,压缩速度越快,但压缩率会有所降低。
● 字典压缩模式 :Zstandard 为小数据提供了一种特殊的字典压缩模式。用户可以通过提供一些样本数据来训练生成字典,然后在压缩和解压缩时加载该字典,从而在小数据上实现更高的压缩率,这对于处理大量小文件的场景非常有用。
Zstandard 的安装
1. 使用系统的包管理器安装
● Debian/Ubuntu :直接运行命令
● Fedora/Red Hat/CentOS/AlmaLinux :执行命令
● Arch Linux/Manjaro :使用命令
2. 从源码编译安装
● 下载源码 :访问 Zstandard 的官方下载地址https://github.com/facebook/zstd/releases/,下载最新版本的源码包。
● 解压源码包 :使用命令
● 编译安装 :进入解压后的目录,依次执行命令
Zstandard 的使用
1. 压缩文件
● 基础压缩 :使用命令
● 指定压缩级别 :可以通过
● 压缩为特定文件名 :使用
2. 解压文件
● 基础解压 :使用
● 指定解压后的文件名 :同样可以使用
3. 压缩目录
● 压缩整个目录 :可以使用
● 解压目录 :对于压缩后的目录文件,使用
4. 查看压缩文件内容
使用
以上内容中涉及的相关操作界面及示例示意图如下:
● Zstandard 官网示意图 :展示了 Zstandard 的基本介绍及压缩比、速度等方面的性能表现,方便读者对 Zstandard 有一个直观的认识。
● 命令行操作示意图 :以简洁的命令行界面,清晰地展示了 Zstandard 压缩和解压文件的基本操作方法,便于读者理解和参考。
● 多线程压缩示意图 :形象地呈现了 Zstandard 多线程压缩的原理和优势,帮助读者更好地了解其在提升压缩速度方面的特点。
● 字典压缩示意图 :通过具体的操作示例,说明了 Zstandard 字典压缩的使用方法和应用场景,突出了其在小数据压缩方面的特殊优势。
未完待续!
via 杜老师说
Zstandard 以其卓越的性能和丰富的功能,成为了 Linux 下一款不可或缺的压缩工具。无论是对单个文件还是整个目录的压缩和解压,它都可以轻松应对,且在处理速度和压缩效果上都有着出色的表现。
Zstandard 的简介
Zstandard 是由 Facebook 开发并开源的一种快速无损压缩算法,自 2015 年首次发布以来,凭借其高压缩比和快速的解压缩速度,逐渐受到了开发者的青睐。它不仅在压缩效率上超越了传统的 gzip 等工具,还能在保持高压缩率的同时,实现极快的解压速度,特别适合对数据处理效率要求较高的场景,如大数据处理、日志压缩、网络数据传输等。
Zstandard 的特点
● 高压缩比 :通常情况下,Zstandard 能够获得比 gzip 更好的压缩效果,有效减少数据的存储空间。
● 快速解压缩 :其解压缩速度极快,即使是低压缩等级时,解压速度也能远超一些 SSD 的读取速度,大大提高了数据的读取效率。
● 多线程支持 :Zstandard 自带多线程压缩功能,可以充分利用多核 CPU 的性能,大幅提升压缩速度。例如,在处理大量数据时,多线程压缩能够显著缩短压缩时间,提高工作效率。
● 丰富的压缩级别选择 :提供了从 1 到 22 的压缩级别选择,用户可以根据实际需求在压缩速度和压缩率之间进行灵活权衡。压缩级别越高,压缩率越大,但压缩速度会相应减慢;反之,压缩级别越低,压缩速度越快,但压缩率会有所降低。
● 字典压缩模式 :Zstandard 为小数据提供了一种特殊的字典压缩模式。用户可以通过提供一些样本数据来训练生成字典,然后在压缩和解压缩时加载该字典,从而在小数据上实现更高的压缩率,这对于处理大量小文件的场景非常有用。
Zstandard 的安装
1. 使用系统的包管理器安装
● Debian/Ubuntu :直接运行命令
sudo apt install zstd即可完成安装。● Fedora/Red Hat/CentOS/AlmaLinux :执行命令
sudo dnf install zstd。● Arch Linux/Manjaro :使用命令
sudo pacman -S zstd进行安装。2. 从源码编译安装
● 下载源码 :访问 Zstandard 的官方下载地址https://github.com/facebook/zstd/releases/,下载最新版本的源码包。
● 解压源码包 :使用命令
tar -zxvf zstd-x.x.x.tar.gz(x.x.x 表示具体版本号)来解压下载的源码包。● 编译安装 :进入解压后的目录,依次执行命令
make和sudo make install,即可完成编译及安装。Zstandard 的使用
1. 压缩文件
● 基础压缩 :使用命令
zstd file_name即可对文件进行压缩,压缩后会生成一个扩展名为.zst的新文件,例如zstd doc.txt,会生成doc.txt.zst文件。● 指定压缩级别 :可以通过
-#选项来指定压缩级别,例如zstd -3 file_name表示使用压缩级别 3 进行压缩。● 压缩为特定文件名 :使用
-o选项可以指定压缩后的文件名,如zstd file_name -o new_archive_name.zst。2. 解压文件
● 基础解压 :使用
zstd -d archive_name.zst即可对文件进行解压,解压后的文件会自动去除.zst后缀。● 指定解压后的文件名 :同样可以使用
-o选项来指定解压后的文件名,例如zstd -d archive_name.zst -o new_file_name。3. 压缩目录
● 压缩整个目录 :可以使用
zstd -rz directory_name来压缩整个目录,其中-r表示递归压缩目录中的所有文件和子目录,-z表示压缩操作。● 解压目录 :对于压缩后的目录文件,使用
zstd -dr archive_name.zst进行解压,-d表示解压操作,-r表示递归解压。4. 查看压缩文件内容
使用
zstd -l archive_name.zst可以查看压缩文件的相关信息,如压缩比、压缩级别、文件大小等,而zstd -t archive_name.zst则可用于测试压缩文件的完整性,确保文件在压缩和传输过程中未损坏。以上内容中涉及的相关操作界面及示例示意图如下:
● Zstandard 官网示意图 :展示了 Zstandard 的基本介绍及压缩比、速度等方面的性能表现,方便读者对 Zstandard 有一个直观的认识。
● 命令行操作示意图 :以简洁的命令行界面,清晰地展示了 Zstandard 压缩和解压文件的基本操作方法,便于读者理解和参考。
● 多线程压缩示意图 :形象地呈现了 Zstandard 多线程压缩的原理和优势,帮助读者更好地了解其在提升压缩速度方面的特点。
● 字典压缩示意图 :通过具体的操作示例,说明了 Zstandard 字典压缩的使用方法和应用场景,突出了其在小数据压缩方面的特殊优势。
未完待续!
via 杜老师说
“猜均值的 2/3”游戏 Demo
一年多前,我写过一个 《“猜均值的2/3” dApp 游戏设计》的设想。
偶然想起来,现在有了功能强大的 ChatGPT 的帮助,让这个游戏在实现上变得简单,合约和前端页面都可以轻松完成。今天只用了 2 个小时,就完成了这个网页的 Demo。
可以通过这个页面访问游戏:https://guessavg.oiia.network/
有几点需要说明:
1. 目前这个 dApp 小游戏运行在 Oiia Network 上,合约地址
2. 参加游戏实际上就是调用合约的函数,同时给合约转账一笔钱,例如交易
3. 合约代码在仓库 guessavg/contract,理论上可以部署到任意网络,因为 OIIA 不要钱,我就拿来用了。
4. 前端代码仓库在 guessavg/game,和合约代码配合使用。
5. OIIA 可以在 faucet 领到一些 https://faucet.oiia.network/
6. 这个私钥有 10 个 OIIA,也能拿来玩一下。但是从游戏机制上,是不允许相同地址重复参与的,需要先把 OIIA 转到陌生地址才行。
1. 前端网页在添加 Oiia 网络到 Metamask 的时候,会报错,但实际上成功了,我没有深入排查原因。一个月前相同的代码还没报错来着。
2. Oiia Network 随时会消失。
3. 只是玩玩……
via smallyu的博客
一年多前,我写过一个 《“猜均值的2/3” dApp 游戏设计》的设想。
偶然想起来,现在有了功能强大的 ChatGPT 的帮助,让这个游戏在实现上变得简单,合约和前端页面都可以轻松完成。今天只用了 2 个小时,就完成了这个网页的 Demo。
可以通过这个页面访问游戏:https://guessavg.oiia.network/
有几点需要说明:
1. 目前这个 dApp 小游戏运行在 Oiia Network 上,合约地址
0x6eb07...BA8F12. 参加游戏实际上就是调用合约的函数,同时给合约转账一笔钱,例如交易
0x1bfb2...109363. 合约代码在仓库 guessavg/contract,理论上可以部署到任意网络,因为 OIIA 不要钱,我就拿来用了。
4. 前端代码仓库在 guessavg/game,和合约代码配合使用。
5. OIIA 可以在 faucet 领到一些 https://faucet.oiia.network/
6. 这个私钥有 10 个 OIIA,也能拿来玩一下。但是从游戏机制上,是不允许相同地址重复参与的,需要先把 OIIA 转到陌生地址才行。
fdf0aec857f3ac4fe146e0d00fb3a7a729646a081719df3f4e168a541a21893b
1. 前端网页在添加 Oiia 网络到 Metamask 的时候,会报错,但实际上成功了,我没有深入排查原因。一个月前相同的代码还没报错来着。
2. Oiia Network 随时会消失。
3. 只是玩玩……
via smallyu的博客