十年生死两茫茫,不思量,自难忘。
腊月初五, 2024年1月15日,是爷爷的十年忌日,严格来说是九年。按老家习俗,奶奶健在的话,要提前一年过。
2014年秋,爷爷持续胸闷、失音,去县医院检查,肺癌晚期。父母嘱咐了亲人、街坊邻居,不要把真实病情告诉老人家。
我是在国庆节知道这个消息的。国庆节期间,我和老婆每天骑着电动三轮车带爷爷去镇上的卫生室输液,老婆会买些零食给爷爷吃,还把我们在外面拍的一些照片给爷爷看。老人家像小孩一样,很开心。旁边的护士不时投来羡慕的眼神,其实她们也不知道爷爷得的什么病,否则她们应该投来怜悯的眼神。
这时候正是北方秋收时节,爷爷还像往年一样帮忙干些农活,家人们也不会去劝阻,免得他生疑,只是背过身去偷偷抹眼泪。
2015年元旦,我和老婆回家看望爷爷,这时候爷爷已经很虚弱了。当老婆指着自己的肚子告诉他,我们有了宝宝时,他像孩子一样开心的笑了。
我们带了点灵芝回去,围着煤球炉子给老人家煮水喝,告诉他是治肺病的。爷爷捡起一片药渣捏在手里,问我们怎么知道能治”这个病”,我没想到爷爷会问这个问题,胡乱告诉他说,杭州的胡庆余堂很有名,他们见多识广,啥病都能治。老人家沉默了很久,将手中的药渣子丢在了炉灰里,不再做声。
爷爷是个很要强的人,父亲告诉我,爷爷从没主动问过自己的病到底是啥病。我猜他心里早已有了答案。
元旦假期很短,第三天早上,我和老婆去和爷爷道别,他还没起床,挣扎着尝试从被窝里坐起来,但没有成功。我们安慰他不要起来了,外面太冷,再过一个多月就过年了,我们就又回来了。
没想到,这一别竟成了永别。
回到杭州,我和老婆一直在为保胎奔波,爷爷的病情也在急剧恶化。
2015年1月23日,周五,医生告诉我们胎儿已停止发育,必须终止妊娠。 下午接到父亲电话,爷爷病危,尽快回家。虽然知道这一天迟早会到来,但没想到这么快。考虑到老婆现状,我买了当晚的火车票独自一人回家。
列车上空荡荡的,我脑海里浮现的都是和爷爷的过往。 我从记事起很长一段时间都是跟爷爷睡在老院的堂屋西间,墙上有张下山虎的画我很害怕,爷爷就说有我在不怕。夏天我和爷爷睡在西瓜地的帐篷里看瓜,一大早爷爷带我去捉知了,一棵大榆树,用力踹几脚,就会落下来很多刚脱壳的嫩知了,可以炸着吃,虽然我不怎么敢吃,但感觉很有趣。
迷迷糊糊的,我在火车上睡着了。不知过了多久,我在睡梦中哭醒了,天已破晓,火车尚未到站,外面下了好大的雪。
再往家打电话,背景音中传来一阵阵哭声,我知道爷爷已经不在了。后来父亲告诉我,爷爷是在后半夜去世的,当时下着鹅毛大雪,按老家的说法,这是好兆头。
我到家的时候,爷爷已经躺在了冰冷的棺材里,送葬仪式早已开始。
最后送别爷爷的时候,父亲让我摸了摸爷爷的手,我想起了元旦时他默默丢弃“灵芝药渣”的瞬间,老人家到死也不知道自己得的什么病,我想,或许他早已知道答案了。 仪式很长,作为孝子孝孙的我跪在雪地里,膝盖下的雪暖化成冰水,浸透了衣服,刺骨的疼,再加上各路亲友呼天抢地的哭声,很是悲怆。
作为一个老农民,爷爷葬在了自己耕耘多年的田地里,我认为这是很好的归宿。
送别了爷爷,回到杭州,陪老婆做了流产手术。刚毕业踏入社会的我,感觉人生到了低谷。 一个多月后,春节如约而至。因为家里有人去世,那年的春节,以及后续三年,我家是不贴春联的。
2018年1月21日,爷爷的三周年忌日,由于老婆怀大宝临产,我独自一人回家。说实话,三周年忌日,悲伤还是有的,但更多的是对老人家过往的怀念。
2024年1月15日,爷爷的十周年忌日,按老家风俗,这是个半忧半喜的事情。由于老家太冷,怕刚满九个月的二宝吃不消,我和老婆、大宝、二宝留守杭州,仅父母回去操办。
胡马依北风,越鸟巢南枝;兽犹如此,人何以堪。初中时读刘庶凝的《还乡梦自序》便爱不释手,没想到这竟成了自己人生的写照。 我注定是和故乡逐渐割裂的一代,我的父辈深深眷恋着他们生活了大半辈子的地方,我的子辈甚至不知道老宅在哪里,祖坟在哪里。
我和家人都很喜欢《寻梦环游记》这部电影,假如真的有亡人世界,只要我在现世生生不息,我们一大家人总有团聚的那一天。
–致敬我的爷爷
2024.01.12
在常规的面向对象语言中(比如C++),this指针的指向是确定的。但在JavaScript中,this指向依赖于运行环境。
下面的例子,预期的输出是nihao
:
class A {
setEventListener(func) {
this.callback = func;
}
triggerEvent() {
this.callback();
}
}
class B {
constructor(a) {
a.setEventListener(this.onEvent);
this.localValue = "nihao";
}
onEvent() {
console.log(this.localValue);
// console.log(this);
}
}
var a = new A();
var b = new B(a);
a.triggerEvent();
但实际输出是undefined
。
在onEvent中打印下this
,可以看到,它指向的是对象a
而不是b
:
A { callback: [Function: onEvent] }
这是因为在JavaScript中,this指向依赖于运行环境。上面的回调是被对象a执行的,所以onEvent
的执行上下文是对象a。这有点像dart的Mixins。
可以在注册回调的时候,调用bind
函数强制进行强制绑定,将下面的代码:
a.setEventListener(this.onEvent);
改成:
a.setEventListener(this.onEvent.bind(this));
这样就能得到预期的输出nihao
。
关于JavaScript中this指针,可以参阅下面几篇文档:
capabilities将系统root权限按功能单元划分,使用者按需打开/关闭相关权限,比基于UID的权限控制方式更精细。
不过,Linux下的capabilities是线程相关的,同一个进程的不同线程可以具有不同的capabilities权限,使用不当,可能会造成权限泄露。
可以使用libpsx规避该问题,它的原理很简单,就是把当前进程中所有线程的capabilities设置一遍。
本文主要介绍fork导致的死锁问题及其解决方法。
本文介绍在共享内存中自建hash的一种方法。
Cyber RT是apollo的运行环境框架,提供了模块动态加载机制。
本文基于apollo v6.0介绍Cyber RT的模块加载流程。