看到以前写下的这些话,感慨万千。

死亡是未经证实的谣言。

有人这么对我说过。他把这句话刻在空气里扔给我,头也不回的消失。你知道的,空气里是life的味道。

我在夜里梦到过,一万只羊把头转向我,这种可怕的历史时刻。鞭子挥向空中,沉寂,反抗的萌芽在生长。

憋尿的大姐对我说,好好治疗,以后的路还长。

你如果去医院的走廊坐着,坐一个下午,断腿的中年大叔,玩耍的光头男孩,昏睡的送饭阿姨。或者就去胡同,下棋的老汉,骂咧的抽烟大爷啐一口唾沫,猫,晾晒的衣物,爬山虎,二八杠自行车。索性爬上三十米高处,把头颅猛的扎下去,体验生和死之间的缝隙。

万物生长。

所有一切都不重要,知识,财富,贪图享乐,黄金时代,歇斯底里,词语在失去色彩。世间只有红色,红色拖鞋的颜色。

十三年前,山西南部的一个小镇上,年轻的朱咸鱼满身泥巴,他有思考生死吗,他会成为音像店老板吗,会成为老师吗。

生命力够顽强吗。

做个赌注吧,穿上病号服,反抗。

我跟 Lan 说到:“以后可能再也遇不到这么好的同事了。”

从东坝到兆维工业园的豆瓣,我每天上班都要走一条小路,坝河从这里流过,有两只流浪狗和摆地摊的大爷大妈们。每次赶不上公司早饭的时候,我就会在路边的菜市场门口买个最爱吃的山东脆煎饼(不是那种软塌塌的“老北京”煎饼)。出了这条小路,早高峰会向你扑来,我喜欢这种城市醒来的感觉。

夏天的时候,我经常会和 Lan 带着派派走这条小路,沿着河边从家里走到颐堤港再走回去(用现在时髦的词叫 CityWalk),路上会碰到 Lucky、鲍比、米尔(一只帅气威猛的俄罗斯退役军犬)、来福、小五、虎子(有着水汪汪大眼睛的猛犬)、钱钱、可乐,可能还有“姑娘”。

这条路是我与豆瓣的连接。

拿到豆瓣 Offer 的那天,Lan 在家里激动的蹦了起来。我绘声绘色的给她描述着一头长发还写小说的苏老师是有多酷,说着只加群但从没参与过的徒步活动多有意思,说着十点半到公司同事都没到觉得这地方来对了的调侃,说着一群羞涩的工程师虽然面对面却只在群里聊天的过程,说着鬼大爷如何用破铜烂铁组装玩音乐,说着爱换马甲的卢老师、种西红柿的孬爷爷,说着爱聚餐的 Jintong、喝可乐碰杯的 Xiaofan、写诗的 kusa 等等。

我跟 Lan 在豆瓣相识。这里有我最美好的回忆。豆瓣更像一个乌托邦,构筑了我关于工作、同事、技术的完美想象。从阿北在豆瓣胡同写下第一行代码的那一刻,我注定要说一句:有幸加入豆瓣。

在北京呆了了六年,搬了三次家,捡了派派这条海淀狗(以后就有大草原去玩了),在五环生活区辗转,留下许多只在嘴里的行动。

八月末的这时候变得凉快起来。

再见豆瓣,再见北京👋🏻。

——聂鲁达

正因为时世艰辛,你要等着我,

让我们怀着希望去生活。

把你的纤细的小手给我:

让我们去攀登和经受,

去感受和突破。

我们曾闯过荆棘之地,

屈身于石块堆砌的窝里,

我们又重新结成伴侣。

正因为岁月漫长,你要等着我:

带上一只篮子,你的铁锨、你的衣履。

我们现在要做的,

不仅仅是为了石竹和丁香,

也不是去寻找蜜糖,

需要用我们的手,

去冲刺,去放火,

看这险恶的世道是否敢,

向这坚定的四只手和四只眼睛挑战。

Hatch support support define matrix within a environment (matrix docs), this is so useful when you want to run test against different python version. For example:

[tool.hatch.envs.test]
dependencies = [
  "pytest",
]

[[tool.hatch.envs.test.matrix]]
python = ["3.7", "3.8", "3.9", "3.10", "3.11"]

[tool.hatch.envs.test.scripts]
test = "pytest tests/"

But how to run hatch within github workflow? This post will show you how to do it.

In github workflow you can also define matrix to run job against different python version, maybe you want set CI like this:

name: "CI"

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  run:
    name: "tests & coverage"
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]

    steps:
      - uses: actions/checkout@v3
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install hatch
        run: python -m pip install hatch

      # then run test

If you directly run hatch run test:test, Hatch will try to set virtualenv for each python version.It will failed, because only one system python is installed at each strategy.

Fortunately, hatch can use +py to specify the python version to run env command, so you can change the CI config like this:

- name: Tests
  run: hatch run +py=${{ matrix.python-version }}  test:test

The full CI config:

name: "CI"

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  run:
    name: "tests & coverage"
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v4
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install hatch
      run: python -m pip install hatch

    - name: Lint
      run: hatch run check

    - name: Coverage
      run: hatch run +py=${{ matrix.python-version }} test:test

    - name: Upload Coverage
      uses: codecov/codecov-action@v3
      with:
        files: coverage.xml

Hope this post can help you.

1997 年过去了,我很怀念它。—《甲方乙方》

22 岁之后,人生过得很不太平,就像那头受了捶打的牛。 幸好有 lan,还有派派。

我跟 lan 开玩笑说:“人间值得我留恋的大概只有你了,还有狗派派。”

生活需要勇气。这个小小的家,给了我所有的动力,当然,还有母亲。

2021 年,毅然从某银行辞职,也十分有幸加入豆瓣,这个和 lan 最初相识的地方。也陪伴我走过难忘的求学时光。

新的一年,只希望平平安安,希望 lan 考研顺利。