写给树先生的信

这是一篇旧文,迁移到本博客 hello,树先生: 我十二岁左右时,很喜欢在村子里骑自行车。路边的树会不停地掠过身边,有的时候,在很多很多树的残影中,会站着一个人。穿着臃肿肥硕的灰裤子,皱巴肮脏的灰衣裳,手指上都是泥和油渍。也许他的衣裳是有颜色的,但已经脏的结了垢。我没有见过他哭,他永远是很开心的样子。有的时候,还会有一个女人站在他旁边,一样的裤子和衣裳,一样的呆笑。 他的人是几乎不会变样子的,能变化的是他手中拿的东西。有的时候是邻居施舍的饼干,有的时候是不知道哪里来的橘子。 没见到他时我是不会想起他的。 今年回家,我在路边又见到了他,和几年前,一模一样,我惊讶于他这么多年居然没有一点点变化。哪怕是时间的流逝也没有在他身上有一点体现。 我的表姐跟我说,我小时候见到的是他的哥哥,这个是弟弟。 “那他哥哥呢?” “好几年前就死了,他妈妈是个呆子,生了两个儿子也都是呆子,他爸爸也不知道在哪里。” 我想起来,是从某个时间开始,我再也没有见到和他站一块的女人了。 没见到她的时候我是不会想起她的。 我骑电动车回家时,我已经很久没有骑自行车了。他手里拿的是橘子,橘黄,是他浑身上下最透亮的颜色。 时代抛弃了多少人,忘记了多少人。 我们在没有见到他们的时候,是不会想起他们的。

June 12, 2023 · 1 min

这是一篇旧文,迁移到本博客 昨天大奶奶去世了,被装在冰柜里面, 不是可以制冷的棺材,就是装冰棍的冰柜, 冰柜上还印着“xx电器”。 大奶奶生前有诸多艳情,在场的各位没有一个落泪。 烧千纸的时候,跪着的儿孙们都尝试用着各种方式调整跪姿,极度渴望千张纸早点烧完。 丧事办的很草率,没有敲锣打鼓,没有和尚念经,大家都好像是松了一口气。 如释重负,是最好的形容。 冰柜上铺了一块红布,放在大奶奶的脸正上方。我没有去看一眼大奶奶,已经很久没有见过她了。她病重时我也没有见过她一面,对于我来说,大奶奶似乎只是一个故事里的人物,一个和我有着关系但我却又不曾真实接触过的人物。倒是我的侄女,马上上小学的小孩子,好奇地垫着脚去看冰柜里面是什么。她垫着脚攀着冰柜边缘,向里面探望时,眼神由好奇转为惊讶。随后被我妈妈拉开了。 我的北边爷爷去世时,我也是这样往冰柜里看去。不过,我的北边爷爷的冰柜是很精致的冰棺材,里面还有一圈霓虹灯,至于周身有没有广告我就记不清了。 我记得那是周五的下午,刚放学,一个朋友的母亲很急切地从人群中找着我。她似乎是很想当第一个把这件事透露给我的人,这样以后可以把我的反应当做她独一无二的谈资。事实也是这样,当我表现出震惊,茫然,伤心的时候。我是从她的脸上读出了心满意足和同情这两种含义的,这二者并不矛盾。 回到北边爷爷家时,我看到他躺在冰柜里面,双手交叉放在胸前,身边有一圈霓虹灯。鼻孔里结了冰霜。我不知道我是被吓哭的,还是因为失去亲人难受。我跑出堂屋,在路边哭泣。这便成了大人们的谈资——这孩子真孝顺。似乎是很难得的事情。 小时候我以为我的哭是人之常情,慢慢地发现是难得可贵。 不过那时的我是上初中了,再往前,我和我的侄女一样大时,我也有个亲戚去世了。我不记得那是什么亲戚,我只记得送她去火化的前一天晚上,我的父亲那一辈门在堂屋打了一晚上斗地主。我和我的表哥,拿着两副扑克,打了一晚上的小猫钓鱼。最后也没分出胜负,就被拉上了车。车子后面会拖着长长的竹子,车里面是已经离去的人儿。 不知道大奶奶送去火化的时候,车尾会不会拖一根长长的竹子。但我敢肯定,大奶奶前几个月在路口种的那棵树应该要被人偷偷砍了,之前她的邻居和大奶奶就这棵树吵了好几天。 其实我奇怪的是大奶奶的孙女们也都没有哭,可能是都哭过了吧。

June 12, 2023 · 1 min

大坟茔

这是一篇旧文,迁移到本博客 村里有个大坟茔,我爷爷说里面埋了一个抗日时期的官,在那个大坟茔不远的地方有个万人坑。是埋抗战时期新四军的。 “那个万人坑就是埋新四军的,那时候当兵的人脑袋上戴的帽子,黄的那种,像日本鬼子那种帽子,还有绿色的,蓝色的,上面有五角星,就把他们帽子理好。人死了身上有那种血,就整理干净,然后用大白布把人一裹,挖个大坑,往里面一个一个堆,就跟埋得了流感的鸡一样。” 那个大坟茔里埋的人,大家都不知道他是谁,只知道官很大,也不知道什么时候,是谁把他埋在这里的。大家都说这个大坟茔很灵,据说有的晚上这里面的官还会把万人坑里的兵带出来练操。 文化大革命的时候,我爷爷是学校里的红卫兵,扛国旗的那种。那时候镇上要铲坟,挖坟,镇里的书记拎着铁锹,带着我爷爷他们那帮小红卫兵去挖坟。书记亲自挖这个大坟茔,一共挖了三锹,第四锹还没下去,人就仰了。后来就没人敢碰这个大坟茔了,当时还是我爷爷那群小红卫兵把坟给填好的。 我爷爷说,那个坟不是普通的坟,它不是挖个坑把棺材埋进去,而是直接把棺材放在地上,然后往上盖土盖出一个坟的。里面的棺材也和普通的不一样,是一个红色的大箱子,两头下面有小支架支起来,箱子方方正正的。 每年都会有人给大坟茔扫墓,要从旁边的地里挖一个圆台形的土堆,然后把小的那一面朝下摆在坟茔上,在大的那一面上的边缘插满嵌这红色纸的干芦苇。清明节风吹过的时候很好看。

June 12, 2023 · 1 min

安全头盔

这是一篇旧文,迁移到本博客 安全头盔 像黄色小太阳 骑着电动车 一辆又一辆 穿过小轿车 车窗被摇下 一声又一声 熟悉的咒骂 安全头盔 匆忙地回家 儿子在澡盆 洗澡月亮下 安全头盔 摆在酒瓶旁 绿色的玻璃 华丽的琉璃 远处的高楼 酒碗中倒影 安全头盔 摆在小桌旁 贪婪,自私,愚蠢 同情,怜悯,善良 一遍又一遍 回荡在耳旁 重复的故事 重复的诉说 重复的酒菜 重复的小桌 安全头盔 摆在小桌旁 鼾声轰隆如雷响 一直到天亮 安全头盔 来到高楼上 踩着脚手架 头上是梦想 脚下是希望 希望一落空 抓不着梦想 安全头盔 摔在大地上 融化的夕阳 像历史的洪流 顺着柏油路 爬行并挣扎 安全头盔 摆在了小桌上 红色的药丸 一粒又一粒 慢慢不见啦 黄色的药水 一滴又一滴 慢慢不见啦 天上的星星 一颗又一颗 慢慢不见啦 地上的人儿 一个又一个 慢慢不见啦 安全头盔 一只小蜘蛛 钻进缝隙里 织起了小网

June 12, 2023 · 1 min

纸箱(一)

“叔叔,你有孩子吗?你可以买一个暴龙吗?”路边一群小孩簇拥过来,在傍晚的小区中像一个到处捕捉灵魂的怪物。 三儿当然没有理会,只是口罩下嘴角控制不住上扬,已经到了被问有没有孩子的年纪。三儿踢开石子,肚子里刚刚狼吞虎咽进入的螺蛳粉还是温热的,转动一下身子,感觉肚子中的粉似乎团结在一起互相交织组成了一艘小船,酸笋作为木头,腐竹就成为船帆,在汤水中乘风破浪。突然一阵反胃,脑海里闪过故意被遗忘的场景。那已经是三周前的事情了,原本用来自动压扁纸箱的机器不凑巧的压扁了李元的手,鲜血和一些碎肉骨屑溅到了三儿的脸上。 三儿擦了擦脸,到了电梯门口,里面站着一个推着巨大推车的大汉,大汉按着电梯的开门键等着三儿上来。三儿沿着推车旁留下的狭小通道了电梯角落的一点空间,拘谨着身子。电梯门口陆陆续续站满了人。一位年轻的女士带着一位有些瘦弱的老头,一位挎着小包穿着老上海式旗袍的老妇人,一个拖着小单车的小孩子,一个拿着最新款苹果手机的初中生。大家看到电梯里的大推车,显然在纠结是否要上这一班电梯。推车大汉带着很重的家乡口音向电梯外招手,“看啥捏,来站着这个车子上。” 年轻女士身边的瘦弱老头非常有积极性地站了上来,笑笑嘻嘻的,在小踩了一下推车确定稳定性后,乐呵呵地对着女子招手。年轻的女士脸上带着不愿意,还是小心地站了上去。初中生和小孩带着年轻人的活力自然也踩上了推车。挎着小包的老妇人,理了一下小包的链子,并没有了选择站在小推车上,而是沿着本就拥挤的推车旁过道挤了进去。三儿很瘦,所以能双脚站着,但是老妇人显然有一些丰腴美,只能前后各一只脚扶着电梯才能站牢。三儿能闻到老妇人身上的洗衣粉味道,是薰衣草味儿的,中等阶级常买的牌子。 推车大汉似乎和瘦老头认识,聊得热火朝天,小孩挨在自己的单车旁发着呆,初中生一直高举着自己的苹果手机,嘴巴不停发出奇怪的声响。老妇人和年轻女生始终盯着电梯不断向上显示的数字。 7楼到了,年轻女士门开到一半就已经到了门口,对着老头小声催促到,“快下来”。老头还有点念念不舍大推车,女士几次催促他才下去。电梯关上了门。推车大汉对着三儿说,“他们是山西的是吧,听着口音很像。”三儿嗯了一声,没有继续回答。没有了推车大汉和老头的交谈,电梯变得安静了不少,只有苹果初中生还在不停地发出奇怪的声音。 9楼到了,三儿小声说着,“借过”,从老妇人还有苹果初中生中间挤了出去。电梯门关上的瞬间,薰衣草的洗衣粉味道与苹果初中生的嘀咕声都消失了,只留下了空荡的走廊。很有意思的一点,虽然三儿只租了自己的一间一居室,但是觉得走廊也是自己的,因为自己从来没有在走廊遇到过邻居,已进入走廊就差不多已经到了个人领地。白天被世界推着走了一天的身子,在这一瞬间疲劳从脚底如闪电般窜到头顶。 三儿不清楚自己是什么时候睡着的,阳光隔着劣质窗帘和眼皮刺激着视网膜。昨晚并没有做梦,倘若做了,今天可以回味一天。煮两个鸡蛋,去洗手间,吃两个鸡蛋,刷牙洗脸。照一下镜子,胡子已经两天还是三天没剪了?一个个冒出了小尖。眼球里的血丝依然很多,每天都在抗议睡眠不足。三儿闭上眼睛,转动着眼球,以期待它还能再用几年,转动的时候,眼球的根部非常的酸痛,像眼球在吃腌黄瓜。 三儿从上往下像擦桌子搬抹了一把脸,李元的血肉总是觉得还在脸上,希望李元安康,但是三儿今天要去约会。

June 3, 2023 · 1 min

三十岁死在北京

今年我23岁,诚然,我不认为我的前23岁过得很出彩。我的童年算是苦中作乐,拥有回忆点。我的小学是被自卑塞满的时间段。我的初中是暗恋与自大的时间段。我的高中是天才陨落的时间段。我的大学是颓废荒唐的时间段。 我现在23岁,是我目前觉得我最好的时间段。科学没有骗我,23岁到25岁是人最清醒的时间。我的18岁到22岁,每天脑子都是糊的,我不知道我每天都在做什么。过得稀烂。现在的我目标很明确,行动很果断,拥有一个相对正常可用的身体,我每天都有新想法产生,我也会将它实现。我隔一段时间就会爱上一个人,我也勇敢去爱,也勇敢去放手。 我懂得如何去爱,懂得如何工作,懂得如何平衡生活,懂得微笑,懂得观望,懂得潜伏。我像一头训练有素的猎豹,潜藏在北京的高楼大厦中,伺机而动。 我才23岁,但我的寿命只剩下7年。 25岁之后,我的身体一定会走向衰老。我会慢慢有皱纹,我的发际线会开始后退,我的父母也要正式进入老年。我的爷爷奶奶会在某个时间点跟我告别。我需要做好准备,不只是物质上的。 我见过很多30岁的人。我的父母30岁时我在读小学,我的家境不富有,我曾在电话中向妈妈哭诉没有钱买新裤子。我的母亲说当时她放下电话后就不停地哭。那时她也才30岁。是这个社会中最底层人民中的一份子。有人30岁已经成为了机构负责人,有人30岁在考虑换掉一份工作,有人30岁有了自己的孩子,有人30岁还在勾搭比自己小5岁的异性。 不少人和我说过,在我这么大年纪的时候他们也很有冲劲,但随着时间,到了快30岁时就都慢慢地停了下来。还有7年,我就30岁,而7年前我16岁。 16岁的那年,我在玩儿守望先锋,我去网吧被班主任逮到,在其他“队友”都供出“同伙”时,我直到最后都说自己是一个人去的网吧。班主任于是在学期末给我评了“很讲义气”四个大字。16岁,我的目标是考上苏州大学,我爱慕一个学姐,每天升旗我从来没有看过国旗,一直在远远看着她。我没有伟大的目标,我只想每一次考试都可以考得很好,以及每天可以看到学姐。我也没有想过我会在北京工作。 还有7年我就30岁,现在的我不想留在北京,我想回去上海。我不想找北方的姑娘,我怕在北方留下念想,再也回不去南方的家。我想在30岁前财务自由,我想25岁做到架构师,30岁做到机构负责人。我想30岁前去上海。于是我每天起床后,就在掐着秒表盘算离30岁还有多久。也许会觉得很累吧,但是死亡迫使我不断前进。 但是有一位30岁的人告诉我,她在我这么大的时候也是想在北京打拼几年再回家,但是资源人脉慢慢的都在北京建立,回家后先前的朋友们都各奔东西。留在北京是因为没法不留在北京。 倘若30岁,我仍然只是一个普普通通打工人,我找了一个没有那么爱的伴侣,生了一个应该生的小孩。我的肉体在北京,但是我的灵魂已经在30岁死在北京了。 北京对我而言是一个坟墓,我在这个坟墓中向下不断挖着试图挖到宝藏,如果我不注意,那在下一次抬头的时候相比已经陷入自己的坟墓而无法挣脱了。 我当然也会那样认为,大部分奉劝我的人都是失败的奔跑者罢了,起点枪声响起,所有的人一股脑冲出去,哪些没有坚持跑到终点的人总喜欢对后来者说是风太大。希望如此,希望我能够跑到终点。 不管怎么说,在30岁死在北京之前,我不能在北京留太多的念想。也许是找一个南方的姑娘,也许……,我想只能找一个南方的姑娘。

June 1, 2023 · 1 min

列车

原本我会每天坐上八点零八分的列车 因为思绪飘渺到了昨夜 晚落在阶梯的一脚最终停在了关闭的门前 下一班列车是八点十三分 我竖起了衣领拉低了帽檐 如果这一班列车可以直达你的城市 如果这一班可以回到那年的圣诞节

May 22, 2023 · 1 min

流星

从某一个日子起,我经常想到流星。小时候我见过三次流星,第一次我许愿我想成为一个机器人,第二次我许愿我想有一个大房子,第三次我许愿我可以正常走路。 从某一个日子起,我觉得自己就是流星。 流星划过天空,黑夜被划开一道细长的口子。我经常在深夜看着天空,黑色的天空和蓝色的天空给人的感觉很像,一开始看时会感觉很远,如果凝视着时间长了,周边的世界便开始模糊,天空好像不断地压下来,直到感觉吸不上气,我才会猛得起身,深吸一口气。这和游泳很像,我出人意料地不怕水,也许和我喜欢看天空有关。第一次下水时,我直接把脸扣在水面上,身体飘起来,我仔细看着泳池底部的砖纹,水也是蓝色的,但是是透明的蓝,我知道它的尽头是瓷砖。而天空的尽头是什么?我吐着泡泡,直接最后一口气吐完,猛的抬起头重新呼吸。 流星似乎在告诉我天空的背后是什么。每一次流星闪过,我都想透过白色的尾迹窥视一下天空的背后,她在遮挡着什么?但是我并看不透,因为太短,我只见过三次。 而后我再也没有见过流星了,是我抬头的次数太少了,还是因为空气污染愈发严重?我也不知道,只是最近我总是想起流星。也许是看不透她,也许是感叹她的转瞬即逝,也许是知道流星的闪耀是在大气层中燃烧自己的生命。大部分流星都会燃烧殆尽,那些幸存者也大概率变成一颗小石子落在树上或者砸起一朵小水花。 但是许愿的瞬间总是美好的,会遗憾吧。也许会遗憾吧。

May 22, 2023 · 1 min

RestTemplate使用

初始化 RestTemplate未来是要被弃用的,现在推荐使用webclient。 如果轻度使用,直接new一个RestTemplate就可以。 最小引用包是spring-web,如果引入spring-boot-starter-web这种很重的包会顺带启动tomcat。 在service中自动注入RestTemple restTemple. 自动注入需要先实力化,可以在启动类中(spring的各种初始化没认真看,得找个时间细学一下) @Bean public RestTemplate restTemplate(RestTemplateBuilder builder) { return builder.build(); } 使用 post MultiValueMap<String,String> params = new LinkedMultiValueMap<>(); params.add("key","value"); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("url"); URI uri = builder.build().encode().toUri(); ResponseEntity<MyClass> response = restTemplate.postForEntity(uri,params,MyClass.class); get restTemplate.getForEntity(uri,MyClass.class); get方法拼接参数 // request url String url = "https://google.com/search?q={q}"; // create an instance of RestTemplate RestTemplate restTemplate = new RestTemplate(); // make an HTTP GET request String html = restTemplate.getForObject(url, String.class, "java"); response.getBody(); 中文乱码问题: restTemplate....

May 21, 2023 · 1 min

NebulaResultSetBoot

Nebula查询结果的封装对象ResultSet比较复杂,原因是需要保存数据类型。而JSON的一大缺点就是无法保存数据类型,当然这是它简洁的代价。 在实际生产过程中一些应用场景对数据类型并没有太多要求,典型的例子是可视化。很多小伙伴都有将valuewrapper转为自定义json对象的需求,或者是将官方的图模型映射到自己的领域模型的需求。我这里提供一个我写的框架抛砖引玉。 代码地址:https://github.com/Dragonchu/NebulaResultSetBoot https://github.com/Dragonchu/NebulaResultSetBoot 核心代码很简单,就这不断的判断value wrapper的数据类型,然后递归进行解析。 这里讲一下我个人对于nebula ResulSet模型的理解吧,Nebula的点是由id加tag列表组成,而每个tag对象里是tagName和一个属性Map,有很多人建模的时候只用单tag其实是没发挥这种模型的潜力的。 public class Vertex { private final String id; private final List<Tag> tags; } public class Tag { private final String name; private final Map<String, Object> properties; } 边的模型比较简单,起点,终点,属性,rank,edgeType。 public class Edge { private final String src; private final String dst; private final String name; private final Long ranking; private final Map<String, Object> properties; } 路径的模型有一个段(segment)的概念,每个segment是一个三元组,<起点,终点,边>,对于独立的点,起点和终点是相同的。而路径是一个段列表。 public class Segment { private final Vertex src; private final Vertex dst; private final Edge edge; } public class Path { private final List<Segment> segments; } 这样再去看ResultSet会比较明朗一些。

May 12, 2023 · 1 min