阅读视图

发现新文章,点击刷新页面。

左右疑惑

当年今日

电视剧《亲爱的生命》某一集说到一个妇科癌症的患者,她很火爆,因为她之前经历过医疗事故,所以她对医院里所有的人都是非常不好脾气,但即便这样,她依然到要到医院接受手术,因为那是她唯一活下去的希望。之所以她这么绝望,是因为多年以前,她检查发现了单侧巧克力囊肿。手术的那个医生却把她好的那一侧卵巢切掉了,也正是因为这个事故,她失去了婚姻、失去了生孩子的希望,也改变了她的人生,所以她对医院的所有人才会那么的憎恨,虽然那个医院和她后来去的医院不是一家。

《亲爱的生命》是一部说妇产科医生的电视剧,前面很大一部分说的都是产科,后面才带入了一些妇科的内容。虽然这样,带入的妇科内容通常也是跟产科联合在一起。那个很火爆的病人质问住院医生她的手术要怎么做?要在哪里开刀?怎么开刀?整个流程都要给她说。她会质疑她有问题的部分是那个地方,为什么要从第二个地方开刀。我是理解她这种心情,因为我做巧囊手术之前我也有纠结过,自己的那个巧囊到底在左边还是右边,是我的左边或者右边还是医生的左边或者右边。之所以让我这么纠结,因为之前所有的超声报告都显示我的巧囊是右侧的,但是当我做完手术醒过来的那一下,却发现最痛的那个伤口在左侧,于是我就陷入了纠结,为什么会这样呢?该不会切错了吧?同样跟我纠结的还有我同房的病友,她是宫外孕。同样,她的伤口位置跟她宫外孕B超报告的那个位置好像不太一样。无论是我还是她,都不敢问医生为什么会这样?为什么伤口在这边?到底有没有切错?后来,过了很长一段时间我才意识到,因为我们做的是腹腔镜手术,所以最大的那个伤口在左边还是右边跟我们要切除的那个东西在身体的左边还是右边没有关系,跟主刀医生的操作习惯有关系。如果是开腹手术的话,我感觉理论上是应该在离需要切除那个地方最接近的那个部位开刀,但腹腔镜不是这样的,它可以游走于腹腔的任何一个部位。我感觉问题只是那个医生是左撇子还是右撇子,他擅长用哪只手操作,那么最后那个取出口就在哪个地方。术后做第一次B超之前,我还是挺忐忑的,但是当我做过一次又一次的B超,发现的确没有了巧囊以后。我才终于放下心头大石,相信最大那个刀口的位置跟切除的那个东西所在的位置没有关系。

电视剧里那个患者不只切错了,而且巧囊跟卵巢一并切除了。就我一个路人甲都觉得这是一个非常扯淡的操作,明明可以直接剥离的巧囊为什么要一并把卵巢摘掉呢?虽然实际上被巧囊骚扰过的卵巢,功能一定是没有正常的时候那么好,但那毕竟是一个卵巢,哪怕功能减弱了,但还是有功能的。怎么可以用如此粗暴的方式解决问题呢,关键还切错了。我感觉电视剧里说的那个切错了,应该不是用腹腔镜而是开腹。开腹如果刀口在这边,你又要看那一边是非常麻烦的事情。如果用腹腔镜,搞完这边再去看看那边。又或者是进去以后发现可能两边都得处理一下,也是可以做到的。我不知道妇科的腹腔镜手术到底是什么时候才开始流行起来的,或者说是什么时候开始成为了主流的术式。现在还有为了正常大小的巧囊做开腹手术的吗?

大概单侧巧囊接受手术的人都有过左右的疑惑吧。

时间

前天晚上终于有时间看了《花月杀手》——这是一部三个多小时的电影。没什么花哨,却不枯燥,导演、演员的功力自然高超,不过剧情本身也实在引人入胜。说起来,观影前我完全没做功课,以为是什么特工动作片,结果却是一段美洲原住民的血泪史。代表着文明的白人,把一条条鲜活的生命抹杀,只因他们是不同种族,只因他们手里有钱。当然从程度上论,我们普通人或许并没有做如此残忍的事(的机会),但是本质上相同的事情,身边却每每上演。比如想象武力占领台湾的方法时说着玩弹齐发把那里炸成焦土;比如发表仇视日本的言论说真该再让他们吃两颗原子弹;比如见到意见分歧者会说他们就该被轧死……不是说一百多年前的美国人值得原谅,只是显然我更关心当下、我的同胞们,就这么无法接受别人与自己不一样吗?就这么坦然地相信不一样的人就该死吗?那么,一百多年过去了,我们能说自己生活在更文明的时代和国度吗?

其实前面的内容属于跑题了,我只是想说时间来着。我受不了一部电影分多次看,现在大家都说时间碎片化,但妳瞧,即便是三个多小时,挤一挤总还是有的。这部电影给我的另一点关于时间的感触,源自本片导演马丁·斯科塞斯在专访中的话:「我希望我能休息八周,同时拍一部电影(笑)。整个世界都向我敞开了大门,但为时已晚,太迟了。我老了。我读,我看,我想讲故事,但没时间了。卢卡斯和斯皮尔伯格共同为黑泽明颁发奥斯卡奖时,黑泽明说他现在才看到电影的可能性,但为时已晚。那一年他83岁。当时我还在思考这段话是什么意思,如今我终于明白了。」

fin.

在有限的生命面前,没什么是放不下的

其实,我很怕死的。今年三十一岁了,来得很快。回想起来,距离二十岁已经过去十年了。好像二十岁时傻傻的样子还历历在目。如果你问我想回到过去吗,我回答是不太想。过去的我虽然很年轻,我也不用发愁于生老病死,但我是无知的,迷茫的,像一个无头苍蝇,只知道吃喝拉撒,只知道即时满足。

但年轻的岁月,对于人来说,是如此的珍贵。人的生命只有一次,而且也只有几十年。小时候觉得人生很长,一百年很长很长,时常会幻想自己十七岁的时候是怎么样,感觉自己的三十岁是非常的遥不可及。转眼,一年又已经过去,自己已经过了三十这一年,觉得有点恍惚,但又很真实。

我时常想,我的父亲,活了半辈子,五十多岁,其实他的时间也不多了。有一天他也会离开我,从此我再无归处。我父亲不算是优秀的人,虽然也因为当时的环境所影响,不能上学受到良好教育,家里也没钱,半辈子普普通通,为了生计四处工作。不够二十岁的时候就离开家乡去边境当兵,然后遇见了我妈。

现在想起来,我小时候受到父亲各种情绪上的攻击,精神暴力,如今我也能理解了。都是普普通通的人,努力的活着,摸着石头过河,没有谁会帮你一把,没有谁会突然站出来教你做事做人。我老爸其实也真的不容易,他当时三十岁的时候或许就像我现在这样,对生活感到无力,眼睁睁的看着时间流逝,看着许多人离开了自己。不甘,不舍,但又毫无办法。心中有压抑的情绪,又得不到倾诉,于是情绪就爆发在身边的人身上。

十年,一晃眼就过去了。我从初中的时候对父亲的抱怨,到害怕,到憎恨,再到出了社会工作之后对父亲的躲避,再到尝试和解,再到现在的理解,现在的我已经不太想再憎恨他了,只想多给到他一些关爱。终有一天,我的父亲,会带着一些遗憾离开人世。

我时常在想,再过几十年,等我死去之后,就再也不会再醒过来了,无论一万年,一亿年,无论几百千万亿光年,我也再也毫无意识,我就像从来没有来过这个世界一样。它没有解法,没有任何的办法,这种感觉非常的,非常的,非常的令人绝望。再想想我的余生,如果能活到八十岁的话,也只有五十年的余额了,然后就再无法重来了,不像明天早上我还能醒过来那样。

JavaScript 总结、比较 V2

Promise 与 RxJS Observables 的区别

Promise

  • Promise 是 JavaScript 中内置的,不需要任何额外的库。
  • Promise 表示可能现在或将来可用的单个值。
  • Promise 是急切的,也就是说一旦 Promise 被解析,.then()回调会立即执行。
  • Promise 只能发出单个值。
  • Promise 非常适合处理产生单个结果的简单异步操作。

RxJS Observables

  • Observables 是 RxJS 库的一部分,需要额外安装依赖。
  • Observable 表示可以随时间发出的值流。
  • Observable 是惰性的,也就是说在订阅之前不会执行任何操作。
  • Observable 可以发出多个值,包括零个或多个值。
  • 可以使用各种 RxJS 操作符对 Observable 进行转换和组合,以创建新的定制流。
  • Observable 非常适合处理复杂的异步操作,例如实时数据流或事件驱动编程。

参考

  1. JavaScript Theory: Promise vs Observable - Medium
  2. angular - What is the difference between Promises and Observables? - Stack Overflow
  3. JavaScript Promises vs. RxJS Observables

模版语法的简单实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const name = 'Nexmoe';const message = 'My name is {{name}} and I\'m {{getAge(20)}} years old.';function getAge(age) {  return age;}const replacedMessage = message.replace(/\{\{(.*?)\}\}/g, (match, variableOrFunction) => {  const trimmedValue = variableOrFunction.trim();  if (trimmedValue.includes('(')) {  // 如果占位符包含括号,则表示为带参数的函数替换    const [functionName, ...args] = trimmedValue.split(/\(|\)/).filter(Boolean);    const func = eval(functionName);    return func(...args);  } else {  // 否则为变量替换    return eval(trimmedValue);  }});onsole.log(replacedMessage);

先检查占位符中是否包含括号,如果包含括号,则表示是一个带参数的函数调用。使用split方法和正则表达式来解析函数名和参数,并将其存储在functionNameargs变量中。然后,使用eval函数将函数名转换为实际的函数对象,并使用扩展运算符 (...) 将参数作为参数列表传递给函数。函数执行后,将返回值作为替换后的字符串返回。

如果占位符不包含括号,则表示是一个变量。直接使用eval函数将变量名转换为实际的变量值,并返回其值作为替换后的字符串。

⚠️ 注意:使用eval函数执行代码具有一定的安全风险,因为它可以执行任意的 JavaScript 代码。有相当多的建议建议不使用eval。准备过段时间研究研究不用eval的方法。

MVVM 是什么

MVVM 代表 Model-View-ViewModel,在 MVVM 中,Model 表示应用程序的数据和业务逻辑,View 表示用户界面,ViewModel 充当 Model 和 View 之间的中介。

模型(Model)

  • 模型代表应用程序中的数据和业务逻辑。
  • 它可以是从服务器获取的数据、本地存储的数据或通过其他方式获取的数据。
  • 模型通常实现了一些方法来操作、存储和管理数据。
  • 对应的是组件中的 data、props 属性。

视图(View)

  • 视图是用户界面的可见部分。
  • 它负责展示数据给用户,并接收用户的交互操作。
  • 在 Vue.js 中,视图通常由 Vue 组件表示,可以包含 HTML 模板和样式。

视图模型(ViewModel)

  • 视图模型是连接模型和视图的中间层。
  • 视图模型通常包含了与视图相关的数据、计算属性和方法,以及与模型交互的逻辑。
  • 通过双向绑定(data-binding)将视图和模型连接起来。当模型中的数据发生变化时,视图会自动更新。通过 DOM 事件监听,当用户在视图中输入数据或进行其他交互操作时,视图模型会自动更新模型中的数据。

优势

  • 分离关注点:将数据逻辑与视图逻辑分离,使代码更易于维护和测试。
  • 提高开发效率:通过双向数据绑定和声明式编程风格,减少了手动操作 DOM 的代码量。
  • 可重用性:通过组件化的方式,视图和视图模型可以在不同的应用程序中进行复用。
  • 响应式更新:当模型中的数据发生变化时,视图自动更新,提供了更好的用户体验。

参考

  1. 为什么尤雨溪尤大说 VUE 没有完全遵循 MVVM? - 知乎
  2. Vue 的 MVVM 思想(包含三个常见面试题) - 掘金
  3. MVC,MVP 和 MVVM 的图示 - 阮一峰的网络日志
  4. Getting Started - vue.js
  5. Comparing Vue.js to new JavaScript frameworks - LogRocket Blog

MVC 是什么

MVC 这个概念已经存在很久了,用了这么多年,今天了解一下概念做个总结。

MVC(Model-View-Controller)设计模式将应用程序中的对象分为三个角色:模型(Model)、视图(View)和控制器(Controller)。该模式不仅定义了对象在应用程序中的角色,还定义了对象之间的通信方式。每种类型的对象都通过抽象边界与其他类型的对象分离,并在这些边界上与其他类型的对象进行通信。应用程序中某种 MVC 类型的对象的集合有时被称为层,例如模型层。

848723f97c7a1b862e10abe0445da348.png

模型(Model)

  • 封装应用程序特定的数据,并定义操作和处理数据的逻辑。
  • 可以表示应用程序中的实体,如游戏中的角色或地址簿中的联系人。
  • 可以与其他模型对象建立关联,形成对象图。
  • 应该存储应用程序的持久状态数据。
  • 不应与呈现数据和用户界面相关的视图对象直接连接。

视图(View)

  • 用户可见的对象,负责显示数据和响应用户操作。
  • 知道如何绘制自身,并可以与用户进行交互。
  • 通常通过控制器对象从模型对象中获取数据进行展示和编辑。
  • 在 MVC 应用程序中与模型对象解耦,提供一致性和重用性。

控制器(Controller)

  • 充当视图对象和模型对象之间的中介。
  • 负责处理用户操作,并将其传递给模型层进行数据处理和更新。
  • 可以执行应用程序的设置和协调任务,管理其他对象的生命周期。
  • 在模型对象发生变化时,将新的模型数据传递给视图对象进行显示。

优势

  • 提供良好的应用程序设计,使对象更具可重用性和接口定义明确性。
  • 支持应用程序的可扩展性,易于添加新功能和模块。
  • 分离关注点,使代码更易于维护和测试。
  • 应用程序的模型层、视图层和控制层之间保持了清晰的分离,实现了代码的结构化和职责的明确划分,从而提高了应用程序的可维护性和可扩展性。

参考

  1. https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

为什么 Bun 这么快

JavaScriptCore 引擎

Bun 使用 JavaScriptCore 引擎,这是 Safari 浏览器使用的引擎,而不是基于 Chromium 的浏览器和 Node.js 使用的 V8 引擎。JavaScriptCore 引擎经过了针对更快启动时间的优化,这有助于 Bun 的速度。

性能分析和优化

大量的性能优化。Bun 的初衷就是要快。[2]

Zig 语言

Bun 利用 Zig 语言进行低级内存控制和消除隐藏控制流。Zig 的设计原则注重性能,通过利用 Zig,Bun 可以实现更好的内存管理和控制,从而提高速度 [2]

参考

  1. Bun 1.0 | Bun Blog
  2. A first look at Bun: is it really 3x faster than Node.js and Deno? - DEV Community

累积布局偏移优化 CLS 完全指南

什么是布局偏移

一个十几秒的短视频解释清楚。

更详细的解释是:布局偏移指的是在网页上发生突然变化时,页面中的内容位置发生意外移动的现象。这种情况常常让人感到困扰,因为它会导致阅读中断或误操作。布局偏移通常是由于资源异步加载或动态添加到页面上的 DOM 元素导致的。可能的原因包括具有未知尺寸的图像或视频、字体与其备用字体渲染大小不同,或者第三方广告或小部件动态调整大小。

难受的是,网站在开发过程中的功能通常与用户体验有很大不同。个性化或第三方内容在开发中的行为通常与生产环境中不同,测试图像通常已经存在于开发者的浏览器缓存中,本地运行的 API 调用通常非常快,延迟几乎不可察觉。

什么是 CLS

累积布局偏移 CLS(Cumulative Layout Shift)是一个指标。

是对页面整个生命周期中发生的每个意外布局变化的最大布局变化分数的度量。

CLS 通过测量实际用户遇到布局偏移的频率来帮助解决布局偏移问题。它可以帮助开发者了解布局偏移在真实用户中发生的情况,从而采取相应的措施进行修复。

为什么要优化 CLS

布局偏移是一个非常影响用户体验的问题,通过上面那一个简短的视频也能理解。

布局偏移通常会导致意外点击、页面方向的迷失,最终导致用户受挫。用户往往不会逗留太久。有时也会使用户不按照预计的产品流程走。

通常优化好布局偏移能够很好的提高用户粘性、用户停留时间等指标。

Yahoo! JAPAN News 通过降低 CLS 0.2 分,得到如下成果。

如何降低 CLS

图片等媒体元素占位

在图像、视频等媒体资源元素中始终包含宽度和高度大小属性。或用 CSS 中的 min-heightaspect-ratio 或类似的方式保留所需的空间。

aspect-ratio

可以用来直接指定当前元素的比例。

https://developer.mozilla.org/zh-CN/docs/Web/CSS/aspect-ratio

对浏览器的支持:

padding-bottom

如果考虑浏览器支持问题仍然可以考虑使用目前一个被广泛接受的基解决方案 “Padding-Top Hack”。这个解决方案需要一个父元素和一个绝对型的子元素。然后计算出长宽比的百分比来设置为 padding-top。例如:

1
2
3
<div class="container">  <img class="media" src="..." alt="..."></div>
1
2
3
4
5
6
7
8
9
10
.container {  position: relative;  width: 100%;  padding-top: 56.25%; /* 16:9 Aspect Ratio */}.media {  position: absolute;  top: 0;}

使用不易产生偏移的 CSS

其中 transfrom 表现很好,以下举几个例子。
用例可以在这里找到:https://play.tailwindcss.com/26PxFA6UVI

zoom VS transform: scale

zoom 会撑大页面并向右偏移时,transform: scale 只是在原地放大。

margin VS transform: translate

margin 造成父元素变大,transform: translate 只是让当前元素移动。

border VS box-shadow

border 会撑起父元素,而 box-shadow 并不会。

小心你的懒加载

懒加载会引起布局的偏移,如果你在有懒加载长列表的里进行跳转,请小心!
无动画进行跳转,能够一定程度上避免该问题。

小心使用 transition: all

在页面首次加载或者跳转页面时,transition: all 可能会导致元素的 padding 等从参数为 0 开始渲染,照成页面的抖动。

这都是痛:
Commit:表格以及友情链接图标抖动
Commit:修复导航栏抖动问题

标签顺序导致的偏移问题

由于在移动端上优先展示主要内容,因此侧边栏的 markup 位于主要内容的后面;而在更大的屏幕上,则通过设置 CSS order 的方式进行排序,将主要内容移到中间(即第二列),伪代码如下:

1
2
3
4
5
6
7
8
9
export default function MainLayout(props) {  return (    <Container>      <Main className={css`@media screen and (min-width: breakpoint) { order: 0 }`} />      <Left className={css`@media screen and (min-width: breakpoint) { order: -1 }`} />      <Right className={css`@media screen and (min-width: breakpoint) { order: 1 }`} />    </Container>  )}

浏览器在首次绘制时并没有完整解析 DOM、只知道 <Main /> 的存在、但不知道 <Left /> 或者 <Right /> 的存在,才因此将 <Main /> 渲染进第一列而不是第二列;直到第二次绘制时,浏览器才将 <Main /> 渲染进第二列、将 <Left /> 渲染进第一列。

Chrome 并不是一次完整解析 HTML 的,在以下两种情况下,Chrome 会暂停解析、开始渲染和绘制:

  1. Chrome 解析器在读取了 65535 字节的 HTML 后暂停
  2. Chrome 在遇到 <script> 标签后,会继续读取约 50 个「Token」之后暂停

详细了解请看:优化博客的累计布局偏移(CLS)问题

网页跳转与前进后退缓存

默认情况下,所有浏览器都使用 bfcache,但由于各种原因,有些站点不适合使用 bfcache。有关如何测试和识别阻止 bfcache 使用的任何问题的更多详细信息,请阅读 bfcache 文章

在你离开后,bfcache 将页面保存在浏览器内存中很短的一段时间,所以如果你返回它们,那么它们将完全恢复为你离开时的样子。这意味着完全加载的页面立即可用,而不会出现任何变化。

现在的 SPA 应用也能很轻易的保证路由跳转页面布局的一致性。记住始终保持你的目录和导航栏在页面的固定位置。

字体

在下载和渲染网络字体之前,通常有两种处理方式:

  1. 使用网络字体替代备用字体(FOUT——未样式化文本的闪烁)。
  2. 使用备用字体显示“不可见”文本,直到网络字体可用并且文本可见(FOIT——不可见文本的闪烁)。

着两种方式都可能导致布局变化。即使文本是不可见的,它仍然使用备用字体进行布局。这意味着使用该字体的文本块以及周围的内容在网络字体加载时会发生布局变化,与 FOUT 的可见字体完全相同。

以下方法可以帮助你最小化这种问题:

  1. 使用 font-display: optional 可以避免重新布局,因为只有在初始布局时网络字体可用时才会使用它。
  2. 使用匹配度高的备用字体。例如,使用 font-family: "Google Sans", sans-serif; 将确保在加载"Google Sans"字体时使用浏览器的无衬线备用字体。如果只使用 font-family: "Google Sans" 而不指定备用字体,将使用默认字体,而在 Chrome 上默认字体是"Times",它是比默认无衬线字体的匹配度更差。
  3. 使用新的 size-adjustascent-overridedescent-overrideline-gap-override API 来尽量减小备用字体和网络字体之间的大小差异,详细信息请参阅“Improved font fallbacks”文章。
  4. 使用 Font Loading API 可以减少获取所需字体的时间。
  5. 使用 <link rel=preload> 尽早加载关键的网络字体。预加载的字体有更高的机会达到首次绘制,这样就不会发生布局变化。
  6. 阅读有关字体最佳实践的“Best practices for fonts”文章。

使用真正的骨架屏

骨架屏好坏示例

测量 CLS 分数

生产阶段

实验阶段

Lighthouse in DevTools

能够针对移动设备和桌面设备生成网页的实际性能报告,并能够提供关于如何改进相应网页的建议。

在本地开发期间从 DevTools 运行 Lighthouse 非常方便。

PageSpeed Insights

应该就是在线版的 Lighthouse。

Performance in DevTools

性能选项卡在 Chrome 的 DevTools 配置文件的所有页面行为在一段时间内记录。时间轴上会出现一个标记为“Experience”的图层,突出显示布局的变化和发生变化的元素。

Web Vitals extension

最好将 Web vital 扩展视为查找性能问题的抽查工具,而不是全面的调试工具——这是 Chrome 的 DevTools 中的性能选项卡的工作。

结语

作为一个对自己项目有较高要求的人,平常几乎都会接触到布局偏移优化或者 Lighthouse,只不过之前自己瞎折腾的时候还没有 CLS 这个概念,现在算是对 CLS 有了较为清晰的概念了。
CLS 作为一个非常基础的优化指标,在用户体验上非常重要,任何项目都应该针对 CLS 做优化。

如有勘误,请及时指出,感谢!

参考

  1. https://web.dev/cls/
  2. https://web.dev/optimize-cls
  3. https://developers.google.com/publisher-tag/guides/minimize-layout-shift
  4. https://web.dev/yahoo-japan-news/
  5. https://addyosmani.com/blog/infinite-scroll-without-layout-shifts/
  6. https://blog.skk.moe/post/fix-blog-cls/
  7. https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio

(2021年终)19岁,找回迷失的自己:热爱、勇敢以及感恩

愿你生命中有足够的云翳来造就一片美丽的黄昏。

https://music.163.com/#/song?id=32069952

👆 年轻时最喜欢的音乐 Entorevolution,好久没听了,最近又听了起来。

云翳

2017年那会,15岁,我以这句话作为了我网易云音乐的签名。至今仍然它保留在我的网易云音乐签名中。

image-20211226122242084

我的人生也如同这句话写的一样。在这之后,我生命中充满了云翳,差点,这些云翳就压垮了我。

image-20211226122339633

17年,刚上高一,我决定要成为一个能散发阳光,如同太阳一般热烈,充满激情的人,并真正的朝着这个目标行进了。但我没料想到后面的生活中,一些黑暗的手将我一次又一次地抓住,让我走向完全相反的方向。那个时候我也只是个视野狭窄的普通高中生,理所应当地认为学校里的一切就是人生的一切。来自生活的压力,来自不可抗拒之力的打压让我彻底消沉了。我觉得,我玩完了

2018年也还是走到了头

朋友说:“感觉你最近状态很不好啊,去医院看看吧。”

我越来越冷漠、越来越刻薄了。那时的我认为,只有以一种应激的状态面对生活,才是现实。

此后,便是我人生中空白的几年。这段时间,我停止了进步、放弃了思考。

光,照了进来

即使是牢笼,外面的天空依旧蔚蓝

👆 我透过教室的窗拍摄的蓝天白云,这个视角好似我们于牢笼之中,但我们却能清楚的看到一片美丽的天空。

丧失了所有对生活的乐趣,我接触起了文学。诗中 “天生我材必有用,千金散尽还复来。” 便是我的最大慰藉。书确实犹药也,虽然没医我的愚,但他们救了我。

此后我还接触了科普书,他们让我学到了很多。

文学让我变得越来越勇敢。

当然还有亲人、朋友的陪伴,带着我沉重的身心一步步的前进。

当所有人都向往着太阳。但你此时却只是一个黑洞要吞噬一切,而总有一些人毫不畏惧敢于靠近你,向你分享他的光,这些人不就是真正的朋友吗?空白的那几年交到了不少人生中最好的朋友。也让我明白了亲情的重要。

度过人生中空白的几年,来到了今年。

反思

沉思

👆 大一刚来学校,宿舍晚上窗外的景象。正暗示了在人生中沉思踌躇的我。

我想变成什么样的人?

乐观:天生我材必有用,千金散尽还复来。

热爱一切:爱一个人,也爱她的缺点。爱一份事业,也爱它带来的困难。焦虑,生活是否真的如他们所说 - 陆本为 (nexmoe.com)

坚定:橡皮擦 - 陆本为 (nexmoe.com)

你的时间是有限的,所以不要浪费它为别人而活。 不要陷入教条 — 活在其他人的思想成果之中。 不要让他人意见产生的噪音淹没你自己的心声。 最重要的是,要拥有追随你的内心和直觉的勇气。 他们已经知道你真正想成为什么。 其他所有都是次要的。—— STEVE JOBS

勇敢:谁怕?一蓑烟雨任平生。对不起,我自暴自弃了 - 陆本为 (nexmoe.com)

image-20211226122946237

👆 博客 陆本为 的副标题

浪漫:世界不会满足人,人决心以自己的行动来改变世界。——列宁

无论什么样的灾难降临,只要生命还在,生活始终要继续。——美丽人生

img

👆 美丽人生男主的最后一幕

寻找

不断的反思,让我清楚的知道自己背离初心太远了,离我当初的追求越来越远了。

我决定找回迷失的自己。在今年2月15日,我决定开始我的新征程。

image-20211226115107795

找回迷失的自己

先回复上面:我快要成功了!这一年随着我定下目标并朝着目标一步步的努力。我得到了进化,或是说压抑的本性得到了释放。我就快要成功了!

我终于找回了迷失的自己。我开始重新热爱一切。

我的朋友说:

“你的眼里又焕发出光芒了。”

“真为你开心!”

“哈哈你得到认可我也跟着好开心”

“好!”

“真好哇”

感谢

世间所有的相遇,都是久别重逢。/ 一切都是最好的安排。

感谢家长、朋友的支持和陪伴,我的家长给予了我非常多的信任,让我有了一份敢于探险的勇气。不像其他家庭那种封建大家长式家庭那样过于束缚我。在生命中的黑暗时刻,是父母给予了我最大的支持,让我有了希望和决心去突破这一切。感谢朋友的陪伴,他们分享给我的光明,让我不完全被云翳遮盖了前进的路途。让我不至于对一切绝望。

感谢当初没放弃的自己,当初仿佛在地狱走过一趟的自己感觉现在已经没有什么能打败自己了。感谢当年的我最后终于鼓起了勇气,才得以如此快的恢复。感谢自己永远向往着光明。感谢自己一直坚持自我。

感谢高中的黑暗打压,那段黑暗让我现在不再害怕很多事情。这段黑暗让我清楚认识到以前的我实在是太胆小了,害怕一切,害怕失去,害怕失败,害怕结果的到来。正是这段黑暗让我有了破釜沉舟的勇气。

感谢当初转专业计算机拒绝了我,让还在不停犹豫的我鼓起勇气,下定了决心。踏上了更为艰巨的旅途。

去他妈的瞻前顾后,其他的路我都不想了,我只走这一条了,即使最后粉身碎骨我也要走下去。以前老是想着这找退路,那找退路,总觉得失败了还有办法,只要活着就还有希望。但是这些退路明明就不是我最想走的那条路。

我不要再继续自暴自弃下去了。我只管走自己的路罢,其他的事又与我何干。这么多年,我一直都在周围人的不理解中走来了。多这几年又何妨,我相信,我一定会等到柳暗花明的那一天。——对不起,我自暴自弃了 - 陆本为 (nexmoe.com)

正因为有这些值得感谢的一切,才造就了如今的我。

1黄鹤楼

👆 东湖和黄鹤楼

希望

希望新的一年我还能够追上你的脚步,来年的这个时候你还愿意看我的年终。也希望明年也和今年一样,满怀期望。

image-20211226124821260

朋友们的年终

2021年终总结 - 断舍离与原则 (notion.site)

❌