时间的本质

Stephen Wolfram 关于时间的本质的看法。Stephen Wolfram是计算机和物理的跨界学者。发明了 MathematicaWolfram|Alpha  and the Wolfram Language

斯蒂芬·沃尔夫拉姆在其文章《时间的本质》中探讨了时间的计算视角,提出了时间不仅是一个数学坐标,而是宇宙中计算进程的反映。他认为,时间的进展可以被视为宇宙通过逐步应用计算规则而进行的计算过程

主要观点摘要:

  1. 计算视角
    • 时间被定义为宇宙中状态的逐步演变,这种演变是通过计算规则的应用实现的。
    • 传统的时间坐标概念无法揭示时间的内在本质,而计算不可约性(computational irreducibility)则表明,预测系统未来状态的唯一方法是逐步计算每一步。
  2. 观察者的角色
    • 观察者的计算能力有限,无法预知未来,只能随着系统的演变逐步体验时间的流逝。
    • 这种计算不可约性使得我们只能"逐步展开"未来,而无法一次性"看到"未来。
  3. 时间的单向性
    • 我们的时间体验通常是单向的,过去更容易被记住,而预测未来则更具挑战性。这与热力学第二定律相关,表明系统的有序状态会向无序状态演变。
  4. 时空的本质
    • 在沃尔夫拉姆的物理学项目中,宇宙的状态由超图(hypergraph)表示,时间对应于超图的逐步重写。
    • 时间的"原子"是基本的重写事件,事件之间的因果关系构成了时间的进展。
  5. 多线程时间
    • 尽管我们体验到时间是单一的线性流动,但在更深层次上,时间实际上是多线程的,宇宙遵循多条历史路径。
    • 观察者的存在和他们的计算限制使得我们只能感知到一条一致的历史线。
  6. 时间与计算的关系
    • 时间的本质是计算规则的应用进程,计算不可约性为时间的线性流动提供了基础。
    • 观察者的计算限制使得时间的概念在不同的物理系统中保持一致。
  7. 时间的最终定义
    • 时间可以被抽象地定义为应用计算规则时的进展,这一概念独立于具体的规则或底层结构。
    • 计算不可约性和计算等价性原则使得时间的概念在不同的系统中具有普遍性。

计算视角下的时间

rss3介绍

前言

互联网最早由Tim Berners-Lee爵士发明。互联网从一开始设计的时候就是去中心化的,任何人都可以创建一个自己的站点。但是现有互联网的演化结果并不是一个去中心化的互联网,在马太效应的作用下,互联网的巨头公司占据了人们的大部分流量,同时也控制了大部分用户的数据。国内的互联网在移动设备崛起之前还算相对开放,但是随后就变成了一个个信息孤岛和围墙花园。国外的情况可能也没有显得多好,facebook,Google ,Amazon等这些大公司也建立了大量的数据中心,对大众提供服务,同时也把数据存储在其服务器上。互联网正一步步远离其设计的初衷。

从经济和成本的角度来看,这一切似乎是不可避免的。不是每个人都有能力、精力和成本来维护自己的服务,演化的结果往往是留下了一些寡头。

但是一直以来都不乏新的尝试,试图创建一个更加去中心化、用户能真正拥有自己数据的"new internet"。

下面是rss的介绍,以及在其基础上发展起来的rss3

RSS

RSS(全称是 Really Simple Syndication 或 Rich Site Summary)是一种信息分发的格式,它允许用户订阅他们感兴趣的网站,例如新闻网站、博客和其他在线内容提供者。订阅后,用户可以通过RSS阅读器或聚合工具自动接收更新,而无需直接访问原始网站。

简单来说,RSS就像一份订阅的杂志,但是它是电子形式的。你订阅你喜欢的杂志(网站),然后每当有新内容发布时,这些内容就会被送到你的’电子邮箱’(RSS阅读器)里,允许你快速浏览标题和摘要,并选择你感兴趣的内容进行阅读。

使用RSS有几个好处:

  1. 节约时间:你不需要访问每个网站来查看是否有新内容。
  2. 保持组织:所有订阅的内容都在一个地方,易于管理。
  3. 保持最新:一旦网站发布新内容,你会立即得到通知。

RSS通过一个叫做"RSS Feed"的特殊文件提供内容。这个文件包含网站最新内容的标题、摘要和链接,通常是XML格式。用户需要使用RSS阅读器来阅读这些feeds,读器会定时检查并更新你订阅的feeds。

RSS3

RSS3网络的架构设计为支持开放网络的去中心化信息层,它主要由以下几个核心部分组成:

  1. 数据子层(Data Sublayer, DSL):
    • 功能:负责索引、转换、存储、传播和消费开放信息(OI)。
    • 组件
      • RSS3节点(Node):这些节点独立运作,负责索引、转换和存储信息,并最终向用户提供服务。
      • 全球索引器(Global Indexer, GI):作为负载均衡器和查询路由器的角色,确保数据子层的健壮性和可靠性,同时监控节点的质量并确保服务质量。
    • RSS3协议:通过一套统一的数据结构实现开放信息的互操作性,这使得在不同的数据源之间建立网络无关的应用成为可能。
  2. 价值子层(Value Sublayer, VSL):
    • 技术基础:基于以太坊的Layer 2解决方案,使用Celestia作为数据可用性层,以优化处理大量微交易的成本和效率。
    • 功能:处理通过开放信息活动和应用程序产生的价值,并建立健康的所有权经济。
    • $RSS3通证:作为网络的原生通证,用于支付燃料费、请求费、节点运营费等。
  3. 网络奖励和激励机制:
    • 节点运营:节点操作者通过运行RSS3节点获得$RSS3作为奖励。
    • 质押和信任:网络参与者可以通过质押$RSS3到普通节点的质押池(Staking Pool)或公共利益节点的公共利益池(Public Good Pool)来提高节点的信任度和可靠性。
    • 激励池:网络通过操作池(Operation Pool)、质押池和公共利益池分配奖励,以激励网络参与和维护。
  4. 治理和安全机制:
    • 可靠性评分(Reliability Score):基于节点的表现(如上线时间、处理能力等)来分配请求。
    • 削减机制(Slashing Mechanism):对未能满足网络要求的节点执行削减措施,确保网络的安全和稳定性。

RSS3网络的这种架构旨在促进信息的自由流动,并支持一个去中心化的开放网络环境,其中内容创作者和消费者能够直接从其数字内容的价值中受益。通过这种架构,RSS3也为未来互联网的互联互通铺平了道路。

后记

简单来说这是集权内容平台和去中心化平台的效率之争。集权内容平台依赖的是集中带来的效率和流量,以此转化为利益,再继续优化集权内容平台,rss3的思路是构建一个松散的去中心化的网络来托管内容,做内容index,分发请求,以加密货币为基础分配利益以吸引更多的个体加入。

从最终用户的角度来看

  • 集权平台用户付出的是时间
  • rss3用户最终需要为网络的运行买单,通过加密货币的方式

从现有的大部分互联网用户的使用习惯和人性的角度来看,rss3能够实现其愿景还是很难。

v2上有一些rss3公司招聘的帖子:https://v2ex.com/t/967383 。看上去作为一家运营的公司,web3也不好做呀。

https://www.v2ex.com/t/781981

==希望 RSS3 可以帮助创造者从集权内容平台手中夺回属于自己的权利,让互联网成为该有的样子,重新培育出我们曾经看见但已经忘记了名字的那朵花。==

本地运行llama3

ollama

下载并安装ollama,https://ollama.com/

执行下面的命令

 ollama run llama3

下载需要些时间,默认的模型是8b参数,大小为4.7GB 也可以选择70b参数的模型,大小为40GB。

70B的模型需要的内存在48GB左右,在32G的Mac上没有出现cpu或者内存非常高的占用,但是执行速度很慢。

go generate

生成代码

用代码来生成代码是通用计算的一个重要属性。这个想法可能不是那么受人重视,但实际上确经常在发生。其实这基本上就是编译器的定义。go test也使用了这种设计思路:运行test的时候他会扫描一遍代码中需要被测试的内容,然后生成一段go代码来包裹这些测试代码使他能够执行起来,然后编译生成的代码并执行。只不过现代计算机运算速度非常快,用户对于这个过程没有明显的感知。

还有很多代码生成代码的例子。比如Yacc就是读取 语法描述,然后生成一个可以解析这种语法描述的代码。广义上来说所有可配置的工具都是这么执行的,读取配置,然后依据配置中的这些上下文环境,执行一个特定的逻辑。

用代码生成代码在软件工程中是一个重要的组成部分。类似yacc的生成的代码会被加入到构建流程中的会相对复杂很对。如果依赖一些外部的构建工具可能会简单些。在go 1.4之前,如果只是使用go tool 你没法获取到足够的关于go 源码的信息。

go generate

go 1.4引入了go generate的机制,可以通过扫描源代码中特殊的注解来识别要执行的命令。go generate不是go build的一部分,必须在go build之前手动执行。一开始设计的时候是用来给go package的作者使用的,而不是用户。

yacc

先看下Go的yacc工具是怎么使用的吧

  1. 安装go的yacc工具
    go install golang.org/x/tools/cmd/goyacc@latest

假如你有个叫作gopher.y的文件定义了一个新语言的语法。现在我需要使用yacc读取这个语法文件生成新语言的语法解析代码,我们可以执行如下命令:

goyacc -o gopher.go -p parser gopher.y

其中-o是输出文件的文件名, parser是包名

  1. 使用go generate 在任意的常规(非生成)go源代码文件中加入下列注解
//go:generate goyacc -o gopher.go -p parser gopher.y

注解必须以//开头,然后是go:generate。后面就是要执行的命令。 我们可以在我们的项目下使用go generate了

$ cd $GOPATH/myrepo/gopher
$ go generate
$ go build
$ go test

如果没有问题的话我们就可以使用go generate 生成的gopher.go文件来进行构建和测试了。每次语法定义有改变只要修改之后重新执行go generate就可以了。

go generate 就是go语言中的make工具,不需要使用make也可以在go生态中使用代码来生成代码。主要还是给包的开发者使用,而不是使用方。

stringer

看下另一个stringer的例子,stringer可以自动给整形常量的合集生成字符串方法。

  1. 安装stringer
    go install golang.org/x/tools/cmd/stringer@latest

假如我们有下面的定义:

成长的捷径

希望可以帮助到需要的人。

成长的捷径

● 入职伊始谦逊的态度是好的,但不要把“我是新人”作为心理安全线

● 写一篇技术博客大概需要两周左右,但可能是最快的成长方式

● 一定要读两本书:金字塔原理、高效能人士的七个习惯(这本书名字像成功学,实际讲的是如何塑造性格)

● 多问是什么、为什么,追本溯源把问题解决掉,试图绕过的问题永远会在下个路口等着你

● 不要沉迷于忙碌带来的虚假安全感中,目标的确定和追逐才是最真实的安全

● 不用过于计较一时的得失,在公平的环境中,吃亏是福不是鸡汤

● 思维和技能不要受限于前端、后端、测试等角色,把自己定位成业务域问题的终结者

● 好奇和热爱是成长最大的捷径,长期主义者会认同自己的工作价值,甚至要高于组织当下给的认同(KPI)

功夫在日常

● 每行代码要代表自己当下的最高水平,你觉得无所谓的小细节,有可能就是在晋升场上杀死你的暗箭

● 双周报不是工作日志流水账,不要被时间推着走,最起码要知道下次双周报里会有什么(小目标驱动)

● 觉得日常都是琐碎工作、不技术、给师兄打杂等,可以尝试对手头事情做一下分类,想象成每个分类都是个小格子,这些格子连起来的终点就是自己的目标,这样每天不再是机械的做需求,而是有规划的填格子、为目标努力,甚至会给自己加需求,因为自己看清楚了要去哪里

● 日常的言行举止是能力的显微镜,大部分人可能意识不到,自己的强大和虚弱是那么的明显,不要无谓的试图掩盖,更不存在蒙混过关

最后一条大概意思就是有时候我们会在意自己在聚光灯下(述职、晋升、周报、汇报等)的表现,以为大家会根据这个评价自己。实际上日常是怎么完成业务需求、帮助身边同学、创造价值的,才是大家评价自己的依据,而且每个人是什么样的特质,合作过三次的伙伴就可以精准评价,在聚光灯下的表演只能骗自己

学会被管理

上级、主管是泛指,开发对口的 PD 主管等也在范围内

● 不要传播负面情绪,不要总是抱怨

● 对上级不卑不亢更容易获得尊重,但不要当众反驳对方观点,分歧私下沟通

● 好好做向上管理,尤其是对齐预期,沟通绩效出现 Surprise 双方其实都有责任,但倒霉的是自己

● 尽量站在主管角度想问题

○ 这样能理解很多过去感觉匪夷所思的决策

○ 不要在意谁执行、功劳是谁的等,为团队分忧赢得主管信任的重要性远远高于这些

○ 不要把这个原则理解为唯上,这种最让人不齿

思维转换

● 定义问题是个高阶能力,尽早形成 发现问题->定义问题->解决问题->消灭问题 的思维闭环(by @玉伯)

● 定事情价值导向,做事情结果导向,讲事情问题导向(by 马俊峰)

● 讲不清楚,大概率不是因为自己是实干型,而是没想清楚,在晋升场更加明显

● 当一个人擅长解决某一场景的问题的时候,时间越久也许越离不开这个场景(被人贴上一个标签很难,撕掉一个标签更难)

要栓住情绪

● 学会控制情绪,没人会认真听一个愤怒的人在说什么

● 再委屈、再愤怒也要保持理智,不要让自己成为需要被哄着的那种人

● 足够自信的人才会坦率的承认自己的问题,很多时候我们被激怒了,只是因为对方指出了自己藏在深处的自卑

● 伤害我们最深的既不是别人的所作所为,也不是自己犯的错误,而是我们对错误的回应

Chez Scheme Debug

下面是我之前翻译的Chez Scheme 的Debug文档


第三章 调试

Chez Scheme 有几个用于调试的功能。除了对经过完全类型检查过的运行中的代码提供错误信息之外,Chez Scheme 也支持对过程调用进行跟踪,中断任意计算,重定义异常和中断处理器,检查任意对象,包括异常的continuation 和中断。

SchemeChez Scheme 的新手程序员,甚至是有经验的 Scheme 程序员都可以参考“How to Debug Chez Scheme Programs” 这个教程。在 http://www.cs.indiana.edu/chezscheme/debug/ 可以找到 HTML 和 PDF 版本的教程。(译者注:此链接在翻译时无法打开 2019/2/1)

3.1 跟踪

跟踪是调试 Scheme 程序最有用的手段之一。 Chez Scheme 可以跟踪任何内建和用户定义的过程。跟踪库会将每一个调用过程的参数和返回值打印出来,通过紧凑的缩进机制来显示嵌套调用的深度。打印非尾递归调用的时候会增加缩进而尾递归调用不会,可以以此区分是尾递归调用还是非尾递归调用。对于嵌套大于等于 10 的调用,会在缩进处有一个括号,其中包括一个数字用于说明嵌套的深度。

这一节会涵盖跟踪过程和控制跟踪输出的机制。

  • 语法: (trace-lambda name formals body1 body2 …)
  • 返回: 一个被跟踪的过程
  • 所属库: (chezscheme)

一个 trace-lambda 表达式等价于一个 lambda 表达式加上一样的语法形式以及程序体,除了无论何时该过程被调用的时候都会向跟踪端口输出跟踪信息。这里使用 name 来命名该过程。跟踪信息会显示过程的参数以及过程的返回值,嵌套的调用会以缩进显示。

下面被跟踪的过程 half 返回整型参数除以 2 的商。

(define half
  (trace-lambda half (x)
                (cond
                 [(zero? x) 0]
                 [(odd? x) (half (- x 1))]
                 [(even? x) (+ (half (- x 1)) 1)])))

对于 (half 5) 这个返回值是 2 的调用跟踪如下