为什么说生活的仪式感来自于去菜市场买菜?

现在手机买菜很方便,手机点一点,菜就送上门了,但是完全失去了生活的灵魂。我们就像被圈养在钢筋水泥里的牛马一样,等着食物上门。人的活性在于需要去外面觅食。

所以我更倾向于去菜市场。

春天能在菜市场买到什么,和秋天能在菜市场买到什么,肯定不同。为了能感受到这份生活感,去菜市场买菜,就很有必要。去一趟菜市场,听一听菜商的叫卖,和砍价声的来来回回,在城市里生活,才能感受到这份久违的生活气息。这远比吃预制菜,网上买菜更有烟火气。

在菜市场买菜,一定是要货比三家的,买到性价比高的,才是去一趟菜市场的真正快乐。

菜商的大声叫卖,我只是听一听,就好像能为生活充上了能量一样。

有些人非常地积极入世,不管是工作还是生活都充满了能量,完全不知老之将至,一心扑在工作岗位或者是一分一厘的争夺中。菜商们大声叫卖,脖子的血管充血暴露出来,生活的用力,这总能给人一种鼓舞。

我们现在吃饭十分浪费,很大原因是这份饭菜不是自己做的,自己既没有买菜,又没有洗菜,只是从自己账号上划走了一笔数字,饭菜没有吃完自然丝毫不觉得可惜。

我内心里时常默念,感谢上帝赐予我食物,阿门。虽然我不知道阿门是什么意思。

从菜市场买来一些菜,你要择菜洗菜,再慢慢切肉,榨出猪油再去翻炒,还要洗锅,洗砧板,把这一套流程做完,估计已经过去了两个小时,然后再开始吃饭,试试盐味够不够,慢慢的咀嚼起来。这好像是来自古老的祭奠仪式。

既然是一种仪式的话,每种仪式里估计都有一些特殊的东西。我国的食品安全一直是特别的问题,导致我很难去信赖任何一个品牌,进入自己嘴里的食物,没有亲眼见过始终不放心。

我已经放弃购买食用油,每次要吃油了,就用猪肉榨油,或者打个鱼汤。为了让厨房的东西越来越少,我把海天酱油也丢了。海天酱油卖给日本人的配料表似乎更好。什么味精鸡精也通通丢了,这些调味品真的会让食物更美味吗?反正我是感觉不出来,反而让我承担了更多的食物安全的风险。

我的菜里唯一的外来物就是盐。从食物中吃到原味,生活也一样,就不会腻。

面试不过的前端简历都有这 10 个特征

2025 年团队多出了两个名额,加上原有团队成员变动,导致这一年几乎都有面试。刚开始初次面试,还有点新鲜感,面到后面,只觉身心俱疲,难怪喊老板面,老板都不想参与。

经过一年的面试,我发现具有以下特点的简历都不能通过面试,不是说简历没有写好面试不能过,而是因为本身的素质导致写出了这样的简历。

继续阅读“面试不过的前端简历都有这 10 个特征”

我已经很久不用洗发水和沐浴露

用洗发水和沐浴露是小时候就养成的习惯了,从来没有思考过,为什么要用。我也没有去考究洗发水这种东西是什么开始流行的,一直觉得这个得必须用。直到 2022 年,一次洗发水用完了,我再也没有买。

一开始不用洗发水是觉得自己可能要秃顶了,得排查一下原因,先控制一下变量。刚开始几天,确实有点不习惯,觉得头洗不干净,有点油。过不了 2-3 个月,就适应了。人体是很神奇的系统,会自我调节,自己控制出油量。以前 2 天不洗头,黏糊糊的感觉似乎能造出任意发型了。现在 2 天不洗头,也不会觉得很油,脑袋感觉还是很清爽。

继续阅读“我已经很久不用洗发水和沐浴露”

从几个单词聊香港大火

《红楼梦》的英文译名,有几种译法,一种是《A Dream of Red Mansions》,一种是《A Dream of Red Chamber》。我特意去查了一下,mansion 和 chamber 这 2 个单词是什么意思,用的字典是《牛津高阶英汉双解词典》。

mansion:a large,impressive house。中文译为公馆,宅邸。大而漂亮的房子,很符合贾家的大门大户。

chamber:a hall in a public building that is used for formal meetings。中文译为会议厅,这个翻译似乎不是很妥当,没有上面的贴切。

自然而然,我也联想到了 house 和 building 是什么。我们也来一起查一下。

house:a building for people to live in,usually for one family。房屋,住宅。只针对一家一户的。

building:a structure such as a house or school that has a roof and walls。建筑物,楼房。这个单词更偏向建筑,不一定指代是家,还有更多钢筋水泥的味道。

继续阅读“从几个单词聊香港大火”

A monad demo given by AI

// Generic Monad structure
class Monad {
  constructor(value) {
    this.value = value;
  }

  // Bind: chains computations that return a Monad
  bind(fn) {
    return fn(this.value);
  }

  // Unit: wraps a value in the Monad
  static of(value) {
    return new Monad(value);
  }

  // For debugging
  get() {
    return this.value;
  }
}

// Example: Maybe Monad
class Maybe extends Monad {
  bind(fn) {
    if (this.value == null) {
      return new Maybe(null);
    }
    return fn(this.value);
  }

  static of(value) {
    return new Maybe(value);
  }

  getOrElse(defaultValue) {
    return this.value == null ? defaultValue : this.value;
  }
}

// Demo: chaining computations with Monad
const double = x => Monad.of(x * 2);
const increment = x => Monad.of(x + 1);

const result = Monad.of(5)
  .bind(double)      // 10
  .bind(increment);  // 11

console.log(result.get()); // Output: 11

// Demo: chaining with Maybe Monad
const safeDivide = x => x === 0 ? Maybe.of(null) : Maybe.of(10 / x);

const maybeResult = Maybe.of(2)
  .bind(safeDivide)       // 10 / 2 = 5
  .bind(x => Maybe.of(x + 3)); // 8

console.log(maybeResult.getOrElse("fail")); // Output: 8

const maybeFail = Maybe.of(0)
  .bind(safeDivide)       // null
  .bind(x => Maybe.of(x + 3));

console.log(maybeFail.getOrElse("fail")); // Output: "fail"

maybe functor

class Maybe {
  constructor(value) {
    this.value = value;
  }

  // Functor map: applies a function if value is not null/undefined
  map(fn) {
    if (this.value === null) {
      return new Maybe(null);
    }
    return new Maybe(fn(this.value));
  }

  // getOrElse: safely extract value with a fallback
  getOrElse(defaultValue) {
    return this.value === null ? defaultValue : this.value;
  }

  // static helpers for convenience
  static of(value) {
    return new Maybe(value);
  }

  static nothing() {
    return new Maybe(null);
  }
}

// Example usage:
const maybeNumber = Maybe.of(5)
  .map(n => n * 2)
  .map(n => n + 1);

console.log(maybeNumber.getOrElse(0)); // Output: 11

const maybeNull = Maybe.of(null)
  .map(n => n * 2);

console.log(maybeNull.getOrElse(0)); // Output: 0

记一次花xxx块钱通过黄牛坐高铁

通过这次坐高铁,我觉得自己很机械,不会变通,黄牛出售的是一种思路,一种很普通简单的思路,感觉被收了智商税,书读了那么多年,反而像是被教育害了。社会让我们做一个守规矩的人,回头看,要懂得逾越规矩时,人已经老了。

人要有创新思维,打破常规。创业赚钱也是这个道理,工作中想要轻松的工作也是这个道理。

继续阅读“记一次花xxx块钱通过黄牛坐高铁”

我的高考

最近看了同事的一篇谈及自己高考的文章,想到了自己的高考。我是 2012 年参加高考的,过去了 13 年,但是你让我回忆高考那几天发生了什么,我却记忆犹新,恍如昨日。

高考一经考完,班里的同学都在组织聚会,觉得过了一个很大的人生节点,很有必要庆祝或者放纵一下。而我想的有点奇怪,觉得应该激流勇退,并没有参加那个晚上的 ktv ,至于那场聚会有多少荒诞不经或者洒泪留恋的场景就不得而知了。

继续阅读“我的高考”

一个前端组长要关注哪些东西?

团队

  1. 人才梯队培养:目前 ecad 团队缺乏中高级前端;
  2. 团队文化建设:软件追求高效,稳定;代码追求易读易维护易扩展;个人追求成长进步;
  3. 做好知识沉淀和积累:api 的稳定,团队分享,文档,code review;
  4. 团队目标制定:okr 的制定,以及协助团队实现。

产品

  1. 版本管理:实现既定目标的版本发布,需求的迭代管理;
  2. 产品定位:以用户视角考虑问题,明白产品要解决的核心问题,技术为产品服务;
  3. 构建产品的方法论:完成比完美重要,注重提炼核心需求和产品基础能力;
  4. 关注市场反馈:关注市场变化,市场数据,用户的反馈。

个人

  1. 沟通表达能力提升:清晰传达需求,向上管理预期,向下反馈问题,学会聆听;
  2. 领导力的建立:阅读一些管理类的书籍,更好的组织团队,带领团队;
  3. 思维转变:个人产出,变成团队产出;
  4. 专业知识学习:持续学习编程的基础知识。