分类
心理学 记录

焦虑和强迫症

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

由于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的三视图参照雕刻的模型,应该是开始尝试雕刻的第二个模型,非常的不娴熟
一个低多边型拼凑的房子,只上了颜色,没有贴图,也是一开始学习的作品
分类
记录

没有奇迹

这两年最痛苦的可能就是花时间重新审视我与其它人之间的关系后,得出我和其它人的关系其实并没有自己想像中的那么好这件事情。其实不止是花了时间审视,还亲身经历过不止一次的鸡毛事件后才痛苦的得知了这个结论。

为什么会是这样,是和自己懒惰不去思考有关系的。哪怕有时候会有一些不好的预感闪过,自己却仍然懒惰的不去深入思考而把赌注押在对方道德在线这一概率不高的事件上。

所以,相信什么都好,不要相信奇迹,并且把拥有平均道德水平的人的被发现当作一种神奇的事情来看待,有时候反而会显著提升自我的幸福感。

分类
记录

以太坊2.0质押

文章已经编辑移至知乎:https://zhuanlan.zhihu.com/p/352870953

分类
电影

The VVitch

今天下午一边看《The VVitch》一边给冰箱除霜。

说是除霜,其实就是把冰箱的电给断了,打开冷冻室的门让冰自己慢慢融化,然后不定时的一遍遍的拿着抹布把化出来的水给吸掉再拧干。

《The VVitch》讲的应该是中世纪1630年的新英格兰土地上,父亲因为同村里的教会有着无法调和的矛盾而被驱逐出种植地,然后全家接二连三死亡及大女儿消失的故事。导演并没有在剧中证实所有的发生的事情都是事实,因为故事的最终全家人都死亡或消失,理论上来说没有任何人可以知道到底是发生了什么。这像极了是一个经人口述的“别人家”的恐怖故事,而往往这样的口述在听者的脑海里往往都不存在“真实”这一说法。于是,按照这样的逻辑来看,剧中唯一消失了的女主,最终变成女巫的这一段剧情也就不一定是真实发生的了。而这正好也和这个电影的名字《The VVitch》相呼应,女巫的英文单词应该写作Witch,而电影名字用了两个VV来代替了W,很有意思的暗示了观众,请不要随便相信看到的事情。

基督教基本上说来就是一个父权的宗教。在当时那个环境下,一旦发生了不好的且无法解决或无法理解的事情,那么最终都会有人把问题怪罪给女巫,而找出身边的“女巫”却成了唯一的解法。

在看恐怖片的过程中,冰箱里不断的有融化了的冰块掉下来的声音,好像还挺应景。在《The VVitch》看完后,最终还是烧了一壶水,用小茶杯浇到了冰霜上以加速这个“除霜”过程,终于再过了十多分钟后才顺利清洁好了冰箱重新通上了电。

一直觉得依靠突然切换的画面或声音来达到让别人害怕的恐怖片都比较低级,其实挺没有技术含量。而这次选择看《The VVitch》的原因是它并没有使用这些低级的方法来捉弄观众,反而可以让观众看完后有一些思考。

主演是安雅,在《Split》这部电影中她有非常精彩的演出,虽然她在《Split》中只是一个配角。因为她,我把《Split》的前传《Unbreakable》后传《Mr Glass》都补完了。

最近她主演的新剧《Queen’s Gambit》也非常的火。