rss3介绍

前言 互联网最早由Tim Berners-Lee爵士发明。互联网从一开始设计的时候就是去中心化的,任何人都可以创建一个自己的站点。但是现有互联网的演化结果并不是一个去中心化的互联网,在马太效应的作用下,互联网的巨头公司占据了人们的大部分流量,同时也控制了大部分用户的数据。国内的互联网在移动设备崛起之前还算相对开放,但是随后就变成了一个个信息孤岛和围墙花园。国外的情况可能也没有显得多好,facebook,Google ,Amazon等这些大公司也建立了大量的数据中心,对大众提供服务,同时也把数据存储在其服务器上。互联网正一步步远离其设计的初衷。 从经济和成本的角度来看,这一切似乎是不可避免的。不是每个人都有能力、精力和成本来维护自己的服务,演化的结果往往是留下了一些寡头。 但是一直以来都不乏新的尝试,试图创建一个更加去中心化、用户能真正拥有自己数据的“new internet”。 下面是rss的介绍,以及在其基础上发展起来的rss3 RSS RSS(全称是 Really Simple Syndication 或 Rich Site Summary)是一种信息分发的格式,它允许用户订阅他们感兴趣的网站,例如新闻网站、博客和其他在线内容提供者。订阅后,用户可以通过RSS阅读器或聚合工具自动接收更新,而无需直接访问原始网站。 简单来说,RSS就像一份订阅的杂志,但是它是电子形式的。你订阅你喜欢的杂志(网站),然后每当有新内容发布时,这些内容就会被送到你的’电子邮箱’(RSS阅读器)里,允许你快速浏览标题和摘要,并选择你感兴趣的内容进行阅读。 使用RSS有几个好处: 节约时间:你不需要访问每个网站来查看是否有新内容。 保持组织:所有订阅的内容都在一个地方,易于管理。 保持最新:一旦网站发布新内容,你会立即得到通知。 RSS通过一个叫做"RSS Feed"的特殊文件提供内容。这个文件包含网站最新内容的标题、摘要和链接,通常是XML格式。用户需要使用RSS阅读器来阅读这些feeds,读器会定时检查并更新你订阅的feeds。 RSS3 RSS3网络的架构设计为支持开放网络的去中心化信息层,它主要由以下几个核心部分组成: 数据子层(Data Sublayer, DSL): 功能:负责索引、转换、存储、传播和消费开放信息(OI)。 组件: RSS3节点(Node):这些节点独立运作,负责索引、转换和存储信息,并最终向用户提供服务。 全球索引器(Global Indexer, GI):作为负载均衡器和查询路由器的角色,确保数据子层的健壮性和可靠性,同时监控节点的质量并确保服务质量。 RSS3协议:通过一套统一的数据结构实现开放信息的互操作性,这使得在不同的数据源之间建立网络无关的应用成为可能。 价值子层(Value Sublayer, VSL): 技术基础:基于以太坊的Layer 2解决方案,使用Celestia作为数据可用性层,以优化处理大量微交易的成本和效率。 功能:处理通过开放信息活动和应用程序产生的价值,并建立健康的所有权经济。 $RSS3通证:作为网络的原生通证,用于支付燃料费、请求费、节点运营费等。 网络奖励和激励机制: 节点运营:节点操作者通过运行RSS3节点获得$RSS3作为奖励。 质押和信任:网络参与者可以通过质押$RSS3到普通节点的质押池(Staking Pool)或公共利益节点的公共利益池(Public Good Pool)来提高节点的信任度和可靠性。 激励池:网络通过操作池(Operation Pool)、质押池和公共利益池分配奖励,以激励网络参与和维护。 治理和安全机制: 可靠性评分(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或者内存非常高的占用,但是执行速度很慢。 webui 可以使用一些webui 来搭建类似chatGPT的UI来与LLM聊天 https://github.com/sugarforever/chat-ollama 或者 https://useanything.com/ 中文回答 LLaMA3的回复经常是默认英语,如果每次都需要用prompt来指定回复比较麻烦。Ollama可以提供创建新模型的方式,基于LLaMA创建自己的模型,这时候可以把System提示信息写入,参考网上的配置,写入Modelfile。 from llama3 PARAMETER temperature 1 PARAMETER num_ctx 6000 PARAMETER top_k 50 PARAMETER top_p 0.95 SYSTEM """ 尽你的最大可能和能力回答用户的问题。不要重复回答问题。不要说车轱辘话。语言要通顺流畅。不要出现刚说一句话,过一会又重复一遍的愚蠢行为。 RULES: - Be precise, do not reply emoji. - Always response in Simplified Chinese, not English. or Grandma will be very angry. """ 愤怒的奶奶也太有意思了 执行下面的命令 ollama create myllama3 -f Modelfile 可以运行新的模型了 ollama run myllama3 体验 硬件和技术的发展都非常快速,相信有一天云端模型的智能程度会非常高,但是本地模型的算力也是足够支撑一些日常场景的使用,而且隐私性和经济性都会越来越好,因为硬件和软件都是逐步提升的。 从2022年底GPT大火之后,2024年,本地的llama3已经是号称可以打败chatGPT3.

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工具是怎么使用的吧 安装go的yacc工具 go install golang.org/x/tools/cmd/goyacc@latest 假如你有个叫作gopher.y的文件定义了一个新语言的语法。现在我需要使用yacc读取这个语法文件生成新语言的语法解析代码,我们可以执行如下命令: goyacc -o gopher.go -p parser gopher.y 其中-o是输出文件的文件名, parser是包名 使用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可以自动给整形常量的合集生成字符串方法。 安装stringer go install golang.

成长的捷径

希望可以帮助到需要的人。 成长的捷径 ● 入职伊始谦逊的态度是好的,但不要把“我是新人”作为心理安全线 ● 写一篇技术博客大概需要两周左右,但可能是最快的成长方式 ● 一定要读两本书:金字塔原理、高效能人士的七个习惯(这本书名字像成功学,实际讲的是如何塑造性格) ● 多问是什么、为什么,追本溯源把问题解决掉,试图绕过的问题永远会在下个路口等着你 ● 不要沉迷于忙碌带来的虚假安全感中,目标的确定和追逐才是最真实的安全 ● 不用过于计较一时的得失,在公平的环境中,吃亏是福不是鸡汤 ● 思维和技能不要受限于前端、后端、测试等角色,把自己定位成业务域问题的终结者 ● 好奇和热爱是成长最大的捷径,长期主义者会认同自己的工作价值,甚至要高于组织当下给的认同(KPI) 功夫在日常 ● 每行代码要代表自己当下的最高水平,你觉得无所谓的小细节,有可能就是在晋升场上杀死你的暗箭 ● 双周报不是工作日志流水账,不要被时间推着走,最起码要知道下次双周报里会有什么(小目标驱动) ● 觉得日常都是琐碎工作、不技术、给师兄打杂等,可以尝试对手头事情做一下分类,想象成每个分类都是个小格子,这些格子连起来的终点就是自己的目标,这样每天不再是机械的做需求,而是有规划的填格子、为目标努力,甚至会给自己加需求,因为自己看清楚了要去哪里 ● 日常的言行举止是能力的显微镜,大部分人可能意识不到,自己的强大和虚弱是那么的明显,不要无谓的试图掩盖,更不存在蒙混过关 最后一条大概意思就是有时候我们会在意自己在聚光灯下(述职、晋升、周报、汇报等)的表现,以为大家会根据这个评价自己。实际上日常是怎么完成业务需求、帮助身边同学、创造价值的,才是大家评价自己的依据,而且每个人是什么样的特质,合作过三次的伙伴就可以精准评价,在聚光灯下的表演只能骗自己 学会被管理 上级、主管是泛指,开发对口的 PD 主管等也在范围内 ● 不要传播负面情绪,不要总是抱怨 ● 对上级不卑不亢更容易获得尊重,但不要当众反驳对方观点,分歧私下沟通 ● 好好做向上管理,尤其是对齐预期,沟通绩效出现 Surprise 双方其实都有责任,但倒霉的是自己 ● 尽量站在主管角度想问题 ○ 这样能理解很多过去感觉匪夷所思的决策 ○ 不要在意谁执行、功劳是谁的等,为团队分忧赢得主管信任的重要性远远高于这些 ○ 不要把这个原则理解为唯上,这种最让人不齿 思维转换 ● 定义问题是个高阶能力,尽早形成 发现问题->定义问题->解决问题->消灭问题 的思维闭环(by @玉伯) ● 定事情价值导向,做事情结果导向,讲事情问题导向(by 马俊峰) ● 讲不清楚,大概率不是因为自己是实干型,而是没想清楚,在晋升场更加明显 ● 当一个人擅长解决某一场景的问题的时候,时间越久也许越离不开这个场景(被人贴上一个标签很难,撕掉一个标签更难) 要栓住情绪 ● 学会控制情绪,没人会认真听一个愤怒的人在说什么 ● 再委屈、再愤怒也要保持理智,不要让自己成为需要被哄着的那种人 ● 足够自信的人才会坦率的承认自己的问题,很多时候我们被激怒了,只是因为对方指出了自己藏在深处的自卑 ● 伤害我们最深的既不是别人的所作所为,也不是自己犯的错误,而是我们对错误的回应

Chez Scheme Debug

下面是我之前翻译的Chez Scheme 的Debug文档 第三章 调试 Chez Scheme 有几个用于调试的功能。除了对经过完全类型检查过的运行中的代码提供错误信息之外,Chez Scheme 也支持对过程调用进行跟踪,中断任意计算,重定义异常和中断处理器,检查任意对象,包括异常的continuation 和中断。 Scheme 或 Chez 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?

Golang Trace

Go语言的trace包是一个用于追踪程序运行时信息的工具,它可以帮助开发者理解程序的运行时行为,诊断性能问题。trace包主要是通过分析程序生成的追踪文件来工作的。 runtime/trace 包含了一个强大的工具,用于理解和排查 Go 程序。它的功能允许我们生成一个时间段内每个 goroutine 的执行轨迹。通过使用 go tool trace 命令(或者优秀的开源工具 gotraceui),我们可以可视化并探索这些轨迹数据。 trace的魔力在于它能轻易揭示程序中那些以其他方式难以发现的事情。例如,一个并发瓶颈,许多 goroutine 在同一个 channel 上阻塞可能在 CPU 分析中很难看出,因为没有执行样本。但在执行trace中,执行链路的缺失将以惊人的清晰度显示出来,被阻塞的 goroutine 的堆栈追踪将迅速指向问题所在。 Go 开发者甚至可以使用任务、区域和日志来为他们的程序添加插桩,这样他们就能将自己的高层次关注点与底层执行细节相关联。 问题 不幸的是,执行trace中的丰富信息往往难以触及。历史上,与trace相关的四个大问题经常成为障碍: trace的开销很大。 trace的扩展性不好,可能变得过于庞大而难以分析。 往往不清楚何时开始trace记录以捕获特定的错误行为。 鉴于缺乏用于解析和解释执行trace的公开包,只有最具冒险精神的 gophers 能够以编程方式分析trace。 如果你在过去几年中使用过trace,你可能因为这些问题中的一个或多个而感到沮丧。但在过去的两个 Go 版本中,Golang团队在这四个领域都取得了重大进展。 降低trace成本 在 Go 1.21 之前,许多应用程序的 trace 运行时开销大约在 10–20% CPU 之间,这限制了 trace 的使用场景,不能像 CPU profiling 那样持续使用。事实证明,trace 的大部分成本都归结于 traceback。由运行时产生的许多事件都附带了堆栈追踪,这对于实际识别 goroutine 在执行关键时刻的行为是无价的。 感谢 Felix Geisendörfer 和 Nick Ripley 在优化 traceback 效率方面的工作,执行 trace 的运行时 CPU 开销已经大幅度降低,对于许多应用程序而言,现在只有 1–2%。 可扩展Trace trace 格式及其事件在设计时围绕着相对高效的发射进行,但需要工具来解析并保持 trace 全部状态。几百 MiB 的 trace 可能需要几 GiB 的 RAM 来分析!