安全头盔

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

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

我对用户体验法则的一些理解

接触到用户体验法则,是我之前异动时需要写工作交接文档,我是一个做任何事情都想要了解一下这个事情做到极致会是什么样子(虽然我不一定要做到极致)。于是我了解到了文档工程师这个职业,然后通过Nebula的一位文档工程师写的博客,了解到了用户体验法则。在这之前,我对设计人机交互之类完全没有概念,这几个法则倒是打开了我的眼界。 https://lawsofux.com/ 这是一个简单介绍用户体验法则的网站,我想结合我之前的经历和认知来介绍我对用户体验法则的理解。 Aesthetic-Usability Effect Users often perceive aesthetically pleasing design as design that’s more usable. 这个法则,我觉得可以称之为一白遮百丑,人们自然会觉得好看的交互就是好用的,而且可以忍受好看的东西上的一点瑕疵。如果反向思维,如果有一些技术问题暂时无法解决,或许可以尝试先将交互美化一下,这样用户的容忍度就会高一些。 Doherty Threshold Productivity soars when a computer and its users interact at a pace (<400ms) that ensures that neither has to wait on the other. 这个法则说交互时延要控制在400ms之内,这不仅仅对于单次操作来说,我认为最佳理解是,一定要在400ms内让用户有感知系统发生变化。不如进度条的话,应该至少每400ms都变化一下。 Purposefully adding a delay to a process can actually increase its perceived value and instill a sense of trust, even when the process itself actually takes much less time....

May 7, 2023 · 1 min

思想的内耗

这是一篇旧文,迁移到本博客 人到晚上容易想多,这种半困不困的状态很容易进行一种思想上的内耗也就是一种自我斗争,或者说是两个,一群小人在打架。 我为什么要在空间写东西,写给谁看,肯定是写给一些人看的,有些东西读起来那肯定是矫情,让我过个十年再来看可能,我说可能,会觉得有点尴尬,有点幼稚。但那也不一定,就像现在的我去看我以前写的东西,文章或者一些不能成为诗的短句子,有时也会惊艳 “嘿,好家伙,居然能写出这一句话来” 我觉得大家不要嘲笑伤心的矫情的人,就像我看到有小朋友写点矫情的文章。我觉着挺好的,主要写东西是一种发泄。有人难受了喜欢摄入,摄入热量,糖分(吃糖使人分泌多巴胺快乐),有人就喜欢输出。我就是喜欢输出的那一批人,锻炼去输出热量,那是身体的热量,心里的热量只能写字。但也不一定靠写字,讲话也可以,就像我爸爸,喝醉了酒就会呱唧呱唧讲一大堆东西。不过这种算是幸运,总比醉酒了手舞足蹈来的好,那也可能是我爸爸他肚子太大,跳不起来舞。 言归正传,我为什么要写东西,写给谁看。主要目的是输出,发泄。写给谁看,我觉着第一个还是写给自己。写作,其实就像是在以后的自己讲话。这看起来十分孤单,但确实是这样,因为没有人可以讲话啊。人脑又不是多线程的,我没法给自己大脑开一个另一个自己出来,然后两个线程相互交流。据说就算是多人格患者,一个人格出来后其他人格也是休眠状态。 所以只能写给未来的自己看,未来的自己,这个未来有多远。也许不远,就是这篇文章结束后,也许十几年二十几年,我变成了一个老头,或者变成了骨灰盒,又或者我死后变得名声大作,这篇文章被挖出来放进教科书。老师们上课讲着,“啊,公元2021年,储惠龙先生写下了这么一篇文章,问,他想表达什么中心思想”。答:没有中心思想,睡不着而已。要是我这一篇文章入选了小学语文课本,可得乐死孩子们。 人生,事事难料啊,我也写过给多少年以后的自己的一封信,虽然我都已经忘记具体写的什么了。大概就是初中写给中考后的自己,还是高中来着?反正写了张纸条,说你不要难受,不管怎么样,巴拉巴拉之类的。其实读了之后也没有很震撼。相隔时间也没有多少年。说是人全身上下,七年时间,主要的细胞就换了一遍了,也就是七年之后我们可能整个物质层面上就不一样了。所以我觉得,这个写给未来的自己,可能七年算一个比较好的时间。也就是每一次写作,就是在和七年之后的自己对话。那七年之后的我要是死了呢?呜,那就是世界上最残忍的孤独了,连自己都没法讲话了。 写到这里又要想,我是写给自己的,那又有多少人在看呢?我不知道有多人在看我写的东西,有的时候我写的不够吸引人,可能划一下就走了,有的时候我写的过于矫情可能就被人屏蔽了。自大的讲,我觉得屏蔽我的人是他的损失,当然这只是玩笑话。因为我也不喜欢看别人写的文章,或者大部分同龄人吧。基本上瞄一眼就不看了,不好看。或者大家都是这样想法,毕竟同龄人,很容易谁也瞧不起谁。这篇文章我要是写个大作家的名字,只不准就有很多人看了。蒙娜丽莎的那个效应,越出名就越有人看就越出名。 人嘛,没有信仰的时候就要造一点信仰出来。 当然,肯定有人要扣帽子,“啊,你假文艺”,“啊,你矫情”,“啊,有什么大不了的,我也遇到过你这些事”,“啊,这点事情” 或者有过来者,会有一种稍微的优越感来看待这件事,也不是说优越感。大概就是一群人死里逃生,逃出来的人在看还在挣扎的人的那种感觉吧。应该用庆幸比较好。 呜,都是这样,反正多睡几觉就好了。不过想了想,一个人要是生活的平淡了起来,那也是没有滋味的,当然了,我也不想一直难受。人也是挺欠的。 内耗结束。

May 5, 2023 · 1 min

使用GraphQL语法查询NebulaGraph中的数据

人之初,性本鸽。 大家好,我叫储惠龙(实名上网),你可以叫我小龙人,00后一枚。目前从事后端开发工作。 今天给大家带来一个简单的为NebulaGraph提供GraphQL查询支持的DEMO,为什么是简单的,因为本来想完成更多工作再给大家介绍的,但是上个月太忙加上下个月更忙,但是我又很想白嫖一下Nebula官方的奖品,所以就赶紧端上来了。 先上项目地址:https://github.com/Dragonchu/NebulaGraphQL 先简单介绍一下GraphQL,https://graphql.cn/ 详细的信息官方介绍的都很清晰。说一下我的理解,GraphQL并不是对标Cypher这种查询语言,而是对标REST的一种API设计风格。所以严格意义上,不是说使用GraphQL查询图数据库,而是使用一种GraphQL风格的API查询图数据库,或者说是将Cypher封装了一样,这个本质工作和大家做应用开发时,基于Nebula写一些通过的REST接口是一样的。 举个例子(本文的测试数据集使用的官方的basketballplayer数据集https://docs.nebula-graph.io/2.0/basketballplayer-2.X.ngql),如果我想根据科比的名字得到科比的全部信息,可能会使用下面这样的Ngql语句 LOOKUP ON player WHERE player.name == "Kobe Bryant" YIELD id(vertex) as vertexId | FETCH PROP ON player $-.vertexId YIELD properties(vertex); 虽然说Ngql已经很方便阅读了,但是如果让一个完全0基础的萌新来看也是看不懂的,并且这个语句的返回值是不明确的,至少没有办法从查询看到结果。返回值的解析一直也是很多人的痛苦。 那来看看使用GraphQL查询同一场景会是什么情况。 查询语句会是 { players(name:"Kobe Bryant"){ name age } } 返回结果是 { players=[{name=Kobe Bryant, age=40}] } 看看这优雅的查询和返回结果,想必我不多说,大家也都看得懂。这真的是 这其实就是官方对GraphQL的总结: 描述你的数据、请求你所要的数据、得到可预测的结果。 上述的查询在NebulaGraphQL中已经实现了,同时还支持通过VertexID查询数据(好吧,我也就实现了这两种)。 在项目中使用NebulaGraphQL也非常非常的简单,因为NebulaGraphQL本身只想做一个简单的工具库,未来如果想直接集成到MVC框架可能会再起一个NebulaGraphQL-spring之类的项目(画大饼中……)。所以NebulaGraphQL的使用和Nebula-Java是几乎完全一致的。 //创建一个config GraphqlSessionPoolConfig graphqlSessionPoolConfig = new GraphqlSessionPoolConfig( Lists.newArrayList(graphdAddress), Lists.newArrayList(metadAddress), spaceName, username, password); //创建一个连接池 GraphqlSessionPool pool = new GraphqlSessionPool(graphqlSessionPoolConfig); //执行语句 ExecutionResult executionResult = pool.execute("{players(age:32){name\nage}}"); //获取结果 System....

May 3, 2023 · 1 min