分类
I don't know 记录

无题

想要解决心中的杂乱,去读一本有用的书不失为一个好方法。

分类
I don't know 记录

但盼风雨来

我知道,我搞砸了。

鸣神の 少しとよみて さし昙り 雨も降らんか 君を留めん
鸣神の 少しとよみて 降らずとも 我は止まらん 妹し留めば

隐约雷鸣 阴霾天空 但盼风雨来 能留你在此
隐约雷鸣 阴霾天空 即使天无雨 我亦留此地

——《言の葉の庭》

分类
心理学 记录

人类行为归因

这篇文章试图对人类的行为进行简单归纳,并找出它们之间的联系。若能从这种归纳中清晰地领悟到未来方向,那就再好不过。基本上来说,人类的产生种种行为原因至少有三大类别:基本的生理需求,情感产生的情绪波动,以及对优越感的追求。

基本生理需求

生理需求是指人类的食欲、性欲和睡眠欲等与生俱来的基础生理需求。任何人都会因为这些需求没得到满足而产生相关欲望,这些欲望会控制人类自身去满足这些需求。这些基础需求是保证一个人能够存活于这个世界上必不可少的条件。同时,这些欲望也会影响人类的情感和行为模式。

基础欲望会被纵容,有时候会陷入追求类似口腹之欲的漩涡中,吃下过多的不需要的食物,导致肥胖甚至疾病。现在并不是以前物资缺乏的时候了,不再需要为了生存尽量涉入够多的能量,保证身体的健康应该要比满足口腹之欲重要。

情感产生的情绪

情绪由这个人的情感产生,情感是一种感受,这种感受是人对经历过的各种事件的总结。在未来某个相似事件发生时,情感会迅速触发情绪,这种情绪会尝试去指导人的后续反应,这可以被称作情感的处理模式。情感的处理模式就像是一段已经被编译好的代码,可以被快速执行并获取结果(产生情绪),而不需要人再次对某个事件进行深入的思考(重新编写代码)。

人在每时每刻都在接受新的信息,这些信息会不同程度的影响情感的处理模式,所以情感的处理模式是可以被修正和改进的,这种修正可以是被动的,也可以是主动的。但是,越早期形成的情感处理模式,对人的影响越大,也越难在未来做出本质上的修正。这也是为什么0-3岁形成的依恋模式会对一个人的行为影响是巨大的。

虽然,人受情绪影响的行为经过练习后是可以得到一定控制。但是,因为人与人之间的个体参数差异,情绪对人本身的影响力也不尽相同。所以练习如何去控制情绪,需要花费的时间和精力也会因人而异。每个人都需要学习如何和自身情绪打交道,要学习如何去控制它们,同时也要学习如何去正确引导它们。

对优越感的追求

阿德勒在《自卑与超越》里写到,每个人都有自卑情节,而这种自卑情节会促使人类去追求优越感,这种对于优越感的追求会在方方面面影响着人类的行为,是人类社会得以发展的基础。从开始使用火把到现在的航天科技,种种成果都不断影响和促进着人类社会的进步。

人类社会的发展依赖着前人不断积累的知识。阅读、思考和学习可以让人迅速掌握他人一生的经验,快速获取某个领域的知识,而不需要自己亲自去研究。每天进行阅读,思考以及学习,对未知事务的探索,很可能并不直接带来金钱或物质的反馈,很可能“没有用”。但是,这种“没有用”其实是一种非常狭隘的认知,建立在当前资本主义社会的规则之下。事实上,很多人对科学的研究都只是从有趣开始,逐步获得探索未知事物带来的满足感。孩童时期的“玩”也是对未知世界的探索,这种探索和对优越感的追求是与生俱来的。

分类
心理学 记录

优越感的追求

《超越自卑》中提到,人之所以会去追求优越,是因为其内心深处的自卑情节。而这种自卑情节是一种不良的情绪,它会让人陷入焦虑。而为了弥补这种情绪,人会致力于寻求优越感。

人类所有的行为都潜藏着对优越感的追求,这也是人类社会能够得以发展的源头。所有对于优越感的追求 ,它们的共同点就是追求者极力想变成神,梦想自己能够成为上帝,成为所有人关注、钦佩的对象。

但是,哪怕在同一条寻求优越感的路上,不同的人对于优越感的寻求方式也存在有不同。在阿德勒的书里举了个例子,同样以教师为职业目标的人,他们相互之间也是有区别:有些教师高高在上,只是为了通过掌控比自己更弱的学生而得到优越感;但有些教师把学生放在同自己平等的位置来看待,希望能够通过将他们培养成为有用之人来获得优越感。虽然这两类教师都能够通过这个行业获得优越感,但是对这个社会所产生的影响却是完全不同的。那些对能够促进社会发展的优越感的追求往往是困难的,因为这类追求需要花费大量的精力和汗水才能达成。

反观我们生活中的事情,很多对于优越感的追求也存在着不同。有些人会因为读过一本别人没读过的书获得优越感,而有些人的优越感是因为从这本书中获取到了新的知识。很多人思考不够深入,会对那些声称自己读过某些书籍的人产生崇拜心理,却忽略了是否能够理解并运用这些书本中的知识才更加重要。在这些不同的类型的优越感获取方式的背后,透露出不同的价值观、人生观。所以,不要只看一个人的外在形象,要去探究其本质。

对于那些不能通过正确途径获取优越感的人,他们其实就是在追求目标的时候选错了方向,然后做出了错误的行为。而能够修正这些错误行为的方式就是通过接触社会,在与人合作的过程中提高社会责任感。当社会责任感提高了之后,则会在追求优越感的过程中更注重本质的东西,而不再是关注表面。

第一遍读的是电子书,第二遍为了更好的翻阅买了纸质书
分类
心理学 记录

焦虑和强迫症

焦虑其实源自于恐惧,它其实是正向的。远古时候,如果存粮不多,人就会焦虑,担心族人会被饿死,担心自己会被饿死。而当人有了焦虑就急需消灭这种不舒服的感觉。于是人们会出门打猎,采集水果,当食物拉回营地,焦虑也随之消失。

由于0到3岁依恋关系没有建立好,会让人处于经常焦虑的状态,这种焦虑可以短时间被消除,但一段时间后又会出现。于是不安全依恋的人会被迫发展出各种技能来消除这种焦虑。

强迫症其实是一种消除焦虑的方法。门关后了一定要拉一下把手,确认一下门有没有关好,拉一下不行,发展成要拉三下。如果哪天忘记拉了三下把手,只拉了两下,人就会一直地焦虑,哪怕心里清楚门有没有关好与最后那一下把手有没有拉毫无关系。

所以,如果感觉到焦虑的情绪,必须找到焦虑的原因,找到自己在恐惧的事情,然后想办法解决掉。

分类
心理学 记录

塑造依恋类型

焦虑情绪

婴儿一出生就面临着如何在这个世界上存活下来这个问题,但是婴儿没有任何的防御能力,只能求助于父母,特别是母亲。只有被母亲抱在怀中,才能感受到满足和安全。一旦离开了母亲的怀抱或安全区域,就会开始焦躁不安,这是源自于心底最深处的对死亡的恐惧引发的焦虑。其实焦虑是正向的,它会让婴儿开始哭闹,引起父母的注意,以试图重新回到安全区域。

依恋类型

0到3岁期间是塑造一个人的依恋类型的最关键的时间,这一期间所发生的事情会塑造这个人对生存环境的理解。生存的环境是否安全,是否能够吃得饱穿得暖;特别是,亲密的人(父母)对于我的焦虑是怎么回应的,是否不需要太多呼唤就能满足我的安全诉求。各种不同的对于焦虑的回应方式,影响了婴儿长大成人后一辈子的心理状态。

安全型依恋:大部分的婴儿,得到了很好的安全满足,他们长大成人后对于事物的看法是乐观的,并且对于自我肯定大部分都是正向,哪怕遇到了挫折,都很容易调节好自己的状态,每天的生活都能是比较自在并且充满了满足感。

焦虑型依恋:有一小部分的婴儿,小时候的安全诉求并没有得到非常好的回应,但是勉强来说也是得到了一些回应,哪怕这些回应是负面的,比如:婴儿哭闹时,被大声斥责或甚至被拍打,但最终回到了母亲怀抱感受到了安全。他们长大成人后对于事物的看法是谨慎小心的,并且会经常处于焦虑的状态,但是总体来说,还是能够以积极的状态面对友情,亲情以及爱情。

回避型依恋:还有一小部分的婴儿,小时候的安全诉求完全没有得到回应,哭闹完全没有任何效果,没有人会理会这个婴儿的诉求,最终让它发现,原来哭闹是没有用处的,于是婴儿开始停止哭闹。他们会逐渐在这一过程建立自己的安全区域,把自己封闭在一个充满谎言的漂亮的城堡中。他们讨厌父母,但是却把这些讨厌隐藏了起来,同时也把自己对父母的依恋需求隐藏了起来。到了长大成人后,又不得不开始与人打交道,于是使用小时候所学习的各种表演技巧,将冷酷的内心伪装,不被别人发现。但是,渴望亲密关系是刻在每个人的基因里的,他们自然也无法避免,一开始和别人接触使用的各种表演技巧会让人感觉到这真是一个完美的恋人。然而,随着时间的推移,对方慢慢走近让他感到窒息,因为再多走一步就可能要发现这个城堡中隐藏的真正的那个幼稚而混乱的世界了。这时候他们将会把对方推开,然后自己独自躲回城堡中。

混乱型(或称恐惧型)依恋:同时具有回避型依恋和焦虑型依恋,会根据不同的环境转向不同的依恋类型,这种依恋类型称为恐惧型依恋。

值得注意的是,这里的依恋类型并不是指恋爱中的依恋,而是指婴儿0岁到3岁时和父母,特别是母亲建立起来的依恋方式。其中,回避型依恋和焦虑型依恋称为不安全型依恋。事实上,大多数人都会同时具有三种依恋类型,只是不同的依恋类型占比会不同。而且随着时间和认知的改变,这些依恋类型有一定机率会开始向安全型转变。

例如,焦虑型依恋的人发现自己在一些时间(特别是独自的时间)会产生出一种焦虑感,于是焦虑型依恋的人找出原因,并通过改善自己的生活环境来改善自己的焦虑,然后慢慢向安全型转变。对于不安全型依恋(焦虑型和回避型)来说,这一个转变过程是困难的,并且需要自身认识到缺点和不足后才有可能通过自身努力开始转变。

分类
记录

学习与感恩

我并不是一个完美的人,特别有各种各样的小问题,有时候心情糟糕得会陷入抑郁。但正如别人评价我一样,“虽然过程会曲折,但是事情的结果往往都是向好的方向发展”

2017年开始进入到区块链这个行业,陌生的、全新的领域。知道了数字货币的功能后,带着一堆的疑问,一点点地读比特币的开发文档,了解基本原理。接着读一些相关的算法论文,疯狂地吸取区块链行业里的知识。

当时开发区块链项目,要做一个完整的比特币分叉币,共识机制需要修改成为PoC(Proof of capacity)。作为工程师,除了实现核心算法部分外,每天还需要解决一堆又一堆的工程问题,最常见的就是各种编译和兼容,然后就是比特币里的代码地理解和更改。

那一段时间在上海的盛大青春里的出租屋里,基本上连公司都不太去,哪怕只需要步行5分钟,我都乐得在宿舍图个清静。每天就是读论文,改代码,研究代码,制定第二天计划。一直到耗费掉所有的能量,然后去休息,起床后继续。现在回想起来,也是惊奇于当时的旺盛精力。老板也对我的工作的理解,并不要求我一定在公司,给予了足够的自由和信任。

人在研究和学习的时候其实是最开心和快乐的,特别是在这个过程中还能够充分体会到平静。如今再次学习和研究论文的时候,又有这样的感慨,于是记录下来,这些为数不多的能让我感到平静的事情。

分类
记录

代码的正确性

最近在开发Spacemesh的矿池程序,整套核心的代码现在已经完成了将近70%。为了能保证所有的代码的正确性,使用测试驱动开发这种方式将各模块都使用不同的测试用例进行覆盖,以此来最大程度的保证写出来的代码的正确性和有效性。于是整个开发的过程就是在不断的验证和调试,直到所有的测试用例通过,最终将项目推进到接近完成的状态。测试,日志调试,都是为了保证程序最终执行结果正确的重要手段。

测试

当需要开发一个稍微有一些些规模的项目,经常性的会陷入到对程序是否能够被正确执行的怀疑中,不管人有多聪明,记忆力有多好,当项目增长到一定的规模时,都会掉入这个陷阱中。使用测试驱动开发,可以说是一种非常好的针对这个问题的解决办法。

所谓的测试驱动,是指我们先写好一个功能的基本接口,添加针对该接口的测试用例,然后继续接口的实现的开发,直到所有的测试用例通过测试,步步为营,最终完成。测试用例似乎成为整个开发的主角,而涉及业务代码,却是保证测试用例正确性的桥梁。

使用了GoogleTest作为测试框架的测试程序运行结果。

程序开发是一种组合方式,由各种大小部件组合成一个更大的部件,每个不同的部件都有各自的运行逻辑,测试用例则是为了保证某个部件的逻辑的正确性而存在的。

举个简单的例子:我们有一个函数,它可以把两个数字相加,然后把结果返回。于是,针对这个逻辑,我们写一段程序来验证,是否能够返回我们真正想要的值,这段程序就是一个简单的测试用例。

首先我们假定函数的接口是int Add(int a, int b),于是我们测试程序就可以写为EXPECT_EQ(Add(10, 20), 30),EXPECT_EQ是GoogleTest中的一个宏,它假定给入的两个参数的值是相等的,如果不等,它会打印出测试失败的信息,如果相等则表示测试通过。使用不同的测试框架,测试的代码不尽相同,可以查阅对应的测试框架的文档。我们可以为这个做加法的函数写很多个测试用例,来测试各种情况,比如带入负数相加,其中一个参数是零,或两个参数都是零,然后验证是否能获得想要的结果等。

日志

日志就是在程序运行中,打印到屏幕或文件中的一些和当前程序运行相关的信息。程序日志是一种必不可少的记录工具,它会在程序最初运行就开始将程序状态记录下来输出至指定的设备,当程序出现错误甚至宕机时,开发员可以从这些日志里分析出程序错误原因直至修补错误。日志类型有很多种,常见的有:Debug, Info, Warning, Error, Critical。

一开始我对于这些日志的类型是有点模糊不清的,后来在Stackoverflow上专门查阅了一些关于日志分类的说明后,大致可以这样理解:

  • Debug – 输出一些帮助调试的信息,没有特殊要求的情况下,该类型的日志不显示
  • Info – 输入当前程序的状态,比如收到了什么信息,然后正在进行什么操作等
  • Warning – 当一些操作有可能导至程序错误时,使用这种类型的日志来记录这些操作,作为警告
  • Error – 当程序发生错误时,这些错误还没有大到会导致程序运行失败的结果,但是已经是作为错误发生了,有可能需要针对它进行程序修补
  • Critical – 有时候这种类型会被称作Fatal,出现这种类型的日志时,往往程序已经无法再继续下去,该日志记录导致无法继续的原因

合理的在程序中的不同地方嵌入日志,可以让开发者更加容易的找到程序中存在的问题并且定位问题位置直到解决。在写代码的过程中,有意的培养自己对于代码日志编写的规范和合理,是一件值得投入精力去做的事情。

调试

当程序出现问题时,或和预期出现不一至的表现时,比如某个测试用例没有通过,我们就需要找到错误的原因然后对程序进行修改,然后将这个问题解决掉,这个过程就是调试的过程。

调试的手段会有很多种,比如:使用调试器来挂载程序,然后设置断点来进行跳转到有可能出现问题的代码处进行单步跟踪和运行,在过程中查看相关的变量,判断程序走向是否正常。或者,通过查看程序的日志来分析和尝试定位问题的位置等。

关于调试,Linux的作者Linus Torvalds就在一篇内核讨论的信中表示过,他完全不会用任何的调试器来调试代码,因为他认为,当一个你完全没有头绪的bug出现时,你要么变得更加的小心,要么去抱怨调试器(Oh. And sure, when things crash and you fsck and you didn’t even get a clue about what went wrong, you get frustrated. Tough. There are two kinds of reactions to that: you start being careful, or you start whining about a kernel debugger.)。其实我是很认同他的这一个观点,甚至不觉得这个观点有什么偏激之处。当我们太依赖调试器的时候,特别在碰到一些奇怪问题时,往往调试器展示给你的结果和实际的问题差得很远,而且一些在多线程中的宕机问题,往往调试器无法很好的帮助你去解决问题。

代码的正确性

关于如何保证代码的正确性,就是永远清楚自己在做什么,小心翼翼的写下每一个逻辑,做好每一个测试用例和日志。不要做多余的工作,不要把代码写得不必要的华丽,永远都要保持简单,并且多件事情分割成不同的小模块。写必要的注释,方便未来的人阅读,而这个未来的人往往就是自己,所以善待自己从写高质量的代码开始。

事实上,测试用例虽然和最终交付的代码看似没有什么直接关系,但是一堆好的测试用例,会帮助开发者省去大量的调试工作,并且帮助他们更好的理解这些代码。而好的日志,将会在程序的生命周期中不间断的产生有效的信息来帮助开发者们理解并处理未来将要发生的问题。

以上三大手段很有效的减轻了开发过程中的心智负担,但是,如何把这三大手段用对用好,是一个需要长期练习的过程。

分类
记录

如林中之象

“独步天下,吾心自洁,无欲无求,如林中之象”。十多年前看了《Ghost in the shell》后就非常喜欢这句诗,十多年后,仍然感叹。只不过,我暂时还没有办法做到如林中之象那般强大,于是我也无法悠然自得,继续努力吧。

分类
记录

想做游戏的学习建模路

《Darq》这款游戏做得非常的棒,Unfold工作室的作品。其实工作室基本上就是作者一个人。从完全没有做过游戏,从零开始学习3D建模,学习程序设计,到做出这款游戏一共花费了近5年的时间。现在该游戏已经登上了各大平台,包括掌机Switch,并且获得了非常多的奖项。

获得了很多奖的DARQ游戏

以前想要做游戏,总是害怕自己没有美术基础,无法做出漂亮和让人满意的画面,其实,在现在互联网如此发达的世界,只要能够上油管,那么各种各样的教程真的是可以随便挑选,对于无基础的任何人都可以学习并掌握一定的美术知识。并且经过一段时间的学习,就能做出具有一定表现力的画面。能把这些东西做出来,对我的诱惑非常大,哪怕只是简单的低多边型的模型。

建模软件使用了开源的Blender,无费用,不需要找破解,非常自由,并且这几年它的发展非常的好,在业内很多人都开始选择使用它来进行建模,相关的教程也非常的丰富。从一开始的点线面开始学习,了解建模的基础知识,了解一些建模的规则和为什么,学习低多边型的模型制作,一直到开始尝试雕刻,再拓扑回低模,再学习贴图。期间还学习了解人体结构特别是头骨结构等。非常的享受这一过程,特别是在做雕刻的时候,可以进入一种完全沉浸的状态,10个小时,只做这一件事情。

折腾了一两个月下来,突然感觉能做的东西多了,想做中世纪的古房子,想还原漫画里的角色,想在Unreal里渲染出自制的模型,使用不同的灯光和材质,想做精致的UV贴图,还想让人物动起来……

虽然现在做的东西还非常的粗糙,虽然还有非常非常多的细节没有能做好,虽然还没有能够做出自己满意的游戏模型,但是这一个学习的过程就足以让我收获很多的满足感,至少让我确定了这一条路是可以为之付出努力走下去的。

附上一些还不算非常成熟的但可以看的模型作为记录。

无三视图参照的头部雕刻模型,角度1
无三视图参照的头部雕刻模型,角度2
无三视图参照的头部雕刻模型,角度3
完善了眼睛部分,然后按照标准拓扑后的网络模型以适应未来对于动画的需求
转低模后,自己绘制的皮肤和眼睛贴图,并且添加了简单的头发
还不太成熟的身体模型,纯建模,无雕刻,视角1
还不太成熟的身体模型,纯建模,无雕刻,视角2
加上简单的衣服和贴图
用Alita的三视图参照雕刻的模型,应该是开始尝试雕刻的第二个模型,非常的不娴熟
一个低多边型拼凑的房子,只上了颜色,没有贴图,也是一开始学习的作品