Latest stories

『別れの予感』

今年发生了很多事,告别了一些人,也认识了新的朋友,有些说大不大,说小不小的改变,无论是我,还是这个世界。大概是一个月之前就开始构思这篇文章,然后花上两到三天的时间整理链接,图片,文字和回忆。

「说到邓丽君的代表作」
「很多粉丝会说〈何日君再来〉」
「〈再见我的爱人〉或〈我只在乎你〉」
「不瞒大家,其实我最喜欢这首」
- 老爸啊,到底想干什么呢?
- 干什么?
「请听邓丽君的〈别离的预感〉」
- 他自己的人生啊
- 我不知道,到最后还是搞不懂他
- 他很多事无法心想事成吧,都怪时代不好
- 他把自己的缺点都怪在时代上
- 你干嘛感慨良多
- 没有
- 你现在把那柱香当成你爸了吧,人走了之后,再思念都是枉然,还是得在人在的时候,好好对待才行。
- 我知道
- 为什么男人们都学不会珍惜当下,总是在追逐失去的东西,做着那些虚妄而无法实现的梦,把自己困住,每天怎么会快乐
- 也许吧
- 其实幸福这种东西,没有牺牲就无法入手
「比海还深,比天还蓝」
- 我到这把年纪了,还没有爱过谁比海还深的
- 别说这种孤僻话
- 你有吗?
- 我?
- 还算有吧
- 一般人不会有的啦,但还是每天过得开开心心。不对,就是没有才过得开心,平凡的生活也能自得其乐
- 真复杂
- 单纯得很,人生很单纯的。我刚讲了很棒的名言吧。借你写到下一本小说里。阿良,笔记一下啊
- 不用啦 - 不然会忘记的
- 不用抄啦,我记住了

-- 『比海更深』

热病

在很多时候,我都感觉像是回到了 2019 年的那个十月。我能清楚听到直升飞机在我头顶盘旋着呼啸而过。就像,历史的车轮从身边碾过一样。兵荒马乱,沧海桑田。

战争,全球范围下的疫情,刺杀,游行,第三任期。所有的恐惧是来自种种的不真实感,像是真人 show,或是被人编排好了剧本,充满戏剧性,夸张,难以言说的巧合,阳谋。顺着这样一条线索最终走向宇宙洪荒,或是世界末日。

我想起上高中的时候,忘记是高一还是高二,也忘记是临近暑假还是寒假,总之是临近假期的期末考试,自己在宿舍里头晕脑胀,量了体温以后发现烧到了 38 摄氏度,身边的室友都劝我下午不要去考试了。我想了想,不行,不能弃考。下午考试还是过去了,那是一场物理考试,那次的物理试题出的又比较偏,题目难度也很大。我不知道是不是因为我发烧的缘故,总之那次考试过程,自己的思路竟然异常清晰。最后的考试结果,我是那次物理考试中唯一一个上了 80 分的人,我自己都有点难以相信。

这是关于发烧,最神奇的一次经历。

Fly Me to the Moon

zelda-botw

6 月中旬的 E3 发布会,看到了久违的林克从高空纵身一跃的场景,那时的我心中想的都是,这个 2021 年再也待不下去了,好希望快点到 2022,这样就能玩到 Zelda 续作了。

但真的跟随时间来到这里,心里还是会有许多的感慨,不舍,恐惧。这几天,这个月发生了很多事情。晚上回去也是早早躺下。心想,

哎,又到了此刻。

「可我会永远喜欢你的,这和时间没关系,我想」

每每到年末,大部分时候都是一个人度过。通常的仪式是看一部电影,有几次是用手机录音,对自己说一些想说的话,存储起来,借以日后怀念。一年三百六十六天,发生了许多事情,大大小小。目前的状态是,我会花很多的时间回忆过去,回忆过去的许多事情,玩过的游戏,看过的动漫,拍过的照片。好像未来只会越来越糟,经过大脑滤镜美化后的回忆,无限向往。真的无比想要回到过去,无比想要回去。

“是的。他一直对将有什么消失这点耿耿于怀,其实何必那样呢?任何东西迟早都要消失。我们每个人都在移动当中生存,我们周围的东西都随着我们的移动而终究归于消失,这是我们所无法左右的。该消失的时候自然消失,不到消失的时候自然不消失。比如你将长大成人,再过两年,这身漂亮的连衣裙就要变得不合尺寸,对Talking Heads你也可能感到陈腐不堪,而且再也不想和我一起兜什么风了。这是没有办法的事情,只能随波逐流,想也无济于事。”

“可我会永远喜欢你的,这和时间没有关系,我想。”

– 「舞!舞!舞!」

十年回顾

我在两个月前的某测评网站上做了一次 mbti 测试,测试结果是 INTJ 型人格,「内向,直觉,思考,判断」。所以在大多数的跨年夜,或是某些重要的节日,都是一个人度过的。从 14 年开始每次跨年夜要一个人看一部电影,那一年看的是「蝙蝠侠:黑暗骑士」,今年被好友叫去,说是那边组织的有个 party,于是过去,和一群陌生人完成了跨年,期间的大部分时间都在进行着「聚会游戏」,我极少有机会参加这样的聚会活动,但就这样,稀里糊涂的告别了 2019。

从 2010 到 2019 的这个十年,自己个人经历了巨大的变化,往后不知道是否还会经历相似的十年,但在这个时间节点,我有必要通过某种形式,把我的回忆记录下来。

多个项目共享 Webpack

最近在看 @keyframer 的一系列视频,需要用到 webpack 来配置 scss 环境,这就导致了每一个项目都要重复下载一遍 webpack 和相关的所有 node modules,这样很浪费空间。

因此要想办法把 webpack 独立出来,让每一个项目都可以访问到 webpack,一个方法是全局安装 webpack。这里提供另一种方法,想到我们通常使用 webpack 的情景是,在 package.json 里预先定义好

"scripts": {
    "dev": "webpack-dev-server",
    "build": "webpack"
}

然后 npm run dev。我们需要把这里修改一下,让每个项目都统一调用同一个 webpack。

阅读摘要 | issue #3

Program analysis

GitHub 开源程序分析库 semantics,这里的一篇文章科普什么是程序分析 Program Analysis,以及它能用来做什么?

程序静态分析,program static analysis,意味着在不运行程序的情况下,我们可以知道:

  1. 程序运行时所需要多少内存;
  2. 得到所有的 dependencies 并生成相应的 graph;
  3. call graph,所有的函数调用关系;
  4. control flow graph,字面意思,程序运行时的 control flow,比如 if,for 循环这些;

The Designer’s Growth Model

https://css-tricks.com/the-developers-growth-model/

模仿 Grenier groth model, Dennis Hambeukers 提出他的「设计师成长模型」,分为五个阶段:

  1. 第一阶段是 Producers,生产者,仅仅是作为个体,通过不断学习,设计创造好的 artifacts;
  2. 第二阶段是 Architects,对于稍微复杂的项目,进入多人协作领域;
  3. 第三阶段是 Connectors,不仅仅是多人「协」作,而能够真正做到多人「创」作;
  4. 第四阶段是 Scientists,能够应对系统级别的复杂性 complexity,在更高一层级上进行思考,统筹,降低风险,指明方向;
  5. 第五阶段是 Visionaries,skill, mind, toolset,所有一切集大成者,对于策略,组织,领导力又有着自己独到的见解,对于更远的未来有着自己清晰的解读,清晰的 roadmap;

Lazy Evaluation, foldr | 5kyu

关于 lazy evaluation,首先要明白两个概念:call by name 和 call by value:

// Evaluates with call-by-name strategy
1 function callByName (a, b) {
2  if (a === 1) {
3    return 10
4  }
5  return a + b
6 }
// Evaluates with call-by-value strategy
1 function callByValue (a, b) {
2  if (a === 1) {
3    return 10
4  }
5  return a + b
6 }

两个函数在形式上没有什么区别,只是在运行时采取了不同的策略或态度,前者是 lazy,后者是 eager;

> callByName (1, 2 + 3)
> a === 1
> return 10

> callByValue(1, 2 + 3)
> callByValue(1, 5)
> a === 1
> return 10

使用 lazy evaluation,只用当真正需要读取这个变量或 expression 的时候,才会对其进行运算或 evaluate,也就是字面意义上的 call by need。

实现 lazy evaluation 有很多方法,但其核心概念则是 functional programming。即我们把所有的 variable 写成函数的形式,这样的函数通常被称为 thunk:

JavaScript: Semicolon 二三事

由于 JavaScript 拥有 Automatic Semicolon Insertion 这样的机制,我已经很长时间在写 js 的时候不加分号了。但今天碰到了这样的一个情况:

let i = 0

(function test () {
  console.log('hello')
})()

这里会提示报错:

TypeError: 0 is not a function

观察了一会儿,才发现,JavaScript 引擎一定是把第一行和第三行看成一行代码,按道理,第一行末尾应该是要自动加一个分号的。这里如果我们手动加上分号,程序就不会报错了。

let i = 0;

(function test () {
  console.log('hello')
})()

关于 JavaScript 的 Automatic Semicolon Insertion,规则是这样的:

阅读摘要 | issue #2

The #1 Way to Spice Up Your Designs (And Create a More Cohesive Brand)

在 UI 设计中如何更好的使用 motifs (小的视觉元素),既不喧宾夺主,又能体现 UI 设计的 consistency 一致性。在 foundationmedicine.com 网站看到它们将 hexagon 作为它们 UI 设计的 motif,这分别体现在:

  • Logo
  • 空白处的填充,space filling;
  • 字体,GT Sectra,本身就具有六边形结构;
  • 分割线;
  • 诸如 qutation marks 这些小的 文字元素

同样的视觉设计,分析也可用在 The Intercept ,它们选取 command line 的下划线光标作为它们的 motif,在 Logo,字体,分割线等都有体现。同样在 CSS Tricks,则是把「橙黄渐变」作为一种 motif。

Level up your .sort game

关于 JavaScript 中 .sort() 方法的使用。其中提到的几点关键:

  • While many of the ES5 array methods such as .filter, .map, and .reduce will return a new array and leave the original untouched, .sort will sort the array in place.
  • 要想不让 original variable 发生改变,使用 ...
  • Running functions before comparing values,这里存在一个小的 design pattern;
  • 如何添加 tierbeaker,也就是当出现同样值是有没有第二比较规则,这里用到的 reduce 方法。
  • 如何写一个随机排序;

分类

标签