2024-08-25

聊聊黑神话

最近算跟风玩了下黑神话.
用的Geforce Now加月卡.

勉强到第二回打完沙国父子,回头准备去打地狼吧,然后20小时优先卡就被踢出去了.

难度对于个人这种没接触过的玩家来说还是挺大的.
一个Boss花个三四个小时很常见,或者说必然吧.

像第一个头目幽魂就卡了挺久.
后来学会拆分模式之后才比较轻松了的.

一个是右闪绕道身后无脑追击.
另一个主要就是立棍躲范围攻击加打断了.

这个算是后面的基本手法了.
尤其像广智和白衣秀士第二形态这种快速攻击类型,顺便广智还带近身灼伤效果的.
立棍命中然后拉距离恢复气力,剩下的就是第一章的主题不贪了.

第二种类型就是黑熊精/金池长老/沙国父子这种大体型的Boss了.
因为体型的问题翻滚和躲闪有特定方向判定,加上有范围追加,基本上就是打两下跑的模式.

后来看了下其他人的视频主要都是劈棍蓄力/棍势识破+打断辅助定身和排位的速推方式.
这个还是学不来的.

一方面就只有键盘连鼠标都没有,同时操作不了太多动作.
另一个面确实主要是操作不行.

所以基本上就是拉距离,保持心态平A的方式.
甚至连定和变身一场战斗最多也就一次,而且基本是为了保命的.

某种程度上来说,每个Boss能过都是靠的某种形式的运气.
毕竟残血对残血是常态.

尤其白衣秀士几次二阶段残血最后一击心态变急被反杀的例子.
后来也就慢慢看开了.

也算是一种体验和修行吧.
正如一回的剧情指向不贪一样.

仔细想想的话,纯理论来说,这类游戏就是某种模式识别和匹配的玩法.
给定双方的行为patten,构造一种类似出牌的克制策略.

本身的手牌数量不会太多,只是考研的反射意识/匹配速度.

纯看面板数值系统的话,是没什么太大意义的.
或者说就是没有意义.

初期尝试加点了基础属性的天赋,然后马上发现没有效果,后面就全部忽略了.
主要还是看连击技能的产生效果,也就是手牌的模式积累.

这大概也是为什么会有方便的洗天赋的功能设定.
一方面是方面及时调整策略.
一方面也是为了玩得下去,不然一失足就得重开,加上难度系数,很容易劝退.

形式上来说,把血条和打击数值换成次数也是没问题的.
内容表现上虽然有不同的视觉效果,但本质就是一个时间序列的打击节奏判定而已.

如果没有在某个特定的时间节奏节点给出特定的手牌对应,基本上结果就是再来一次的.

当然,如果没有一个直观的数值系统的话,纯靠文字和高亮描述是比较难让人有直观的手牌策略的.

像打浪里个波的时候,难度可能主要在气力消耗控制上.
所以换一套水里套装的话,难度上应该算是大大减小了的.
但看纯面板数值的话,反而是降低的.

类似的还有黑熊精.
因为缺少材料,所以防火装备还有两件没打造出来.
但实际情况是一方面有防火袈裟,一方面本身就比较多翻滚,所以反而影响不明显.

所以,理论上来说,把数值系统去掉应该也是完全不影响核心玩法的.
只是可能不太容易让人接受.
比如换成打击次数计数的话,心智模式就不一样了.

其他的像隐身之类的附加系统本质也是手牌模式的扩充.
只不过是限定的出牌规则而已.

当然,这只是理论上或者说设计上要考虑的问题.

剧情方面因为被剧透过了.
所以倒也还好.

如果从纯零背景来说的话,开头的剧情故事线其实有些一头雾水的.
就是讲完一个故事然后没什么交代就开始旅途了.
而且直到第一回完才透露出找到大圣遗物这个点.

当然,如果从已经有上下文的角度来说的话,轮回设定下这种无头无脑的结尾就显得异常合理了.

包括第二回开场一身箭躺在那里也是.
叙事上某种程度来说,是有一种割裂性和断代感的.

但是同样的,在已知故事安排的前提下,就又显得异常合理.

如果把这个看作一种有意为之的话,倒可以把黑神话定义为一种新式的digital novel.
它跟日式的gal game不同之处在于,它是以某种形式的动作格斗游戏的形态展现的.

包括优先的地图和紧密节奏的boss战.
基本上叙事是游戏的一个相当重的要素.

不然完全可以做到更开放的世界和更少的boss节点的.

目前这种就是在优先的构造叙事里,通过模式化博弈/格斗的方式把游戏体验时间拉长.

就像digital novel是靠文字/图片/分支去填充游戏时长一样.
它是靠战斗系统本身去扩充内容.

这个就不得不让人联想到前些时候某司的某新游了.

某种形式上来说,两者的共同点都是工作室对某些元素有着不同寻常的追求,想各个方式嵌入.
甚至连外部玩家市场期待程度都类似.

但结局迥异的原因就有些微妙了.

所以,有些时候所谓正确的事其实具有某种程度的运气成分/偶然性的.

毕竟正确的一面固然是自身的坚持所定义.
另一方面还得是受众的理解和接受程度了.

所幸,黑神话做了一件,也做成了一件几乎所有人都觉得正确的事.




2024-08-17

SparkSQL解析的一些问题

最近在改一个SparkSQL AST解析相关的问题.
主要做一些权限管控校验重写的事情.

之前做过一版重写,现在反馈了几个问题.
一个是类似delete from table where子句的错漏.
一个是select from where not exists in (subquery)的子查询问题.

本质上其实都是同一类的设计缺陷.
因为当时并没有预期到expression的复杂性.

一般来说,不过是DDL还是DML语句,对应的AST的基本或者说主要语法要素单元是一个称之为logical plan的东西.

比如一个select语句通常对应的AST就是一个以project为root的向下由其他不同的logical plan构成的树形结构.

如果想对这个AST做一些动作,那么一个naive的approach就是针对各种logical plan做一个类似Finite State  Machine的东西,递归地针对各个单元做应该做的事情.

这个的一个问题在于理论上需要穷举所有可能的logical plan实现,以保证完备性.

第二个是一个工程上的问题.
因为选取的extension point的问题,得到的AST并不是一个直接的从SQL lexer而成的.
而是经过经过了一定的rewrite/resolve rule得到的.

这就意味着有些logical plan可能并不会出现在extension point的context里.
也有可能因为其他组件系统的演化问题,一些logical plan可能,也可能没有被rewrite成另外的东西.

一个显著的例子就是代表着通常所说的表带logical plan.
parser出来结果一般是一个logical relation.
但是由于有着一些系统演化的问题,它可能会被rewrite成datasourcev2 relation,也就是较新的datasource接口的table.
也可能是hive relation,属于hive catalog范畴的表.

也可能还是一个logical relation,比如没有被以上两者涵盖的部分.

更麻烦的可能还是其中一些具体实现涉及到文件路径也需要audit的.

当然,这个相对于第一个问题来说,还不是太大的问题.
毕竟case by case能够解决.

完备性的问题在于像iceberg之类的会对语法做扩展的.
也就意味着会产生意料之外的logical plan的情况.

它的问题是本身也是一个case by case的工程性问题.
同时还有一些runtime问题.

因为它不一定在某个场景里有存在/注册,所以在runtime需要一些比较tricky的东西去发现和适配.

当然这些终究还是一个工程上的问题.

开头说的两个问题主要还是因为FSM的设计只考虑了logical plan.
没有考虑内嵌其中的expression.

某种形式来说,就是FSM的完备性的问题.

如果要在FSM的基础上继续改进的话,也就是需要把节点往下拆一层到expression.

这个一方面是需要更针对性的对每个logical plan做specialize.
本身就属于逐渐失控的一种表现.

更重要的在于expression还有自己要解决问题.
因为像not exist (subquery) 这种是一类特别的expression,内嵌一个logical plan,resolve的call site context是subquery.
也就是里面的column/attribute的上下文是跟subquery有关.

而像delete where condition的where子句的expression的call site根据具体情况可能是from table也可能是包含了not exists(subquery)子句的复合型expression.

所以当这里需要校验expression所最终引用的column来自哪里的时候就具有一定的复杂性了.
单纯递归的时候需要根据expression的形态去选择具体的callsite.

这样的话就更进一步地对FSM的完备性提出了挑战和不确定性.

再一个就是column的resolution本身也不是一件水到渠成的事情.
例如
select 
  column
from (
    select 
      column + 1 as column
    from (
        select ...
    )
)
这种复合expression加alias的形式.

intuitive地方式就逐层针对具体的expression去解析然后递归向下.
而这个递归的过程不可避免地会存在not exists(subquery)这类特殊型需要辨别call site的.

于是FSM不可避免地explosion化.

一个可能更实际一些的方式是折衷化的FSM.
大致来说,上面提到的复杂的case都是基于query context的.

那么只要不对query context的logical plan做FSM就想对来说不容易explosive.

而query如果只考虑解析column引用的话,实际上还是想对简单的.

因为容易证明,所有expression reference的attribute无非指向两处.
一个是最终table的attribute/column,也就是期望得到的结果.
一个是指向其他直接或者间接引用了attribute/column的expression.
还有一类就是literal/constant,可以忽略.

于是对于一个well form的AST的expression来说,如果它不是一个常量或者直接指向一个column,那么它就是一个indirect column.
这个indirect column必然递归地会指向上述三种情况之一.

那么实际上对expression的递归过程只需要关注是不是指向了column或者常量就行了.
而不需要naive地去解析一一对应关系,只需要关注存在性即可.

当然,这里还可以有其他一些考虑.

比如在build FSM和column resolve的时候能不能stream build/one pass地完成.
以及难度如何的问题.

粗略想了下, 它可能类似于与constexpr或者constan.template/meta programing的范畴.
或者是一个NP/NP hard的问题.

因为理论上来说给定一个input,它的output是deterministic的.
它一方面需要的是如何像traveling sales man的看是否存在一条这样的branching路径.
一方面是要看所需要的context是否能够on-demand的生成.

如果条件/问题放宽一些的话.
就是如何尽可能地lazy而又尽可能所需要的东西evaluate only once的问题了.


2024-08-11

标准化支出

中午和人聊一些马克思和生产力的问题.
然后提到了生产力发展的另一种说法是生产力过剩.

某种程度上来说,基于允许一部分搭便车的社会主义生产力理论确实形式上要求着一定程度的产能过剩.
因为只有这样才能够使得搭便车的成本,或者会所才能忽略掉这部分成本,形式上让生产能够继续下去.

只有从成本上来说可以忽略,或者说允许一定程度的货损/坏账的情况下还能够运营下去,才能使得这套机制称之为完善.
不然生产力发展也解决不了所谓的共产主义构想.

但一个现实的问题或者说困境在于,作为过剩行业的从业者来说,可能具体感受不会是一个舒适的范畴.
尽管从宏观上来说,每一个行业同时也是另外其他行业的产能过剩的收益.

而这种形式上的mutual benefit的代价在于不存在一个溢价或者说剩余价值.
也就是没有人能够从这种发达的生产力/产能优势当中,有一个舒适的获利条件.

甚至于在具体的微观层面更容易存在贫富差距带来的感官不适应.
毕竟每个行业的单位产出或者所谓的必要劳动时间的收益是不同的.

也就是通常所说的收入和消费不对等问题.
高收入人群的购买力和进步的工业产出使得相比其他阶层的消费比例显得更低.

尤其在工业进到纯粹品质上不构成多余溢价的时候,差距更明显.

所以似乎产能过剩是一个社会主义必然而又无法逃避的困境.

纯粹理论上来说,这个问题是容易解决的.
因为它的target很明确,就是保证每一个阶层,甚至每一个人有着相似的收入支出比例.

比如饮食或者更容易理解的住房.
每个人的成本付出与各人的收入水平挂钩.

但它的实际问题在于,这种全面计划的方式虽然可能在今天的算力条件下是可能实现的,但是它并不是一个符合直觉,或者说当下容易让人接受的一个方式.

或者更直接的说,它不是一种可以市场化规模化的形态.

针对每一个人个性化定价即使可行,但也是不能解决问题的.
因为它使得定价本身缺乏意义.

尤其如果考虑卖家收入之后作为买家开销需要re-calculate.
这基本上最终会是一个类三体的混沌问题.

资本主义或者说西方角度这个问题是有解决方式的.
也就是所谓的阶级分化.

一个简单的例子就是富人区/平民窟,或者更直接的王室等级划分.
不同的社会阶级有着不同的消费习惯和基本约束.

尤其给予社交礼仪的服饰等礼制方面的约束,使得不同阶级有着各自的standard spending.

尽管从实际效果来说,并不一定能够其他好的standardize的效果.
但至少提供了一个体系思路.

它本质上是构建一种基于道德的礼制约束去pressure peer spending.
也就是通常所说的某种形式的从众排比驱动的消费百分比均衡化.

就像中国传统的等级制度或者官服制度一样.
对于不同品阶/阶级的人有着不同的开销上下限.

但同样的,引入或者重构这种阶级制度在中国也是一个不太现实或者说不应该考虑的一个事情.

一方面说重新阶级化也并不意味着能够解决standarize spending的问题.
因为某种形式上来说,它跟universal basic income一样,本质也是计划性的.

如果它能够被接受,那么意味着其他计划性的做法也开始可以的.
而且从实际效果来说,英法也并没有能够从这方面很好的解决问题.

另一方面,重新阶级化本身也是有一些问题需要解决的.
因为它需要像当初解决市场经济在社会主义中的理论定位一样,解决分配和阶级怎么和谐共存的问题.

原教旨的马克思主义是阶级导致的分配问题.
而如果现在要解决过剩引入阶级化分配的话,多少是有些不太自洽的.

本质上来说,它要解决的不是分配本身的问题.
而是所谓的再生产的问题.

spending不standardize的问题不在于分配不合理,而在于分配之后的消费/再生产不合理.
它本质上是分配对部分人过剩,而过剩的原因是对应的消费不足.

所以要解决百分比不对等的问题需要的不是阶级本身,而是百分比如何合理化地调整的问题.

阶级的方案更像是一种计划性摊派的指标.
而且纯道德礼制的约束并不构成一个很强的guarantee.

更合适的可能是带收税性质的强制性的方式.

收入税所得说解决的只是收入总量的调节问题.
甚至形式上并没有直接对消费做约束.

加上从绝对数值上看,贫富差距的程度是的这种调节并不会对standarize spending有什么影响.
意味消费价格水平放在那里.

直接对消费品征税也是一个道理.

本质是受到价格水平约束的.
而不是跟收入剩余挂钩.

更实际的可能是针对资产持有征税.
类似房产税.
但面向的是不特定的资产形式.

因为从流向上来说,收入剩余要么进入消费,要么进入再生产.
再生产有实际的投向生产实体领域,又有投向所谓的虚拟/金融领域,以持有各种类目的资产为主要形态.

于是,选择似乎是显而易见的.

爽文

去看了好东西. 坦白说,多少是带着点挑刺的味道去的. 毕竟打着爱情神话和女性题材的气质,多多少少是热度为先了. 看完之后倒是有些新的想法. 某种程度上来说,现在的年轻人或者说声音就像小叶. 只要说点贴心的话就能哄好. 也是那种可以不用很努力了. 留在自己的舒适区避难所小圈子抱团就...