I am LAZY bones? AN ancient AND boring SITE

thirsty@SG

前言:
自从我2022年来到新加坡以后,就发现这边有些地方确实是挺人性化的。举个我自己感受最深的例子:这边会有很多的免费喝水点,分布在机场里、食阁角落、公厕边上、小区内部,最主要还有很多在公园里和绿道边。要知道新加坡是一个接近赤道的热带国家,气温一直比较高,如果出门在外,是很容易口干舌燥的,如果去哪都要自己带水会很麻烦,如果光靠买水,那经济上的压力也会不小。
在户外能喝到免费放心的饮用水,对喜欢户外跑步或者徒步的人(比如我)尤其友好。但也因此带来了一个小小的问题:当我探索到一个陌生的地方,我要怎么才能知道附近哪来有喝水点呢?

试着解决:
我当然想过在google maps或者苹果的地图里搜索,但很遗憾,这个数据可能只在新加坡有意义,需求也相对比较小众,因此这些巨头企业是覆盖不到这个需求的。在新加坡的各种政府网站,我也没有搜到想要的答案。
而且,我看到有人做了类似事情,比如这个: https://linktr.ee/brayontng 作者是一个大一到学生,用Google forms收集数据,最终在google maps的自定义地图上做展示。但现在似乎也有大半年没更新了,而且我身边熟知的几个点好些都没有收录。还有就是大部分点都没有图片,真要用起来可能也不是太方便。

我的方案:
所以,我想到做一个手机app,嵌入地图SDK,打开app就能显示附近的喝水点,除了告诉你经纬度以外,还会告诉你所在楼层、水是常温的还是冰水或者热水;并且能显示一张图片,让你大致知道周边的情况,还能方便地调用第三方地图软件导航过去。
当然,我自己并没有完整的数据。所以,还会有一个“上传喝水点”的功能,希望发挥广大网友的力量,逐步完善这个数据。最终希望能覆盖整个新加坡绝大部分的喝水点。
于是,就有了 thirsty@SG。不过由于我也是刚学的SwiftUI,对界面设计也不太在行,因此目前app可能会有这样那样的小问题,界面也比较简陋,但我还是会尽我所能把这个事情做好。

APP:
所以,大家可以通过这里下载这个叫做“thirsty@SG”的app。目前只有iOS的,因为我不会安卓的app开发,可能暂时不会有安卓的版本。而且目前仅限在新加坡范围内使用,暂时没有打算支持更多地区。

关于上传喝水点:
方法也很简单,点击app左下角,会弹出上传的界面,此时需要拍一张喝水点的照片,app会自动获取此时的经纬度信息,填上一些必要的信息以后,就可以点界面上的“upload”上传了。
显示上传成功以后,暂时还不会直接在app上显示,为了防止有人滥用而误导其他用户,我设计了数据需要审核才能生效,审核我主要会看上传的照片,因此照片是不接受图库里选择的,只能现场拍,望大家理解。我也会尽快审核,慢也不太会超过一天。
上传的时候,可以选择填上你的邮箱。即使填了,也不会在任何地方公开这个信息,万一以后有会员体系什么的,这些做过贡献的用户,肯定默认就是高级用户。(对,我在画饼了,哈哈)

如果在使用app的过程中有任何问题,可以通过X(前Twitter)联系我: https://twitter.com/senob_ 其他未尽事宜,也欢迎联系咨询。

区块链漫游指南

没有人会想到,这个沉默了多年的blog居然还活着,更没有人会想到,它居然还更新了。。。

也没有啥起因,一切都很随意。我最近在学习一些区块链相关的技术,看到这篇文章感觉不错,正好也在提升英语,于是就打算给他翻译出来。那既然都已经翻译了,不如就发表出来吧。

英文原文在这里,如果英文不错的话,还是建议直接看原文,他有很多“银河系漫游指南”相关的梗,很难翻译出来(主要是我也不太懂这些梗),哈哈!

=========开始的分割线=========

本文要讨论的是:区块链、加密货币、智能合约、Web3 以及 NFT(非同质化交易),对这些概念,很多人都有自己的认知,但很少人理解它们的本质以及相互的关系。你正在读的这篇文章的目标,是对这些概念以及背后的技术和实现做一个结构化的介绍。本文以三部曲的形式,分成了5个部分(这是一个梗)。

现如今,IT、数字化、经济、民主和社会相关的很多问题,都被认为可以用基于区块链的方案来解决。但和很多其他领域一样,这里也充斥着各类思想家、淘金者、白嫖党、江湖骗子和末日先知,导致鱼龙混杂。

这一系列文章,目的是以一种易于阅读的方式,为菜鸟和老手提供可靠的洞见。重点是–在这个复杂的、纠缠不清的主题中尽可能–透明地、实质性地、有条理地展示其中的利害关系。本文会以尽量幽默的方式来给大家加深印象。

此鸿篇巨著会分为以下五个层次:

  1. 区块链本身,一种透明、持久化地存储数据的方法(本文);
  2. 建立在区块链之上的以比特币和以太坊为例的加密货币,这已经被誉为金融系统的革命了(在即将发表的文章中);以及
  3. 智能合约,作为有条件地加密货币交易的代表,被认为简化了在线合同的创建和执行(在即将发表的文章中)。智能合约也被用于创建:
  4. 非同质化代币(NFT),数字艺术品将彻底改变艺术家的支付形式、艺术品贸易和版权(在即将发表的文章中);以及
  5. 互联网民主化的承诺,被称为Web 3.0或Web3,也是分布式自治组织的基础(DAO;在即将发表的文章中)。

这五层中的每一层,都将先分四节呈现事实和客观分析,另外两节将是一些个人见解和家庭作业。由于比较复杂,这个也不是绝对的:

  1. 这个技术背后有哪些希望和承诺,以及它们旨在解决什么问题。
  2. 实际技术内部原理的简介,以及其可能性和局限性。
  3. 基于区块链的解决方案是此问题的唯一解吗?如果不是,又有哪些备选方案和替代方案
  4. 承诺背后的现实是什么?
  5. 基于上述分析,对该技术的主观评估
  6. 在投资(资金或技术上)之前,需要问自己或专家的问题清单

准备好了吗?玩了各种我也不知道啥意思的梗之后,让我们开始吧!
第一站:基础层,区块链本身。

我试图让本文尽可能保持中立。然而,在我的研究中,我学会了两件事:

  1. 区块链的倡导者痛批当前经济体制的贪婪、低效、不透明和过度复杂。然而,这些倡导者努力建立的目标却是一个新的贪婪、效率、不透明和过度复杂性的数字化体制。
  2. 每当有人问我,与没有区块链的方案相比,基于区块链的技术有什么看得见的好处吗?我要么是避而不谈,要么给出的答案会前后矛盾。

尽管如此,整个领域应该有更多的洞察。区块链生态系统提出了几个重要问题,这些问题的答案与我们社会的未来以及我们与技术的互动都息息相关。十几年来,“区块链”一词在Buzzword Charts中得分很高。仅凭这点就足以成为深入分析和理解这一现象的理由了。

第一部分: 区块链自身

TL;DR(概要)

  1. “足够先进的技术与魔法是无法区分的“,但如果某些技术被作为魔法在卖弄,那就该问一下此技术是真的有真材实料,还是它只能进行声光电的魔法表演了(换句话说:如果事情看起来好得令人难以置信,它往往是真的)。
  2. “如果您将区块链加到垃圾流程中,那你会得到一个垃圾区块链流程”。(换句话说:即使你买到了先进的技术和人才,好的解决方案也不一定会自动出现,如果这些技术带来了新的复杂性和低效率,就更不会了)。
  3. 仅仅是一个好主意并不能自动成为好的解决方案的一部分。(换句话说:即使是锤子也应该结识其他朋友,而不仅仅是钉子)。
  4. 信任确实可以提高效率并降低复杂性。但区块链的解决方案并不需要以任何形式的信任为前提,但代价是更低效率和更高的复杂性。(换句话说:复杂性是安全、透明度、效率和信任的敌人)。

这不是“管理者摘要”,而是“非经理人”(或非决策者)的摘要,因为我认为,当面临一项被认为是革命性的技术时,决策者尤其需要了解更多细节,以便他们可以区分这是昙花一现还是有真的好处。

区块链是为解决一个非常具体但特别复杂的问题而创建的:建立一种相当于纸币的数字货币,可以防止伪造,并保持匿名性。对于这个问题,直接使用区块链可能是一个很好的解决方案。但对于大多数其他场景来说,就会是大规模的过度工程,因为即使是对前提条件做微小改变也会带来更有效的解决方案。但要知晓和理解这些因素,就需要更深入地了解,这正是本文的目标所在。

在创作过程中,本文变得比原计划的还要庞大。幸好它在可读性和可理解性方面也有所提高了。换句话说,它本是以高管和决策者为目标受众而写的,但加入了许多令人难忘的类比和与现实世界的理解,也更适合作为茶余饭后的谈资了。

我认为本文做到了:您可以随时回来浏览某个段落,并在遗忘了某些内容时回头查看。章节中经常会有大字体、高亮的概述语,来帮助此类读者定位内容。

区块链,以及比特币,出现于2008年金融危机的高峰期,作为对银行在这场危机中的作用的制衡。银行先是利用不透明的金融产品从不良抵押贷款风险中获利,然后由于其系统相关性(“大而不能倒”),消耗了大量的救助资金。因此,对中央组织(银行、州政府等)的透明度和独立性的渴望是贯穿区块链生态系统各个层面的主旋律。

这个概念带有加密无政府主义和无政府资本主义的特征,即希望避免信任任何组织和机构,尤其不信任国家机构。只有程序(“代码即法律”)或自由的(即不受监管的)市场才值得信任。这种特征贯穿各个层面,尤其在加密货币和智能合约中最为明显。

目录(略,其实是我不知道怎么做)

愿景:

区块链拥趸会推荐你只阅读此章节。

由于区块链和比特币是同一时代的产物,所以区块链一词有时也被口语化,指代基于它的应用(如加密货币、智能合同等)和整个生态。我先澄清一下这几个概念。

区块链具有(或应该具有)以下四到六个要素(还未有统一的定论):

Wikipedia Christian Cachin/IBM MoreThanDigital
分布式账本 数据完整性
去中心化存储 密码学 可靠性
共识 分布式共识 快速存储
数据处理 security 业务流程 可分析、透明
透明、保密
不可篡改

让我们以克里斯蒂安·卡钦 (Christian Cachin)的四要素为例来进行阐述:

  1. 一个记录了所有历史交易的不可篡改的分布式账本
  2. 密码学来确保会计的完整性和交易的真实性。
  3. 关于账本内容和交易有效性形成分布式、可容错的共识:区块链上的所有参与者都应该能对最终状态(例如账户余额)达成一致,即使不是所有参与者都随时在线。
  4. 业务流程(“业务逻辑”),旨在确保交易的有效性并执行它们(帐户管理、智能合同……)。这个领域会放到后续的两篇文章里具体展开。

这非常的抽象,尤其是这里并没有说明区块链要实现的确切目标。由于本文旨在解构这个复杂的问题,我们需要先回答一个问题:人们到底想使用这些功能来做什么?因此,让我们看看典型的“区块链的10大典型应用”,然后以此来说明其中的好处:

  1. 国际金融交易:数据一致性、放篡改、跳过所有中介→更低的交易成本和更快的交易速度。
  2. 医疗保健:在分布式网络允许存储敏感数据:患者记录、医疗结果和临床病史。仅能由所有者授权的用户才可访问。
  3. 身份管理:身份证件可以安全地数字化,永不丢失且更快更安全。
  4. 防止洗钱:透明度、记录保存和归因。
  5. 保险:创建智能合约,用于保险理赔和欺诈检测。
  6. 供应链管理:更简单的合同,可持续地跟踪物流,透明化地记录从原产地到商店的全链路。更快/更简单/更便宜的查询。
  7. 租车市场:访问权和所有权的控制、车辆自动租赁+账单、安全计费,即使是电动车也适用。
  8. 能源市场:处理可变、可跟踪的交易(私电并网)、充电站的计费/付款。
  9. 数字选举:无法被操纵,每张选票可跟踪。
  10. 学位证书:颁发国际公认的不能伪造的学位和学历证书

这些主题涵盖了广泛的领域,从区块链本身到加密货币和智能合约。如果这能解决现代社会中这么多悬而未决的问题,那就太好了。然而这些在过去的14年里并没有真正发生,所以一切还没那么简单。

在接下来的(很详细的)技术章节中,让我们先看看用于解决上述挑战的技术和特性,然后再在现实中加以应用。由于我们在这里专注于区块链本身,我们将在本文末尾讨论数据一致性/反篡改、防丢失、透明/记录和(部分)归因/可追溯性/伪造等主题。在奠定必要的基石后,我们将在后续文章中更详细地展开其余的要点。

技术:

本章节会带你穿过层层迷雾,探索所有的荆棘。
e-blockchain-overview

比特币区块链元素概览:左边是链条本身,区块链式地串在一起,每个区块(中间部分)包含了一系列特定的交易(右边部分)。

即使是最简单的部分,即区块链,就已经相当复杂了。在我们深入研究之前,先看这个基于比特币的概述。

比特币的区块链由一连串的区块(上图中的“Chain”)组成,会随着时间而增长(在某些特定场景下也可以分叉,后面会提到)。

目前,比特币区块链已经约有73万个区块(译者注:2022年4月是73万个块,翻译时的2022年12月,已经有76万个区块了),并且,约10分钟就会新增一个新的区块。每个区块都包含了一组交易。整个事情由构建系统的计算机(节点)共同管理,实际上每个人都可以参与其中(无需特别授权)。

为了了解其中的相互作用,让我们分几个小步骤来分析它,这些步骤一起构成了本技术章节的小目录:

  1. 区块链的结构和功能
  2. 如何在没有值班人的情况下新增一个区块(共识)?
  3. 节点之间如何沟通(P2P网络)
  4. 人们为什么会自觉这样做(激励)?
  5. 一个有效的区块是如何产生的(挖矿和工作量证明PoW)
  6. 还能如何解决(权益证明和朋友证明)?

接下来是小结,以便你可以看到森林的所有树木(译者注:总揽全局)。

在我们分析区块链之前,让我们以“用纸张的办公室”来类比。我们将看到无政府的会计师(或公证人)存了很多防篡改的活页。

类比:公证人的办公室

在此章节,我们将从头构建一个不可修改的活页集。
第一张盖了章的活页

第一张盖了章的活页

让我们以现实世界的类比来开始对区块链技术的介绍:无政府的会计和公证办公室(作为初级公证人,他们最初只被允许处理小额金融资产。在后面的章节中,他们也将被允许对合同和有形资产的转让进行公证。这就是为什么我们现在就称他们为“公证人”,尽管目前他们只是记账而已)。

出于效率原因,几位公证人分担了这项工作。现在,大部头的账本已被废弃,取而代之的是使用活页(无论如何,在公证人中这更受欢迎)。所以,在第一天,负责任的公证人填写完了交易表,并盖章确认了。

有第一页副本的第二页

有第一页副本的第二页

第二天,值班公证人重复了同样的程序。但是,为了以后没有人可以将前一天的表格换掉,他今天的表格中包括前一天黄色表格的缩减副本。他像往常一样在晚上下班前盖了公章,以确认其准确性。

第三天,第三名公证人重复该过程。还是在晚上下班前,在他的交易表上盖章,也附上了前一天表格的缩减副本,在该副本上,也可以看到前天的缩减副本,以此类推。

第三张活页,上面有第二个的副本,可以看到第一个

第三张活页,上面有第二个的副本,可以看到第一个

继续这个过程,公证员们以协助的方式生成了一个共同的文件链。在这个链条中,是无法在不修改后续表格的情况下,修改掉以前的表格内容的。因为这肯定会背发现。

但协调公证员的权利和义务,是需要以信任和权威为基础和前提的。下面我们会讨论如何在没有事先共识的情况下解决纸质区块链的信任问题(从而信任任何人),因为这也是数字区块链的密码学基础。

简单起见,截止目前我们的初级公证员都是有固定的排班表的,他们都有各自的休息时间,因此对谁负责哪一天的记账工作是没有冲突的。但随着我们越来越接近了解真正的区块链,这种情况将会发生改变。

数字版的区块链

在此章节,我们用乐高积木将活页账本数字化。
用堆叠的乐高积木来类比区块链

用堆叠的乐高积木来类比区块链

让我们切换到数字版区块链,比如比特币使用的区块链就是这样。它的工作原理与上面的活页表格非常相似:每个区块都包含了一个交易列表,有人负责验证交易的真实性,这个人就是“区块的创造者”;在加密货币中,他们也被称为“矿工”。

每个区块都会计算校验和(即所谓的“哈希值”),然后将前一个区块的校验和存储在当前区块中,类似于上面公证表中前一天的缩减副本。这就意味着,新的区块不可撤销地与其前一个区块绑定了,也就间接(或传递)地与所有的祖先区块绑定了。

每个区块都是独一无二的(特别是它的端板)

每个区块都是独一无二的(特别是它的端板)

为了加深印象,让我们稍微调整一下我们的乐高积木:不同于常规的乐高(块与块之间都可以匹配),新的积木每个块顶部的点都构成一个独特的图案(对应于其独特的哈希),上面的块必须有匹配的图案才能叠上去(就像事锁和钥匙一样)。

下一个块必须有匹配的孔,否则叠不上去

下一个块必须有匹配的孔,否则叠不上去

哈希函数的特点是,即使世界上所有的计算机在数十亿年内不做任何其他事情,他们也无法找到具有相同哈希值的第二个区块。最终的结果是,我们有一个存储在当前区块中的前一个区块的缩减副本。一般一个区块所占据的空间是1-2MB,而哈希只用了32个字节,大约少了5万倍。

(作为对比,在纸质版的比喻中,仍有可能直接从缩减副本中读出所有细节,但仅从哈希值中不可能读出前一区块的任何内容。但纸质副本和哈希的实际目的–对先前区块的唯一识别–在这两种情况下都完全得到了满足)。

通缉:无值班公证人名册

在此章节,我们解放公证人并最终允许他们独立生活和工作。

此前我们的公证员都有一个明确的值班表。每一天,都正好有一个人负责保管账本。账本是由双方同意或由他们的老板指派而产生的。但比特币是加密无政府主义和对中央权力机构在金融危机中的行为感到愤怒的产物;因此,这里必须没有任何形式的“监督者角色”!这就是比特币。无论老板在提高协调效率和创建规则方面有多大作用,但在某些时候,老板也可能会滥用他们的权力,而系统内将没有任何机制来阻止它。

在现实世界中,确实存在罢免“滥用职权或腐败的上级”的机制,但这种罢免往往是耗时耗力的。现实世界中用以预防此事的机制包括诚实、同情和信任。这些进化的优势可以导致避免出现这种情况或迅速补救。然而,这些都需要定期互动,因此不能扩展到80亿人。而且,无论如何,它们都不符合加密无政府主义的世界观,根据这种世界观,人们不希望让自己依赖任何人。

鱼群

最著名的自组织例子可能是鱼群和鸟群。
也许你们中的一些人还记得《海底总动员》中对月光鱼的夸张(因此也特别吸引人)的描述。
(adiprayogo liemena at Pexels供图)

这就只剩下公证员之间的相互协商这一条路,即上述的共识。然而,我们不仅没有了制定值班表的老板,我们也没有来雇用公证员的老板,或者在某个公证员喜欢在预定的工作日去钓鱼的时候叫他们回来。

这意味着,我们需要一个必须应对不断变化的公证员人数的系统,他们都不想参加入职测试,也不想事先宣布他们的存在或缺席。最纯粹的混乱,或者,稍微好一点,一个自我组织的系统。

人类群体远不如鱼群那么同质化;因此,几乎没有十几个人以上的自组织群体。因此,对于更大的群体来说,迟早会出现分工结构。在标准化工作流程中,这些结构减少了协调工作,从而提高了效率。但这些权力地位等体系正是加密货币想尽量避免的。正如我们接下来会看到的那样,这是以牺牲效率为代价的。

组织结构

在此章节,公证员从家庭办公室学习,相互沟通。
一个将他们全部绑定的网络

一个将他们全部绑定的网络

为了让我们的纸质版公证员组成公证处,我们需要两者兼而有:

  1. 组织结构(本章)
  2. 奖惩制度(胡萝卜和大棒),即老板和工资的替代品,我们将在下一章中介绍

首先是组织:所有想成为公证员的人都会可以成为平等合作伙伴网络的一部分,也称为同行,以交换信息。在这样一个点对点的网络中,(1)要包含在区块链中的交易会被传递给每个人,(2)新创建的块(或类比中,盖章的表单)会由每个人存储。

这个P2P系统是由一组计算机(”节点”,在上图中是带字母的圆圈)和它们之间的一些用于交换信息的链接(通道或 “边”)组成的。现在,如果蓝色节点A有一个新的信息,它会把它发送给其所有的相邻节点,如蓝色箭头所示(节点B和C)。类似的B将信息发送给了C和D(红色箭头),A被排除在外,因为那是B的信息来源,显然A一定已经有了这个信息。

在B和C之间的那条边上,信息在两个方向上都会被传播一次,因为在发送时,B和C都无法知道对方是否已经知道了这个信息。

这种所谓的 “泛滥(flooding) “创造了一个(微小的)潮汐,席卷了整个信道系统,到达了从A到G的所有节点。许多参与者将多次收到信息,在最坏的情况下,你的每个邻居都会给你发一遍。效率不高,但当你不能或不愿相信任何人时,就只能这样了。

最后,对我们的公证员来说,这意味着他们可以打消希望再有任何空闲时间的念头了。虽然这不是特别有利于激励,但它对容忍个别参与者的失败(甚至是恶意)是很有效的。由于缺乏中央权威,没有仲裁机制,所以每个人都必须首先照顾自己,尽可能少地依赖其他人。从加密无政府主义的角度来看,这种浪费比信任更好;这种模式在整个生态系统中一次又一次地伴随着我们。

胡萝卜和大棒

在此章节,我们激励自由职业者。

然而,上述通过公证网络泛滥的信息只是日常工作的一小部分:我们的公证员不仅要不停地转发所有的这些信息,而且每个人还要不断地更新交易清单,因为你不相信你的同事能做好。另一方面,这也意味着从现在开始,你将没有任何空闲时间,因为你要昼夜不停地忙于工作和检查你的同事的工作。即使这么做非常低效。

但首先要回到现实世界的日常工作。让一个团队保持“正轨”的方法之一是建立一套有明确标准和奖励的激励系统。对于人类团队来说,验证是否达到标准其实是非常困难的,即使已经在诸如计件工作上尝试过;这有点像劣币驱逐良币。很难持续下去,因为数量是以牺牲质量为代价的,或者团队成员会为了让自己的表现看起来更好,而贬低同事们的表现。阴谋、隐瞒、谎言和操纵,甚至可能达到破坏。这些都是电影和小说中保证悬念的关键因素,但在现实中,它们对生产力和实现共同目标是非常不利的。

在我们的公证处,流程是简单的、重复的、标准化的,这就是为什么大多数区块链假定工作情况是客观可衡量的。因此,为比特币创建了一个货币激励系统,根据具体的、可验证的规则,如果这个区块被普遍认可,就会给予奖励(以比特币计)。这就是为什么这个程序被称为 “工作证明”(PoW)。

到目前为止都很简单。但是如果某人的工作做得不够好,你怎么能惩罚他呢?咱们让工作变得如此艰难和乏味,以至于没有人自愿去做,除非他们能期望得到慷慨的回报!

所以,激励措施是基于人类最强烈的动机之一:贪婪,对金钱和权力的贪婪。而这种激励机制也是完美的,至少在表面上是这样。正是因为有了贪婪的魔力,让人们投入了空前的创造力,去寻找和发现漏洞。在本篇和下一篇文章的“现实”章节的事实之后,会有更多关于这个问题的内容。

工作和工资

在此章节,诚实的合作终于得到了回报。

任何在比特币区块链上添加了一个新区块的人,目前都会得到6.25个比特币(₿)的奖励,用于创建(“挖矿”)新区块,目前这相当于接近25万瑞士法郎。对于10分钟的工作来说,这很吸引人,也难怪贪婪会成为驱动力。(在下一篇文章中会有更多关于金融和它在生态系统中的作用的内容)

如果你想得到那25万,你要怎么做呢?

  1. 收集传入的有效交易(详见下一篇关于加密货币和交易的文章)。
  2. 在将要创建的新区块中包含尽可能多的待确认交易。
  3. 处理这个区块,直到完成“足够的工作”(后面会说明)。
  4. 然后,这些区块的创建者(“矿工”)就将获得6.25₿的奖励,以及该区块中包含的所有交易的交易费(截至今天,一个区块收取的交易费仅约为采矿奖励的1%)。但愿它是你的!
所谓的D100骰子(或“百分之一骰子”)
它只有一百个面。仍100次平均才会有一个1。

所谓的D100骰子(或“百分之一骰子”)
它只有一百个面。仍100次平均才会有一个1。

加密的谜题需要反复、艰苦的尝试才能得到解决,一旦解决就完成了“足够的工作”。例如,比特币网络上的矿机需要不知疲倦地投120*1021亿面的骰子,直到它出现了数字1。这次成功的骰子平均需要尝试120*1021亿次后才能成功。有了这个结果,即完成了“工作证明”,矿工就可以创建区块并领取奖励了。

我们的公证人不断从国际空间站投下公章

我们的公证人不断从国际空间站投下公章


当然,我们的公证人并不玩骰子。但他们喜欢捉迷藏游戏,是非常健忘又充满激情的太空游客。当他们完成交易收集工作后,他们将已完成的交易清单藏在地球表面5.1亿平方公里的某处,立即忘记具体位置,然后进入太空。从那他们尽可能快地将橡皮图章扔到地球表面,直到有人击中交易清单上的6×7厘米大小的盖章位(5.1亿平方公里/120*1021)≈42平方厘米。老实说!希望没人真拿地球这么玩~

计算机不会玩骰子也不掷公章,因为这俩都太简单了。因此,在尝试“挖”新块时,这个新的区块里有个特定的字段会被填充随机数,直到整个块的校验和(“hash”)值足够小;因为它每120*1021次只有一次。因此,经过无数次试验,这个足够小的hash就是我们工作的证明。(顺便说一句,如果不实际计算是无法预测块的hash值的,所以挖矿没有快捷方式)。

矿工的算力越大,这个谜题解决得就会越快。然而,比特币协议的设计决定指出,平均每10分钟才会新增一个新区块。为了确保随着整体算力的增加或减少,仍然维持在10分钟出块,就必须定期调整“足够的工作”的定义,以反映网络上可用的计算能力。在比特币网络中,这种难度调整大约每两周会进行一次。

在骰子的类比中,这意味着如果网络中有更多或更快的参与者,骰子的面数也会相应地滚动增加,所以就要更快地扔骰子,直到出现想要的点数。(就我们太空公证人而言,盖章的格子将缩小)。

结果就是:

  1. 谁能挖到矿,并获得出块奖励,其实很大程度上靠的是概率,为了实现更均匀、可预期的收益,矿工们聚集在矿池中,然后在矿池内分配收益。
  2. 有种可能的情况是,几个节点都很走运,几乎同时找到了无数个(大约1054个)可能的谜题的解之一。因此,此时几个有效的新区块会同时存在。一般来说,这些区块因其中包含的交易列表而不同,所以它们并不能互换。因此,系统必须做出选择,以决定继续使用哪个区块。详情见下。
  3. 如果说胡萝卜是中奖的机会(就像开彩票一样),那大棒就是对撕毁你的彩票。如果你付出了巨大的努力挖到了一个有效的区块,但比特币网络中的其他节点因为你犯了一个错误(例如记录了一个无效的交易)而不接受这个区块,那么你就被剥夺了获奖的机会。你将继续承担各种成本(电费、空调费、租金、其他摊销…),但甚至没有一丝获胜的机会。
  4. 只要有人认为他或她的累积总成本低于预期的区块收益,他们就会尝试扩张额外的采矿算力。所以,只要没有禁令改变规则,网络的总算力就会遵循比特币的价格而变化。
  5. 无论谁能以更低廉的价格获得电力(和制冷)都是有利可图的。因此,挖矿往往在电力成本低的地方进行,而且通常是火电。(除非你能免费“获得”电力)。
在事实上禁止加密货币后,中国(黄色)的采矿算力骤降(图片:CBECI)。

在事实上禁止了加密货币后,中国(黄色)的采矿算力骤降(图片:CBECI)。

剑桥比特币能源消耗指数(CBECI)估算比特币开采的年用电量约为125 TWh, Digiconomist则认为是200 TWh。CBECI假设每千瓦时电价为5美分(对于西欧来说:不切实际的),仅电力就花费62.5或100亿美元,也即每天2000万或3200万美元(!),而且这一趋势还在上升。

这种高能耗也被作为“禁止工作证明加密货币”的一个论点而被提出来。尽管非常努力,但它应该(像所有的政治决定,但不仅仅是这些)总是被视为成本/效益分析的结果。对于这一点,我随后的加密货币文章会继续展开。

区块链中的不可篡改性

在此章节,我们尝试伪造,但会光荣地失败。

找到匹配的替换块是“不可能”的

找到匹配的替换块是“不可能”的


支持区块链的一个重要论据是它的不可篡改性。因此,想要替换现有区块链中的某个特定的块,而不影响后续的块,是不可能的(记得活页的比喻)。也就是说,我们不能简单地把其中一个蓝紫色区块(例图中标有 “OK “的区块)”就这样直接 “替换成青色区块(”BAD”),这就是为什么它也被划成了红色❌。这是由于所使用的加密散列函数的安全性所致。

那要怎么样,才能真的像这样直接替换区块呢?

比特币网络把巨量的算力和工作量证明相结合,而且消耗的电力是世界上最强大的超级计算机的500倍。尽管有这样惊人的计算能力,整个比特币网络也要计算20亿亿年才能用另一个新区块替换一个现有区块,并使其校验和(哈希值)与原始区块相同,即它可以被接受为链上的有效成员。(至于是否真的会被接受则是另一回事)。

20亿亿年后面有N个零(到底几个0我也不知道了,译者注)。大家都喜欢与宇宙的年龄进行比较:即使自130多亿年前的大爆炸以来,这些计算机都在连续做计算,也只能完成上述工作的极其微小的一部分(十二亿分之一;又是一堆零!)。(即使是找到“关于生命、宇宙和所有其他问题”的答案,可能也比这个更快一些)。

来自IT安全界的人,谨慎地称其为“不切实际”;然而,普通人更喜欢“不可能”。

备选方案

=========未完待续的分割线=========

原文实在太长了,而且有很多俏皮的俚语,我实在翻译不下去了。。。
先发出来给大家看看吧,如果大家觉得有必要,我就继续翻译。。

PS:为了写这文章,后台临时装php-dom插件、Wordpress也临时装了几个插件、还临时改了几行CSS。。。也是醉了!

山洞奇遇

这是我第二次走进后山的这个神奇的山洞。
洞口不到一人高,大致呈一个不太规则的圆形,我稍微弯了下腰,侧身进了洞口。
和所有的晴朗夏日一样,山洞外面的天气有些闷热,阳光直勾勾地照射着江南这片肥沃的土地,山上高高低低的灌木显得有些无精打采,耷拉着叶子,与此形成鲜明对比的是那狂躁的知了,一个个都在卖力地大声叫着,似乎每只都怕自己的声音被其他知了淹没了。
但刚走进这个山洞,感觉就和外面完全不一样了。由于大山的阻隔,阳光没法照入这个山洞,体感瞬间就阴凉了下来,很是舒服。然后,外面嘈杂的知了声也迅速变小了,才往里走了几步,就安静地能听见针掉在地上的声音了。这时我就发现了这个山洞不寻常的地方——这里并不黑,虽然洞里面没有任何可见的光源,但走了几步后,周围的亮度就稳定了下来,并不是常理的越走到里面越黑,大致相当于正常的白天室内的亮度吧。
越往里走,空间就越大,现在不仅能站直身子,“天花板”已经高高在上了。
这时候,山洞就拐了个弯。我感觉这是一个U形的180度的大弯,但奇怪的是,这个弯并没有让我回到山的外面,而是进入了一个巨大的大厅,这大厅到底有多大呢?虽然我没有去过北京的人民大会堂,但我几乎可以确信这个山洞内的大厅不会比人民大会堂小。

这时,我想起前几天我第一次来到这里时的情景,当时的遭遇着实吓了我一跳:
当时我看到这个大厅靠里面的位置有一些椰子树,上面的椰子已经成熟了,密密麻麻地挂着,甚是诱人。而我那时有点儿口渴,就只想打个椰子吃,也没有觉得这么多椰树长在浙江有什么不妥——更何况还是长在一个山洞的里面。但即便我不去理会椰树的来源,接下来发生的事情也足够使我震惊的了。
我首先想到的采椰子的方法是拿石头砸,反正山洞里并不缺小石头。于是我捡起一块大小趁手的石头,瞄准一个我觉得比较好吃的椰子,用力砸了过去。石头在空中划出了一道漂亮的抛物线,眼看就要砸中我事先选好的椰子了,正在我对自己的投石技巧洋洋得意的时候,奇怪的事情发生了——石头似乎穿过了那个椰子,继续沿着抛物线在前进着,也不知道后来落到了哪里。我揉了揉自己的眼睛,虽然我不愿意相信,但那颗椰子还是完好无损地挂在椰树上。接着我又捡了几块石头尝试,但相同的事情每次都发生了。
虽然我此时已经是满脑子疑惑,但还是没有放弃想吃一个椰子解渴的想法,于是我在山洞的大厅里,好不容易找到了一根足够长的杆子,拿着杆子走到了一棵椰树的底下,努力举起杆子,使它伸向了我心心念念的椰子。但这次还是没有如我的意,杆子在触碰到椰子的时候,我没有感觉到任何的阻力,杆子直接穿过了椰子。。。
这时候,我不免开始有点害怕了,丢下杆子,开始往回跑。好在撤退的过程比较顺利,往回转过那个U形大弯,没几步就到了山洞的出口。俯身出了洞口后,又回到了现实的世界,外面还是这么闷热,知了还是卖力地叫着,一切都是那么地熟悉,这感觉真好。
丛里面出来以后,我从来没有和任何人提起过这个奇怪的山洞,其实即使说了估计也没人会相信我,只会让人觉得我发疯了吧。而我也给了自己一个很勉强的解释:那些椰树类似海市蜃楼,通过某种奇特的光学作用投射到了山洞里面,所以才看得见摸不着。至于为什么海市蜃楼会出现在一个封闭的空间里之类的细节问题,我就没多想了,我怕自己也给不出合理的解释,反而徒增烦恼。

也许是我内心的好奇心驱使着我,也许这就是鬼使神差。反正,现在的我又一次怀着忐忑不安的心情,站在了这个大厅面前。
而这里已经看不到之前的那片椰树林了,取而代之的是一片沙滩。
对,你没看错,是一片金黄色、软绵绵的沙滩。
其实山洞还在,我也还在山洞的大厅里,但稍远处就是那片沙滩。给人的感觉就好像山洞的大厅里嵌入里一个巨大的、占满整个大厅的显示器,而那片沙滩就是显示器里播放着的动态图像。但我的大脑马上就否定了这个“显示器假说”,因为即使这是个视网膜屏的显示器,即使可以做到无限大的分辨率,也不可能做到如此逼真的裸眼3D效果——我能看到沙滩稍远处微微的海浪一层层地冲刷着沙滩,能感受到海风拂面的那种舒服的感觉,甚至能闻到咸湿的海水的气息。
最重要的是,沙滩上还放着两张躺椅,上面分别躺着一男一女两个“人”。男的身材魁梧,肌肉健硕,可以说是棱角分明,国字脸上分布着端正的五官,很是帅气。女子很年轻,有点微胖,但整体身材也是极好的,该凸的地方凸、该翘的地方翘,皮肤白皙而光滑,留着一头飘逸的长发。他们都一丝不挂地躺在躺椅上晒着日光浴——没错,这个藏在山洞里的沙滩确实还有一个明媚的太阳。
也许他们是感觉到我走近了,原本头朝着我这个方向平躺着的两个人,都侧身转过头来看了看我。虽然他们脸上都带着笑容,这妹子的笑容还很甜美。但我还是有点被他们吓到了,因为他们侧身以后,我就看到了他们有个明显不同于人类的地方:他们的背后都有一对翅膀——并不是鸟类那种带有羽毛的翅膀,否则我会以为自己见到了天使——而是类似芭蕉树叶子的一对绿色的、薄得有点半透明的翅膀,这翅膀的面积也不算太大,收起来之后不会比他们的身体更宽了,我很难想象这么一对薄薄的小翅膀能让这个体型的他们飞起来。
似乎是为了打消我的疑虑,这个妹子就真的轻轻扇动翅膀,飞了起来。她拍打翅膀的频率很慢,感觉很轻松,完全不费劲地就悬停在了不到一人高的低空中。
我正在纳闷,这不符合物理学规律啊,这么小的翅膀慢慢地扇着,怎么能提供足够的力来支撑妹子的重量呢?不科学!
“你好!”,男的说话了,打断了我自顾自的思考。
这时我才意识到自己多少有点不够礼貌。忙回道:
“你好。。你好,我有打扰到你们吗?”
“不碍事,我们有的是时间,而且我们在这此处休息的目的之一本来也是在等你。”妹子回答道,她的声音很软也很好听。
“等。。。等我?”
看着我丈二和尚摸不着头脑的样子,妹子忍不住笑出声来,说:“是啊,请帮忙在我们的旅行册上签个名吧!”
看到我露出了更加疑惑的表情,男的也忍不住笑了。开始解释起来:“我们是来自大麦哲伦星系,WOH G64恒星的星际旅行者,在过去几年时间里,已经去过5个星系的几百颗恒星旅行了。每到一颗恒星,如果那颗恒星系里存在高等智慧生命,有自己的文字,我们就会收集一个当地文明的“签名”以做纪念,至今也已经收集了十几个签名了吧,最近在银河系边缘的猎户旋臂区域闲逛时,发现这个叫做太阳系的地方疑似有智慧生命存在,于是就来碰碰运气,结果果然没让我们失望。”
“是啊!”妹子接过话茬,继续说道:“这个叫地球的行星实在是太美了!这里有高山、有大海,有森林、有草原,还有无数种类的动物和植物,显得生机勃勃,一切都是这么的和谐美好,我们都不想回去了,哈哈!”
看我露出了会心的笑容,妹子似乎突然想起了正事,说:“你等我一下,我去拿下旅行册!”
说完轻轻扇动翅膀,自顾自地飞到了不远处的一个奇怪的篷子边上。
这时我才注意到原来那里还存在着这么一个奇怪的篷子,粗看上去,就像一个不起眼的大帐篷,篷布甚至显得有点破旧,内部似乎用六根柱子支撑着,外观呈现出六边形。但仔细看,就会发现着篷子很有“科技感”,帐篷的门并不是一个简单的布帘子,而是有一个“摄像头”,似乎能识别门口站着的是不是主人。帐篷的各处还分布着各种指示灯,时不时地闪烁着。
妹子似乎很轻盈,不一会儿就降落在了帐篷的门口,她收起翅膀的同时,门自动打开了。她转身就进去,才一会儿,就拿到了她说的旅行册,又轻盈地飞了回来。
我心里暗暗地想,她会拿出什么高科技的旅行册过来给我见识见识呢?但没想到的是,拿过来的真的只是一个旅行册而已,我几乎能肯定那是一本普通的纸做的册子,即使放在夜市的地摊里,也不会显得太突兀。上面贴的也都是地球上的美丽风景照,当然还有两位外星人的各种姿势的自拍照,我终于知道自拍已经不是地球人的专利了。
妹子走到我跟前,打开一页,递给我看。我很自然地伸手去接,结果奇怪的事情再次发生了。我的手穿过了那本册子,根本没有感觉到有任何交互。妹子和她的旅行册虽然近在眼前,但似乎又和我处于完全没有交集的两个世界。
这时,她不知道从哪里拿出了一支笔,朝我递了过来。看上去着就是很普通的一支钢笔,这倒是和那旅行册很相配。但仔细看,马上能看出不简单的地方,这支笔的全身覆盖着一层不一样的金光——并不像是笔本身发出的光,而像是有人刻意想把笔丛周遭的环境中突显出来而做的标记,就像是某些游戏里的可交互的宝物会有的标记一样。
看着妹子甜美的笑容里完全没有恶意,我也就放心了忐忑的内心,伸手去接这支笔。这次一切正常——倒使我感到不习惯了——我能感受到笔正常的重量和温度,并且拿在了我的手上,虽然笔还是闪着那奇怪的金光。
在妹子的示意下,我拿起了这支笔,在她拿着的旅行册上签下了自己的名字——刘顺。拿着这支普通又特殊的笔,签字的过程倒是很顺利,笔尖碰到旅行册的纸张时,有正常的力反馈,留下的笔迹也清晰可见。
签完后,妹子说道:“谢谢你,地球人的文字真好看,尤其是这片地区流行的文字,就像艺术品一样!”
看着妹子露出满意的笑容,我也开心地。。。醒了。。。这真是一个不错的梦!

——以上源自一个我做的梦,情节略有增改。

记一下这个bash的http server

很久之前找到的小脚本,比较方便,可以基于此,自己在里面写各种逻辑,比如之前我是给改成做30x的跳转(根据输出参数,跳转到不同url),还是很合适的。
最近又想用,发现几乎找不到了,很多收藏的链接都已经失效了,于是觉得还是应该在自己能把控的地方记录下,把代码帖这个里吧,这个的效果和 python 的 SimpleHTTPServer 有点类似。
注意,这个脚本没有任何安全性可言,可以通过..访问到上级目录,也可能通过``执行任意指令,所以最好别长期开着。这只是个例子,处理逻辑自己改。

#!/usr/bin/env bash
while true
do
  f="/tmp/out$RANDOM"
  mkfifo "$f"
  trap "rm -f $f" EXIT
  cat "$f" | nc -4l 8000 > >(
    export REQUEST=
    while read -r line
    do
      line=$(echo "$line" | tr -d '\r\n')
      echo $line
      if echo "$line" | grep -qE '^GET /' ; then
        REQUEST=$(echo "$line" | cut -d ' ' -f2)
      elif [ -z "$line" ] ; then
        ( #这里面写自己的处理逻辑,这是一个很丑的例子。
        if [ "$REQUEST" == "/" ] ; then
          Message_Body="<!DOCTYPE html><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8></head><body>
`find . -type f -exec ls -l {} \; | awk '{print $1,$2,$3,$4,$5,$6,$7,$8,"<a href=\\"/" $9 "\\">" $9 "</a><br>"}'`</body></html>"
        else
          Message_Body="`cat "./$REQUEST"`"
        fi
        echo -en "HTTP/1.0 200 OK\nContent-Length: ${#Message_Body}\n\n$Message_Body"
        ) > "$f"
     fi
    done
  )
  rm -f "$f"
  echo done, next request.
done

另外,也可以看看几年前的这篇

找回丢失的磁盘空间

经常接触linux,尤其是多人共用的服务器上的linux的朋友,也许会经常遇到这样的问题:
收到一个磁盘告警,说某某分区已经满了,然后登录服务器 df 一看,发现磁盘确实快满了,然后你就想找到具体是哪个目录满了,于是 du -s * 一看,却发现所有子目录的大小总和却和df显示的总已使用磁盘空间对不上,有时候甚至还相差很多,于是就纳闷了:我的磁盘空间去哪了呢?

这里就列一下我所知的3种情况:

  1. 隐藏文件
  2. linux系统把文件名以.(点号)开头的文件视为隐藏文件,而类似bash里*这样的操作符是不会匹配隐藏文件的,所以如果根目录下有个较大的隐藏文件的话,是不会被du -sh * 统计到的,解决办法就是: du -sh .[^.]*

  3. 非空目录被mount
  4. 一般挂载其他分区的时候都是建议mount到一个空目录的,那么如果mount到一个非空的目录,情况会怎么样呢?比如/mnt目录本来里面是有文件的,然后执行了sudo mount /dev/sda6 /mnt。其实这个mount命令完全能正常执行,被mount的分区也能正常访问,只是原先在/mnt里的文件,现在已经访问不到了,包括du也看不到大小了,但是磁盘空间却还是被占着,因为如果你 umount /mnt 以后,原来的文件都还会回来的。

  5. 空洞文件
  6. 一个文件的大小和所占磁盘空间也不一定完全一致,比如某个程序一直打开着一个叫log的文件在写,而中间有人用 > log 命令清除了log的内容,就会产生这样的文件。这里有这种文件的介绍。

上面3种是我所知的,应该还有其他情况,欢迎留言补充。

用RG100A实现ADSL拨号

最近又搬家了,需要重新办理宽带。问了下电信和网通的价格,虽然华数网通便宜很多,但是那句“一分钱,一分货”还真是一点都没错,之前用过才知道网通不是一般的垃圾,详见我以前的牢骚,所以还是办理了电信宽带。
这电信的入户方式和网通不一样,是电话线入户的,也就是说局端接过来的是一个RJ11的水晶头,然后电信会给一个modem,一般的上网方式就是在modem后面接一个无线路由,再用路由拨号。
但是这样显然不够方便,因为我的路由器是淘宝上淘的RG100A-AA,上面是有RJ11接口的,如果能用路由器直接拨号,就可以抛开电信给的modem了,这样会环保很多(至少modem的电源就不需要了)。
然而,我的路由器默认刷的是OpenWRT的固件,这固件是完全开源的,功能非常强大,什么电驴、BT、samba、FTP、print server统统支持,但是唯独不支持adsl拨号。。。查其原因,据说是BCM系列芯片的adsl驱动是dlink享有版权的,并且不开源。想要用adsl功能必须给路由器刷上基于dlink的固件。
了解到这个信息以后,就开始搜索靠谱的dlink固件,最后我用的是这里下载(需注册)的,这个版本有web界面(英文)、有ssh。基本就可以玩了。
下载后在原来的OpenWRT的web界面里直接上传文件,再重启就刷好固件了,这步真是超乎想象的简单。
再次登录,就是dlink的界面了,默认的用户名和密码都是admin,进去以后,就可以进行一堆设置了,诸如wifi的ssid、密码之类的,都是大同小异,唯一值得一提的是ADSL拨号的设置:
要先在’Advanced Setup’里选择’Layer2 Interface’,就是OSI7层模型里的第二层了,下面有个’ATM Interface’,需要add一条记录,add的时候,会让你填两个数值,就是 VPI 和 VCI ,这两个值各地的运营商都会不一样,比如我这里是杭州余杭电信,这两个值是8/35,具体的值可以到网上查或者是打10000询问电信(不知道电信会不会告诉你)。关于ATM层的更多介绍详见这里
‘ATM Interface’ 设置好以后,就可以设置’WAN Service’了,这里需要选择刚刚设置好的ATM设备,比如我这是 ATM0/0_8_35 ,然后下一步就是填个账号和密码之类的,保存就会自动拨上ADSL了,整个过程还是蛮有趣的,还可以顺便学习一下底层的网络知识。

另外,据说已经有人把dlink的adsl模块二进制地移植到了OpenWRT了,并且已经可用了,说不定哪天我就回OpenWRT了,哈哈。

一个dump DVD到mp4的脚本

注意:此脚本只是一个对我来说刚刚够用的脚本,并不是一个通用的方案,如果你的源DVD里有多语言、多字幕之类的,很可能需要修改参数才能正常运行,另外输出文件的码率、画面长宽、声音采样率等,也需要按实际情况修改。

给儿子买了12张巧虎的DVD,但是这年头,已经很少见DVD播放器了,电视机都是直接插U盘的,所以打算把DVD里的内容dump到U盘里(mp4格式),再进行播放。我的盘是按故事分段的,所以我也按段分成不同的mp4文件,一个盘的内容放在一个目录里。

用到的几个命令:

  • lsdvd命令可以取得DVD的标题、语言、字幕、分段等信息。
  • mencoder是个强大得一塌糊涂的视频/音频编码工具。
  • eject命令可以弹出光盘,放在脚本最后最合适了。

上脚本:

#!/bin/sh
 
DIR="/media/sda1/qiaohu"
DVD=`lsdvd`
title="`echo "$DVD" | grep "^Disc Title:" | cut -d ":" -f2-`"
title=${title:1}
chapters="`echo "$DVD" | grep "^Title" | awk -F"[ ,]+" '{print $6}'`"
echo "$title | $chapters"
T="$DIR/$title"
if [ -d "$T" ] ; then
	i=1
	while [ -d "$T$i" ] ; do
		((i++))
	done
	T="$T$i"
fi
mkdir "$T"
i=1
while [ $i -le $chapters ] ; do
	echo $T/$i.mp4
	mencoder -of lavf -lavfopts format=mp4 -oac lavc -ovc lavc -lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:vbitrate=800:acodec=libfaac:abitrate=96 -af lavcresample=48000 -vf dsize=720:540:0,scale=0:0,expand=720:540,harddup -ofps 29.970 -srate 48000 -o "$T/$i.mp4" dvd://1 -chapter $i-$i
	((i++))
done
 
eject

突然又觉得这事儿挺折腾的,呵呵,而且不知道这样做(自己dump、自己看)算不算侵犯版权呢?

mysql主备部署笔记

本文说的mysql主备是指单向、异步的数据复制。可以是一个主、多个备。
这样做的好处显而易见:有利于健壮性、速度和系统管理。备用数据库可以做为只读查询和备份的机器,减轻主用数据库的负担。

实施前提:
主用数据库的配置里至少有:

[mysqld]
log-bin=mysql-bin
server-id=1

建议主备的数据库版本一致。

我所知道的最简单的实施方式(不需要停主库,甚至不需要长时间地禁止主库写入):

主库操作:
在主库里建一个复制用的用户:

grant replication slave on *.* TO 'replication'@'备库地址' identified by 'replication';

导出主库的数据,并记下当然日志文件和偏移:

mysqldump --master-data=2 --single-transaction -uroot -p --all-databases >dumpfile

这里是把数据以SQL的形式导出,并记下导出瞬间的日志文件和偏移(得益于--master-data=2参数),出来的dumpfile的前面会有一行类似以下的注释信息,就是文件名和偏移值了:

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=1061553673;

对于这步,网络上一般采用的方法为:

FLUSH TABLES WITH READ LOCK--先把主库设置成只读,然后导出SQL或者直接复制数据文件
SHOW MASTER STATUS; --记下日志文件和偏移
UNLOCK TABLES;  --恢复主库写入

这样,至少在复制数据的那段时间,主库是不可提供服务的。

备库操作:
复制主库的/etc/my.cnfdumpfile
把主库配置里的 server-id 改成2(或者3、4,多个备库保存互不相同),再加上

relay-log = slave-relay.log 
relay-log-index = slave-relay-log.index

导入数据:

 mysql <dumpfile

进入mysql命令行执行:

SLAVE STOP;
CHANGE MASTER TO
MASTER_HOST='主库地址',
MASTER_PORT=3306,
MASTER_USER='replication',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.000011',
MASTER_LOG_POS=1061553673;
SLAVE START;

然后,就搞定了,可以在备库执行

SHOW PROCESSLIST;

查看同步的状态,如果此命令的输出里有两个“system user”的进程,并且Command都是“Connect”的话,就差不多OK了,此时,任何对主库的修改,都能准实时地从备库里查询出来。

参考文章:mysql官方中文手册

IPv6路由错误引起的怪异问题

我那Ubuntu源服务器(u.srt.cn),最近出现了一些很诡异的错误。
比如:之前设置的crontab同步linux.deepin.org的iso镜像,已经有一段时间没有成功过了,手工执行rsync,却发现连的似乎是自己,因为banner都出来“Thanks for using SRT ubuntu mirror.”了,但是ping linux.deepin.org 却又能得到正确的结果。
再比如之前我设置了用公钥可以ssh登录另外一台机器,但是现在却提示我输入密码。
排查了许久之后,发现了一个问题,很多(但不是全部)公网的域名虽然ping的时候对应了正确的ip,但是正在使用(比如上面的rsync或ssh)的时候,好像都指到本地了。
再后来,无意之中,发现用ping6 去ping那些有问题的域名,返回的都是 localhost(::1),于是终于知道怎么回事了:系统用IPv6去访问那些域名了,而那些域名的IPv6解析不正确。
为了验证这点,只需要把系统的IPv6彻底禁用再试试就成了,但是服务器也是ubuntu,而ubuntu最新的版本都已经把IPv6编译进内核了,不能通过rmmod来禁用IPv6了,要完全禁用需要修改grub的配置,给内核传参数才行(方法见这里)。
这显然太麻烦了,其实暂时禁用一下还是有方便的办法的,就是这样:

echo 1 | sudo tee /proc/sys/net/ipv6/conf/all/disable_ipv6

执行完以后,可以执行

ip a | grep inet6

来确认已经禁用成功了,如果这命令没有输出就OK了。
然后现在再用ping6的话,会提示connect: Network is unreachable
再去试试之前的rsync和ssh,果然都正常了。

现在我担心的是:IPv4地址不都已经枯竭了吗?接下来该怎么办呢?

e-file 更新到 20110209

网友MaskRay指出,之前版本的e-file在某些情况下,搜索结果会显示错误的HOMEPAGE信息。
并给我发来了一个patch。
我验证了一下,果然是这样,于是更新了一下,并把gentoo china overlay里的版本也一并更新了。不过portagefilelist.de自己做了一个包(app-portage/pfl)已经在portage里了,里面就包含了这个e-file,所以我在考虑是不是要删除overlay里的版本。。。恩,先mask掉好了,用overlay的同学可能需要自己unmask一下了,或者直接从这里下载也成。

哦,对了,非常感谢MaskRay。