GODOT引擎中的一些概念

Server 一个引擎内部代码组织代码概念,主要用途是用来将引擎内部一些比较独立系统组织起来。 只是一个逻辑概念,代码上没有一个框架,都是每个Server按照自己的情况去创建。 嵌入到引擎也是通过Hardcode(例如在main.cpp初始化某些Server) 一般来说每个Server都是有自己一套线程运行,跟主逻辑线程主要依赖CommandQueue(引擎提供),主线程一般只在需要的跟Server做同步(例如物理、渲染) Server本身是一个Object,可以发送信号到场景对象。 Modules和GDExtensions 两者都是C++扩展引擎的方式,主要区别是Modules是以静态方式编译进引擎,GDExtensions是动态库方式。 Modules功能更全,因为和引擎一起编译,可以访问所有的API。不过官方承诺如果发现GDExtensions实现不了的功能,可以提Ticket,尽量保证和Modules功能相近。 GDExtensions编译更快,Modules修改需要重新编译整个引擎(但是我觉得只要依赖正确,基本多不了多少时间) GDExtensions由于是二进制,可以使用其他语言开发(社区有个Rust的)。大概只需要将引擎的API导出到Rust就可以(不过引擎API的二进制兼容性如何?) iOS不支持动态库加载,GDExtensions似乎无法使用,也没法直接将GDExtensions静态连接到ios。 参考: What is GDExtension? Why does Godot use Servers and RIDs?

shane

HybridCLR浅析

周日心血来潮开了一下Unity,突然想起之前有一个据说秒天秒地秒空气的热更框架huatuo,打算找来研究一下原理。 搜索了一下,发现huatuo已经归给掌趣,作者后来自己开了一个HybridCLR。知乎、B站、Google搜了一圈,发现基本都是同样的内容,像极公关稿。说什么工作在IL2CPP层、没有虚拟机、性能牛B、开箱即用,玄乎到不行。好奇行心驱使下,看了一下源代码,大概明白工作原理: 在IL2CPP生成完Unity自身C#对应的C++代码之后,插入一些HybridCLR的C++代码,其中包含所谓的interpreter和transform。 interpreter本质就是一个虚拟机,用来执行HiOpcode。 transform就是用来做IL->HiOpCode转译 interpreter传宣是register based,但是代码看来就是stack based。不知道作者是否有商业版本的实现 HiOpCode就是基于Unity的一个特化指令集。只要指令集命中的执行效率肯定高,除此之外通用性能可见的不太理想。另外虚拟机的指令集是变长的,想要优化效率估计有困难。可以简单类比CISC和RISC的区别。 相比现有脚本解决方案,绕一层C#再到引擎接口,HybridCLR直接通过interpreter调用IL2CPP::vm接口,确实性能会有优势。还是那个前提,只要你的代码能命中特化的opcode。 这个方案的本质还是Unity不提供纯C++库的调用方式。IL2CPP::vm这个胶水层虽然比直接C#要薄,但是相对纯C++接口还是太厚了。如果Unity自己能提供一层C/C++的封装(类似fmod那样),对脚本接入就不用这么纠结。 综上所述,HybridCLR所获得的性能提升主要在更薄的胶水层和特化的OpCode;相对应的通用解析性能可以预见的不高(盲猜,没有任何证据,不用杠。杠就是你对)。对于纯C#的项目,想获得一些热更修复的能力,可以考虑。如果是想达项目的脚本化,HybridCLR估计有难度。 ILRuntime的原理其实也类似,只是我记得最早ILRuntime是直接运行IL OpCode的。今天看了,好像也用了类似的方式。

shane

笔记整理、DataHoarder和NAS

笔记整理 最近在将笔记从Wiz转移Obsidian。突然发现以前从有道时代开始收集的“笔记”基本很多都是无用的。在这里给自己总结一下,避免新的仓库出现同样的问题: 第一个是Maybe Later类型。在Wiz的仓库类型的笔记有很多属于这种,整篇文章其实有一些观点是有意思,想深入去挖掘一下,然后就正个文章就保存下来。实际这篇文章可以通过提取一些想研究的关键字,然后放入Inbox、Draft里面。让后面的自己的去判断有没有研究的价值。对于这种闪光类的想法,其实很多时候都经不住时间的考验,很快就会放弃了。毕竟人的时间的是有限的,在没有对比的时候可能觉得很有趣,但是在一堆想法里面获取这个东西看起来就没有那么多的研究价值。 第二个是操作手册类型的笔记。这类型的笔记基本是教你在XXX环境中处理YYY事情的步骤。这类型的笔记问题有三点: 很容易过时。例如我的笔记里曾经有一篇《FreeBSD 9.2下搭建Xorg环境》,这是一篇大概是14年的笔记本。现在FreeBSD都到13了,而且X环境也变成了Wayland,这个摘录就显得毫无意义。 很容获得。现在的互联网已经是一个巨大的数据库,而且在Google等搜索引擎的帮助下,即便的是一些历史性的资料,也比较容易获得。除非你预计在一个脱机或者互联网彻底被破坏的末世环境中使用。如果在这个情况下,官方的Manual+源代码不比这种杂乱的资料有用? 很容易产生错觉。从我目前整理来看,这类笔记由于非常容易获得(一个WebCliper就可以),让自己产生一种知识库很“充裕”的错觉。这类笔记的增多很容易让自己笔记库变成一个松鼠窝。 如果真的要摘录这类型的笔记,那重复参考上面的标准:不容易过时的、不容易获得的,并且需要经过提取过而不是整页摘录的,并且融入自己笔记体系。 第三个是Awesome类笔记。这类型的笔记发散得很厉害,有点像是第一种和第二种的集合。很大程度上,我选择记录下来是因为觉得以后会有用或者作为一个提醒,提醒自己去后面去看一下。另外这类笔记基本是在Github上的仓库,有些作者保持更新,所以直接摘录下来作用不大。目前还没考虑怎么处理这种笔记,除了有一些太水的列表直接扔掉外。 关于笔记系统要怎么建立后面等Obsidian的PKM成型后再给自己的看法。 松鼠症(Data Hoarder) 在整理这些笔记的过程中,发现以前笔记的仓库也是一个松鼠窝,里面堆满各种松子。实际一个知识库(PKM)重要的是自己总结的内容,而不是网上摘录的一些文章。任何网上参考的内容,实际只需要记录一个关键字。我甚至还在WIZ笔记里面找到了某些RFC规范,我到底保存下来这些干嘛?RFC本身就是一个公开的规范,只需要一个编号、标题,就能在网上找到。回想起自己最早的Data Hoarder的行为,可能是高一的时候。当时在学VB编程,好不容易从YAHOO的网站目录上,找到一个VB源码案例网站。当时只能利用56K的MODEM下载回来本地慢慢研究,久而久之,收集的内容就多了。然后开始大学,有了2M的宽带,有了BT,有了eMule,就那种免费下载资料的感觉让人愉悦。各种电影、资料和软件,让人不舍。最初还有硬盘容量的限制,当时硬盘每GB价格还是挺贵的。后来刻录光驱大众化,这种囤积的欲望达到巅峰。在eMule/BT->刻录的循环中乐此不疲。曾经还因为感觉在光碟上写内容太麻烦,做了一套基于文本的CD内容记录系统。 NAS 大约在2014年,群晖和QNAP开始培育消费市场的NAS的时候,我也开始尝试和组装一套DIY的NAS。NAS可以是说为Data Hoarder量身订造的产品。将下载和存储二合为一,而且大容量的机械硬盘也开始普及硬盘,开始进入TB级。在拥有了NAS以后,松鼠症得到了完美的研究,将各种资料转移到NAS上。唯独刻录光碟这个事情成为了过去。直到最近整理笔记,开始反思这种收集的行为以及家用NAS的必要性。其实对于大部分来说人,刨去网络下载内容(电影、资料等)真的不需要NAS。尤其是商业公司开始将这种少数人需要使用的物品,包装成普通消费需要的物品时,事情会变得复杂起来。例如这个案例,还有一堆对RAID没有清楚认识的人。这也不能怪消费者,有多少人建QTier的时候会去看Datasheet;又有多少人直到QTier其实对家用基本是没啥作用的呢。而NAS厂商似乎没在易用性上做出过多的考虑,各种的PHOTO App、同步云盘等体验简直不要太难用。即便是从2012年到现在,经过10年的发展,APP的稳定性、易用性依然无法达到一个商用APP的标准。这里有一个视频,是我感觉作为一个普通人对NAS比较中肯的评价。菊花厂最近也出了一个NAS,似乎大家对NAS讨论又热烈起来,期望能将NAS的易用性提高一个高度。但是我对这个是比较悲观的。影音、相册这块要做出花,需要的算力不低;对于影音本身也是一个灰色地带,直接在集群处理也不太合适,而且成本很高。 对于我来说,戒掉屯资料的习惯后,其实本身需要存储的资料并不多。这个NAS坏掉以后估计我也不会再考虑再入手。

shane

对个人知识库(PKM)的一些理解

PKM PKM是Personal Knowledge Management的缩写。这个跟当时PIM(Personal Information Management)类似,核心都在Management上。 实际上对于Information,使用管理的方法是没问题的。因为信息总类都基本是固定的(联系人,日程之类的);而Knowledge的内容都是不固定的,而且是很难做到预先的层级划分。 如果你使用传统的EverNote,Joplin等工具,对知识进行树形分类你会发现怎么都分不对;最后,为了分类的正确性,而不停调整分类。 P.A.R.A.方法 这个方法我实践下来,更像是PIM的管理方法,而不是PKM。虽然我觉得,将自己感兴趣的东西和正在做的东西分成AREA和PROJECT这种方式深得我心。但实际实践下来却发现,这个方法实际上更关心AREA和PROJECT,对RESOURCES的管理方式一点没有提及。或者说Resources实际上还是按照传统的进行树形分类。所以我觉得P.A.R.A.并不是一个个人知识管理的好办法。甚至说它不是一个PKM的方法,更像一个个人OKR系统。 识别什么是Knowledge 通过整理自己的笔记(从WIZ->NOTION->OBSIDIAN->OBSIDIAN+JOPLIN)发现自己这么多年所谓的”笔记”,其实大部分都这些类型: 网上摘抄,参考之前自己写的:笔记整理、DataHoarder和NAS Maybe Later类型,感觉可能会有用,想保留下来(Tab数量已经爆棚) 操作手册类型的笔记。都是整篇内容取录下来 Awesome类笔记 自己工作中总结出来的命令(Cheatsheet之类的)方便后面翻阅 项目中的一些有用的信息之类(账号、地址) 其实上面这些都不是你自己知识,只有当你对里面的一些内容有自己的看法、总结时,才是你真正的知识。虽然这些不是你的知识,但也是属于有用的东西。我觉得可以放到Joplin上,这类内容,其实很容易就会有一个归属的,而且这种归属还特别容易分类。 Zettelkasten 前面说了树形的分类会导致不停的要调整分类,会陷入类似满足数据库范式一些悖论,整个系统因为要满足范式规范而进行复杂的表设计。正如Mongo对范式的问题给出解法:既然要满足高范式设计这么麻烦,我干脆就只用最低的范式去做这个事情。Zettelkasten就是这么个方法:既然分类这么麻烦,我索性不分类了。所有的卡片都是一样处理,放到同样的地方。这里有两个重要的点: 我先不管分类,先把想法和东西先记录下来 后面需要回头对卡片用其他方法索引起来,并且索引的过程中其他相关内容进行回溯更新 其中重点的是2:需要不停审视你的笔记、建立索引。意味着你的笔记要不停的被Review和更新,而不是躺在某个分类发臭。 至于ZKID,其实我觉得对于Obsidian或者其他支持超链接的笔记,是不太重要的。对于卢曼那个用原始卡片盒,ZKID是索引主题的关键。 References 什么是 Zettelkasten 卡片盒笔记法?

shane

二奶机搭建和Incredibuild家用配置

由于家里闲置了一块B550主板和一个趣造机箱。再将自用的电脑升级到5905X,又多个闲置3900XT,刚好可以组台二奶机。于是折腾了大半个月终于将两台机器稳定下来。一路下来坑还是挺多的,吐槽一下。 5950X蓝屏。一开始以为内存问题,毕竟是四条DDR4 3600(XMP) 16G,可能会不稳定。后面更换了内存DDR4 2400的内存,依然发现蓝屏。想走售后,不过这个CPU购于咸鱼。虽然是盒装,但是送保还挺麻烦的。后面上网查了可能是fTPM的问题,尝试着关掉,并且打开SVM。目前比较稳定,帝国4也不crash。机器目前也没有蓝屏。 内存兼容性问题。由于之前64G感觉不太够用,所以换了光威的32G 3200(XMP)*4,没想到AMD的内存管理器太渣了,开XMP直接启动不了。没办法,目前只能按照2400的JDEC设置来跑了。经过上面折腾,AMD感觉还是YES不起来啊。各种的兼容问题太闹心了。下次装机还是用Intel的吧。 Incredibuild 最近提供了一个Free License申请,不同限时的Free Trail,这个是永久免费的。可以参考这里申请。虽然只能支持2个Agent,以及最多16个核作为Helper,但目前这个情况对家用是基本够用的。也可以暂时不用折腾FastBuild,UE对IB的支持比FastBuild好很多。 由于IB的16个核是不算本地的,所以总共有32+16=48核作为编译。对于UE5.1,全新编译只用了25分钟。基本能达到在公司集群编译的水平。另外在联编的过程中,网络的占用其实只有400Mbps左右(双向),千兆网络对于IB应该不会成为瓶颈,也没没必要升级万兆网络。

shane

关于国内新能源发展的一些想法

最近看到B站有财经区UP主在讲《2024—2025年节能降碳行动方案》 大势不可逆,燃油车退出历史舞台的步伐会加快。不负责任的说,燃油车还有15-20年的寿命,然后逐步推出历史舞台,加入到博物馆行列。 电车用电成本低也随着燃油车退出舞台成为过去。以后公路的费用会由电车一起承担。 强迫生产端更新,取代化石燃料,工业用电需求会增加。电价肯定会涨,居民端应该不会有太激烈的调整幅度。生产端估计会成本增加不少。虽然不是直接传过来,但是物价涨估计在所难免。 用电的话,蓄能是一个大问题。对于农村地大,有条件自己建设蓄能设备,可以减少价差。现在的蓄能都是国家在搞,利用水利。城市的话各家各户自行建设蓄能不现实。那城市的蓄能会怎么发展呢?有没可能会统一在城市建蓄能站,然后由市场驱动低价电的买卖,形成市场化呢?这个是有可能的,另外还需要考虑峰谷电价差,只有足够大才有利润;另外蓄能的效率也是很讲究的,化学蓄能达不到水利蓄能的效率。

shane

入了一台官翻的Macbook pro M1

最近把老婆的以前剩下的那台小米笔记本Air给了出去,就有理由重新买一台笔记本了。自我上一台Macbook pro 到现在估计已经有10年了吧。说来也巧,那台笔记本也是官翻的,从香港官网入手的。还记得到了之后的那天,激动的请了一天假,当天就去香港提回来。 说回这台M1笔记本,是直接从大陆的官网下单的,多了消费税,比之前的从香港官网自提稍微贵了一点。配置选了32G + 512 的14寸8核的配置。总体感觉这个配置对我来说性价比是最高的。14寸刚好有XDR屏幕,32G内存也够用。因为macbook的内存不可以扩展,只能一步到位。512G硬盘相对勉强,但是我觉得差价1.5k的差价,够买个2TSSD扩展了。而且macbook还可以插SD卡,硬盘应该够用。处理器8核和10核的数据,纸面的数据是强了20%,但综合考虑了一下续航、实际的提升以及自身需求,8核的性价比会更高。图形核心更不用说了,我要图形性能不考虑台式机? 曾经有考虑过,够买一些轻薄本(XPS之类的)或者游戏本(R9000K之类的)。游戏本那个重量和体积真的劝退;轻薄本的话,确实还可以。但是续航始终还是Mac更占优势,而且价格也没比Macbook便宜多少。 其实从官网的货源来看,这款配置的缺货程度也是最高的,可见也是比较受欢迎。可惜没在M2 Macbook出来的时候快速反应,不然还可以去购买员工优惠,还能更便宜1.5K左右。目前来看这个Macbook Pro算是不错的选择。希望之后能再陪我下个10年吧LOL。

shane

重拾专注力

重登好久不上的微博,刚好发现一个关于专注力的视频:《如何保持极致专注》。想到自己似乎很久没有关注这方面的内容,看完之后简单总结一下: 处理好压力水平。虽然说Deadline是第一生产力,这种只是表明Deadline对短期任务的一种促进力;以我自己的经验来说,过多压力会很大程度的消耗自己对长期规划的能力,使自己更倾向于短期的满足(后面有机会我再单独总结一下自己的情况)。 从被动关注变为主动。这个其实是老生长谈了,简单来说就是将主动获取短期快乐行为从被动(无意识的)修正为主动有意识的。目的并不是要禁止获取短期快乐行为,而是要自己把握主动权。 建立Not TODO List去提醒自己 建立明确的活动周期。我认为对于长期有利行为或者短期满足(自我奖励)对有用。对于长期有利的行为在制定目标和结束周期后,会对自己有明确的鼓励作用;对于短期满足的行为,设定结束时间会减少自身的“罪恶感”以及明确自己已经得到过奖赏,避免陷入无止境的奖励(重复刷视频网站、信息网站的推荐流) 设定任务清单和优先级排序。 最近我已经将大部分的笔记内容从Notion和WIZ迁移到Obsidian。并开始逐步恢复时间日志等内容,接着就要开始实践上面的内容。尝试让自己回到几年前的精神和生理状态。

shane