碎碎念

陪她去流浪 新建

找了半天的图片转文字(OCR),要么是收费昂贵、要么是安装复杂、要么是识别效果差、要么是中文不友好……

咋的,是家里手上花几万块钱买的 MacBook Pro M2 32G 它不香吗?🤔

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//
//  main.swift
//  ocr
//
//  Created by Yang Tao on 2024/5/31.
//
import Foundation
import Vision

func recognizeText(_ path :String, completion: @escaping ([String]) -> Void) async {
	let handler = VNImageRequestHandler(url: URL(fileURLWithPath: path, isDirectory: false))
	let request = VNRecognizeTextRequest { request, error in
		let result = request.results as! [VNRecognizedTextObservation]
		let results = result.compactMap { $0.topCandidates(1).first?.string }
		DispatchQueue.global().async { completion(results) }
	}

	request.recognitionLevel = .accurate
	request.recognitionLanguages = ["zh-CN"]
	
	do {
		try handler.perform([request])
	} catch {
		fatalError(error.localizedDescription)
	}
}

let path = CommandLine.arguments[1]
await recognizeText(path) { $0.forEach { print($0) } }

就这加上空行、注释才 29 行 Swift 代码,要什么自行车🚴?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
ocr (master) → swiftc main.swift 
ocr (master) → ls
main       main.swift
ocr (master) → ./main ~/Downloads/IMG_9598.jpg 
照片墙
14 关注
杨晚晚
C
) VIP 伍
2229粉丝
网易音乐人、歌手
IP 属地 湖北
互相关注
聊天
ocr (master) → ./main ~/Downloads/IMG_9601.JPG 
18
+ 添加状态
)VIP•伍
“我在江南君在北,一片痴情空与对。”
010枚徽章|广东 深圳•o 90后 摩羯座•村龄7年
32关注
2粉丝
Lv.8等级
1953时听歌
L 最近
v本地
^ 云盘
已购

不好意思,这里也是 29 行,就是这么巧!

图片来自上一篇碎碎念

2024-6-3 10:03:25

开个坑:

  • 博客支持自动识别图片文字内容并保存、可供文本搜索图片🔍。

    可选方案:服务在后台扫描有更新的文章,通过 grpc stream 的方式让提供方(本地客户端)提供技术支持。

没有评论 页首

从上一份外企的工作的经验得知,#日历 这个东西,也知道像是手机上的日历、#待办事项#备忘录 一样,都是有通用的标准的。像是 Apple、Google 都在使用这些古早的标准。是的,非常古早,无它——任何除 HTML 外仍在使用 XML 作为交换数据格式的协议我都认为是古董了。

这也使我极度排斥和它们打交道,之前做 XmlRpc/Pingback 把我做到吐。所以虽然我一直想做一个自己的日历本,一直拖、一直拖…… 在拖到完成之前,这条碎碎念我就慢慢 #填坑 吧。

2024-5-31 02:42:14

Tokidoki,是 go-webdav 作者的项目,前者基于后者,实现了基于文件系统的后端。目前看起来还比较粗糙,还不足以上生产环境。

  • 现实一个基于 SQLite3 的后端,和博客程序集成(作者正在实现基本 PostgreSQL 的后端);

iCalendar 的一些坑

  • 全天事件不包含结束日期在内;非全天事件包含结束时间点。
  • 参与人必须要有邮箱地址,不能只填姓名。
  • 苹果的日历不支持 GEO,然后填 LOCATION(位置的名字)的话,地图上会任意显示一个匹配的位置,屎一样);可以考虑使用 X-APPLE-STRUCTURED-LOCATION
没有评论 页首

害怕,好久没上 #网易云音乐,竟然发现被 #杨晚晚 关注了……🥵🥵🥵

吓得我赶紧改了个签名✍️……你猜我为什么被关注?😎😎😎

2024-5-30 15:08:54

必须来一首 #洗脑 的歌:

标题:片片相思赋予谁

专辑:片片相思赋予谁

作者:杨晚晚

00:00

我是不是年纪大了,为什么觉得这种歌听起来很带劲?🤔

2024-6-14 19:25:42

reply.avif

(好像让大家看到我名字了👀。)

4条评论 页首

<script> 嵌入 JSON 的正规做法1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<!-- Generated by the server -->
<script id="data" type="application/json">
  {
    "userId": 1234,
    "userName": "Maria Cruz",
    "memberSince": "2000-01-01T00:00:00.000Z"
  }
</script>

<!-- Static -->
<script>
  const userInfo = JSON.parse(document.getElementById("data").text);
  console.log("User information: %o", userInfo);
</script>
2024-6-14 04:21:43

实际上,放 Yaml 也不是不行,就像我友链文章中的那样:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<!--article begins here-->
<script type="application/yaml">
friends:
- name: 小竹の笔记本
  url: https://notes.smallbamboo.cn
  description: 这里是编程宇宙中一颗璀璨的星辰,照亮你探索知识的旅程。
  icon: https://notes.smallbamboo.cn/wp-content/uploads/2024/04/1714049480-icon.png
- name: Doghouse
  url: https://qwq.me/
  description: In the Mood for Love.
- name: 卡瓦邦噶!
  url: https://www.kawabangga.com/
  description: 无法自制的人得不到自由。
...
没有评论 页首

在 StackOverflow 上面发个帖子问一下关于 Safari 字体大小问题 的根本原因时为了补充一个视频时发现:StackOverflow 支持 GIF,但是不支持 MP4.

可是……当我用 #FFMPEG 把录屏转换成 GIF 时:

1
2
3
4
1.6M a.mov // 原始录屏
200K a.mp4 // ffmpeg -i a.mov a.mp4
1.3M a.gif // ffmpeg -i a.mp4 a.gif
1.0M b.gif // ffmpeg -i a.mov b.gif

转了一圈最后发现,GIF 不管是大小、清晰度、帧率、声音通道、色彩空间都完全被 MP4 吊打啊,完全不在一个量级。

这还是我读高中时认识的那个占用空间大的 MP4 格式吗?StackOverflow 这样抱残守缺干嘛?连 Twitter 都早就用 MP4 代替 GIF 了。

放个 MP4 吧(GIF 就不放了,感觉浪费我空间😅),200KB,8 秒的视频,如此清晰,什么如获至宝,时代的眼泪……

2024-5-29 19:56:01

哈哈哈,在别人的网站上又看到了一个 GIF。是功夫里面的冯小刚打人片段,我从原视频里面截了一部分,然后转成了 MP4,大小为 179KB,原 GIF 是 362KB,仅是后者的 50%,且不说 MP4 的分辨率是 GIF 的 两倍……

kf.gif
实况

GIF 看着好有年代感啊!一看就回到了那个年代。

没有评论 页首

自以为是早期的 Win32 开发者,对事件系统非常熟悉,以为可以照搬到浏览器里面。尽管如此,但还是在 js 这里踩了坑,对浏览器中 js 执行顺序误解很大。

比如下面这些代码片段,打印顺序是啥样?

1
2
3
<img src="bad://" onerror="alert('111')" />
<script src="not-found.js"></script>
<script> alert(333); </script>

其中,not-found.js 是一个不存在的脚本。

测试用例:first.html

然后再看看下面这个:

1
2
3
<img src="bad://" onerror="alert('111')" />
<script src="222.js"></script>
<script> alert(333); </script>

其中,222.js 的内容是 alert(222);

测试用例:second.html,记得多刷新几次看看有没有不同。

以及:

1
2
3
<script src="222.js"></script>
<img src="bad://" onerror="alert('111')" />
<script> alert(333); </script>

测试用例:third.html

别问我,我不知道。

没有评论 页首

七娘山⛰️真是个特殊的山,特殊在哪呢,就是能不能去登山完全取决于当天的天气,对,是当天。因此,需要当天打电话问管理人员才能决定,官方(深圳大鹏半岛国家地质公园)并不会在任何地方公布这个信息(微信公众号已经停留在了几年前)。也别相信各个地图所谓的“正在营业”,因为我上次去就扑空了,然后转去了隔壁的杨梅坑/鹿嘴山庄。

没有评论 页首

2024-05-26.md

待办事项

没有评论 页首

合法的新手司机了,周年快乐!

license.jpeg
stat

这里程中,90% 应该都是我贡献的,高速应该超过 50%.

如果不是因为保险限制一年不能超过 30000 公里,这数据再翻过倍毫无压力。


#仪式感 ,是的,晚上又去吃椰汁鸡了!不过,这次变得有些“聪明”了,竟然想起了问老板有没有停车🅿️券,有!感觉以前血亏!那可是深圳超繁忙路段之一啊!


上次买 #宝马 的那个朋友,跟妹子的关系似乎发展不如预期,找我吃了个夜宵。结论:现在的妹子真的难追……尽管他已经差不多年薪百万的深圳人了,还是感觉难,非常地难。不知道现在的妹子在想什么……噢,忘了说,他把上次在光明买的宝马订单退了,等等,不是不买了,是换成了一家南山的店,价钱一样,赠品也几乎完全一样,除了我当时坚持的座椅通风。他说:天热怕什么,空调给我使劲开!

2条评论 页首

一直用 @media screen,今天才知道有 @container 这么个神器,简单一图胜千言:

container-query.svg

没有评论 页首

2024-05-22.md

待办事项

  • 服务端和客户端版本必须match
  • 获取 4K 图片 https://pbs.twimg.com/media/GA0Qq0DbYAEltfQ.jpg?name=4096x4096
  • 同步评论中代码的滚动
  • 邮件中的 # 评论 hash 不见了
  • 关于 <template> 被 parse 进 head
  • 保留原始 markdown 中的 html 注释。
  • 播放器适配移动端
  • 搜索功能换成 ListPosts
  • 不设置语言的代码块格式乱了。
没有评论 页首

把推特的数据📊从官方轻松点几下、一键导出了,非常便捷。只不过,官方说为了安全,需要等待至少1️⃣天时间才能下载,期间会不停地要求邮件验证以确定帐号安全。

刚好满一天,下载了下来,打开一看,非常吃惊😱。打开首页,完全就是个离线版的推特,有自己的全量数据,一览到底,所有文字、图片、视频打包📦在一起。各种数据文件的格式在文档中描述得清清楚楚。

什么业界良心企业啊,我哭死……😭

我……是不是要导入过来呢?

5条评论 页首

早前推上有人说像 Markdown 这种简单的文档可以用正则表达式很轻易地解析,我完全不以为然,因为我自己用正规的递归下降解析写过,发现……挺 tricky 的。但是在《网站支持 Live Photo 图片展示》上发现我很久很久之前用过的 marked 这个 js 写的 Markdown 库竟然就是用的正则表达式实现的?

我低估了正则表达式的强大,也低估了作者们的能力。但是有句关于正则表达式的话我还记得很清楚:

Some people, when confronted with a problem, think “I know, I'll use regular expressions.” Now they have two problems. (Source of the famous “Now you have two problems” quote)

很多人写的正则,是那种写的时候看得懂,事后就忘记。不然你看看下面这段装逼过度

1
R"((\w+)\s+([^\?\s]+(\?(\w+(=(\w+)?)?)?(&(\w+(=\w+)?))*))\s+(.*)\r?\n(([-\w]+\s*:\s*.*?\s*\r?\n)+)\r?\n)"

我只敢肯定这段代码是我给公司写的,语言是 C++,但是意义嘛……

但不管怎样,我最终还是放弃了marked,因为我不想在后端一直保留 nodejs,我是🐶党。

2条评论 页首

随机 #开往 了一个网站“Evan's Space”,发现作者把文章的附件挂在国内某云盘上,尽管附件仅有 8KB 大小……

说实话,作为一个经历过中国互联网大大小小在线存储、云盘服务商的我来说,不是很理解这种行为。

一些不成熟的见解:

  • 写文章✍️时单独上传附件到站外是一个麻烦事(可能有插件集成);
  • 云盘文件可能被莫名其妙地和谐、丢失、删除、不可用;
  • 不方便自己整理数据、备份数据;
  • 云盘可能下载速度还没自己的小水管快;
  • 云盘可能强制用户下载 App 后下载;
  • 云服务商的链接可能挂掉;
  • 云盘服务商可能没自己的网站活得久;
  • 云盘跑路,自己的数据全部丢失。
  • ……

所以,我从建站初期就很少使用过第三方存储(云盘、图床等)。尽管前些年用过腾讯云 COS 存储我的音视频(太大了以至于我不想放 Git 仓库),直到后来腾讯云换域名(以及改 HTTPS 访问)导致之前的链接挂掉了之后,我就弃用了。我认为他们对兼容性的考虑甚至比我更加草台班子。

3条评论 页首

2024-05-20.md

待办事项

  • 通过 img loaderror 的方式执行同步滚动注入脚本。
  • 只保留三栏,合并评论
  • 启用标签插件
  • 把 plantuml 插件独立并开放
  • 用公钥代替 token 加密,携带时间。
  • 用 plantuml 的 mind 功能展示博客功能集。
没有评论 页首

2024-05-19.md

待办事项

  • 写一个类似日历的事件记录系统,比如十周年
没有评论 页首

为了给博客后台的碎碎念找个能用的 Markdown 编辑✍️器,结果一不小心给人家提了一堆 issues,感觉我有罪:

tme.jpg

选此 Tiny-Markdown-Editor(TME) 的原因有几个:

  • 足够小巧、简单,算是一个小而美的产品(除兼容性 Bugs 比较多以外);
  • 纯香草味🌿 Javascript 写的,符合我的选型(我不会 TypeScript 和各种复杂的前端工具链);
  • 没有各种复杂的命令栏,我不需要,我都是手写;
  • 一句话完成原地替换 <textarea>

最最最重要的: 它不自带渲染功能!

很奇怪的需求?不奇怪!我的博客程序支持非常多的自定义渲染(基本上没有不兼容标准 Markdown),市面上的各种编辑器无一例外无法和我的博客兼容。而使用 TME 我就完全可以自己渲染。这样就可以把编辑器做得非常小而美。

所以最终选了它,没想到 bugs(主要是 Firefox 上)这么多呢?🥹

编辑器这种复杂的东西我不敢碰,所以都是提 issues,没有 pull-requests。

谁人一天大周末的不出去约妹子还在家写代码给人家提 issue 啊?是我🙃。

2条评论 页首

Go 的 switch-case 语句其实是允许重复值的

Go 语言至今都不允许当全局变量的初始值是函数返回值时,全局变量的类型被定义成带 const 修饰。比如下面这样的语句不被允许:

1
2
const n1 = math.Max(1, 2)
// math.Max(1, 2) (value of type float64) is not constant

真的很迷,可能 Go 语言认为 const 必须全宇宙级别的不变,不能是程序初始化来的。

这就导致类似 goldmark 里面像下面这种看起来像常量的全局变量,实际上,并不是:

1
2
3
4
package ast

// KindHeading is a NodeKind of the Heading node.
var KindHeading = NewNodeKind("Heading")

我一不小心写了个 switch-case 语句,包含了重复的 case 值,竟然不报错:

1
2
3
4
5
6
switch node.Kind() {
case ast.KindHeading:
	// ...
case ast.KindHeading:
	// ...
}

看着是有那么点儿怪怪的吧?还好我有习惯是会在提交代码前会再 review 一次,不是简单地 git add .。(不点名批评前上司)

而恰好这两个 case 的单测也不冲突(case 里面有条件判断),导致还真就没发现问题。

然后我就跑去看了看语言规范

Implementation restriction: A compiler may disallow multiple case expressions evaluating to the same constant. For instance, the current compilers disallow duplicate integer, floating point, or string constants in case expressions.

没毛病,make sense。只是……啥时候让已初始化的全局变量可以定义成 const?

没有评论 页首

2024-05-17.md

待办事项

  • 错误页面
没有评论 页首

和浏览器较量缓存的有效/刷新时机已经很久了,看起来目前取得了比较完美的表现。

目前对一篇文章返回了以下头部字段:

1
2
3
Last-Modified: Thu, 16 May 2024 00:10:09 GMT
Etag: HEAD-1715836710-1715818209-1715817446
Cache-Control: max-age=0, must-revalidate

从上往下:

  • Last-Modified 只表示文章本身最后的修改时间。

    早期的时候我只用有这个,但是明显不够用。比如博客的主题发生了变化时,页面也应该算更新。为了不改变这个字段本身的含义,我使用了 ETag 字段。

  • ETag 实体标签,另一种用来表示实体有没有修改过的方式,是对 Last-Modified 的补充。

    它就是个普通的字符串,内容可以自己写。我上面的格式是:${GitCommit}-${主题修改时间/系统启动时间}-${文章内容修改时间}-${评论更新时间}

    很复杂吧?其中任何一个的更新都会导致页面缓存失效。

  • Cache-Control 缓存控制。控制缓存保留的时长、刷新策略。

    max-age 表示缓存多久算新鲜,不新鲜就算过时了(过时不代表不可用)。 后面的 must-revalidate 表示对于过时的内容,必须重新检查是否还可用(也就是 304 状态码检测)。

    不知道我对于我设置的这个值是否完全理解,我的需求是:缓存你随便保存多久,但是总是帮我 revalidate 一下就行。如果不设置为 0,浏览器可能并不会 revalidate。但是设置为 0 我又不知道浏览器会不会不要缓存总是立即删除。

    但是目前看起来不会删除,如果 revalidate 后还有效,会继续用。

以上的缓存控制只是针对文章主 HTML 本身(即 Document)。资源文件(Js/Css)我加了一个较短的 max-age。如果换成给资源文件 URL 加上版本号的方式,理论上,可以把缓存有效期设置成永远。

本地开发的过程中,如果只是对主题本身进行了修改(而不是文章),比如样式和字体,此时需要刷新。如果没有 ETag,简单的做法是强制刷新,但是,强制刷新会使字体文件也没必要地全部重新加载、页面还会回到页首!这是非常不能忍的。不强制刷新的话,页面的滚动位置会保持一致。这对于观察样式的细微修改会很舒服的。

没有评论 页首

最近这火狐浏览器不知道是咋回事,打开一个新连接的速度无端慢到发指,我还找不到原因:

blocked

但是 Chrome 和 Safari 没有问题🙂‍↔️。

5条评论 页首

2024-05-15.md

待办事项

  • plantuml 测试页面
  • ssh-agent
没有评论 页首

Safari 果然是新时代的 IE,果然该死,Mac、iPad、iPhone 三个系统上的浏览器显示效果均不一样,放弃了😇,浪费生命。


测试用例:font-size.html
操作步骤:用手机 Safari 浏览器打开即可。如果发现左右的字体大小不一样,那么 bugs 复现了!

源代码(方便手机阅读,不出意外的话,字体显示大小也是错乱的):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>

<body>
<table>
<tbody>
<tr>
	<td>
		<pre><span>A</span>B</pre>
	</td>
	<td>
		<pre><span>A</span>BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB</pre>
	</td>
</tr>
</tbody>
</table>
</body>
</html>

在[StackOverflow]上面问了也没人能回答:https://stackoverflow.com/q/78539386/3628322

把一个属性来回切换居然样式无法还原:

2025-6-9 16:41:34

这个问题应该已经修复了:fix ios code font size · movsb/taoblog@5ceae8a

参考:

没有评论 页首

最近几个月洗脑次数最多的歌:周慧敏 - 《最愛》

1条评论 页首

原来,JS 里面是不能直接设置 important 的:

1
2
3
document.body.style.display = 'none !important';

// Error in parsing value for ‘display’.  Declaration dropped. 901:1:5

需要用 setProperty 来设置:

1
document.body.style.setProperty('display', 'none', 'important');
没有评论 页首

2024-05-13.md

待办事项

  • fix size 函数挂掉的问题
  • 缓存评论
  • 碎念预览
没有评论 页首

今天没宅家写代码,跟同事、以及同事的朋友,去试驾&提了一辆 #宝马(同事),简单谈谈体验与感受 & 生活流水账。好巧不巧,早上我带了两根香蕉🍌、他带了两个糖油粑粑。于是我们两人相互交换,这是早餐🍳。

开车过去到 4S 店的时候,快要接近正午🕛。先上车做了个简单直观的乘坐体验:3️⃣系空间紧凑,5️⃣系过于宽敞,7️⃣系更加商务风。然后也顺便体验了一下 SUV / X 系列,感觉不是一点点高,我这个小个子下车有点费劲。宝马全系车型的门感觉都有点怪怪的,声音比较硬,开门人要很靠边,不然容易撞到。7️⃣系的后门更离谱,还是个三角▶️区域,专业欺负短手,我差点儿要弯腰了。其实同事早就看好了车型,325长轴曜夜,今天过来只是为了谈价钱。毕竟在现在中国无论做个什么都想摇号的年代,错过一次指标再想要就很难了。如果说还有别的,那就是,让我试驾一下,真的。

谈判的过程得持续有3️⃣个小时那么久。对方是个销冠(1️⃣月份卖了 28 辆,1100 万的销售成绩🤔),然后还名同“林妹妹”。好说歹说,价格是差一点 30 万,只是送的东西还挺多,算得上有诚意了。至少,送了坐椅通风x1(在我要求后,x2)。我这同事不算很懂买车,并没有过问很多细节的东西。男人是不是到最后都只在乎自己爽了?他一开始竟然觉得副驾没有坐椅通风也还行?🙂‍↔️。我都说,你这正在找对象,深圳夏天这天气,没有坐椅通风对妹子可不友好。谈完很快就先交了订金,确认是订金(可以退),而不是定金(不可以退)。如今这些行业,用“订金”这我有点意外。再三确认,没错。

等了小半个小时才等来试驾🚘,销售直接用同事的身份证登记,都没有问我有没有驾照🪪,就直接很放心地让我去试驾了。对,是很放心地,竟然没有配试驾专员:

  • 因为右转旁边有一个消防拴水柱子,于是想打开宝马的 360 全景影像看看是啥样。可能是开多了我爸的比亚迪,习惯了左手大拇指直接能触达并打开全景影像,宝马的影像在中控台区域。并且打开后,我们3️⃣人一起折腾了好几分钟都没有搞出来类似比亚迪的那种视图效果,角度有点儿迷汁奇怪。
  • 然后看了看地图🧭,感觉比较平凡,我们三人一致觉得不如百度地图。最终,我们还是用 🍏 CarPlay 投屏了手机地图。国内企业也许是互联网/应用层思维偏多一点,做的车机也许是看起来更加合乎时代/用户习惯,以至于让我产生了一种当我用宝马的车机的时候,有一种在用诺基亚的感觉。毕竟,如果比亚迪的自带地图如果不好用,我还可以下载个几乎和手机版完全一样功能的平板版地图,“亲切”。更甚的是,当我看到旁边保时捷 Taycan 也挂个手机支架用手机导航的时候,我就觉得挺奇怪的:车商强推的大屏不好用吗?我以前租车的时候必须要租带 CarPlay 的,因为不用猜我就知道绝大部分汽车自带的地图不好用,CarPlay 一把梭到底。我只管踩油门,车机我是完全不想碰。我对车机的唯一依赖目前应该只能地图,我在我爸的比亚迪上装了地图后,我就没有再跟别人提起过 CarPlay,就连我自己也觉得 CarPlay 的唯一作用好像就是用来显示手机版的地图一样,对我也没有那么重要了。
  • 油车有声浪,而电车没有。尽管我对这个东西不是很感兴趣,可能是年龄大了,喜欢电车的安安静静。当我在市区把速度一脚踩到 110km/h 的时候,那感觉还是有点刺激。也不知道是不是因为开了运动🏃‍♀️模式,宝马的油门一脚下去的延迟是 250ms 左右,而完全💯松开油门后,能感觉竟然有如电车般的动能回收时带来的制动效果。这是我不知道的油车特性,还是宝马专属?以至于我多次松、踩、松、踩,反复确认,确实无误。于是我们3️⃣人一起在车上“蹦迪”,随着我踩油门的节奏🎶一起摇摆。我同事好像在返程路上有点儿不开心了,因为他之前试驾这车的时候好像不是这样,今天我好像改变了他对这车的看法。
  • 抛开我之前租的那辆特斯拉标准续航 Model Y,这辆宝马算是我开过的最贵/最豪华的车🚘了。租多了 100/200 块一天的车,我觉得所有的油车都很“肉”——油门踩到底都半天不带动的那种。我姐在坐了几次我租的车之后,对电车(特斯拉)的好感大得多。同事说让我去试驾一下 30 万的宝马吧,你那些日系 1.5 不带 T 真不行的。不过今天看来,对于方向指哪打哪、动力随叫随到,我感觉和一辆普通的电车比起来,好像并没有优势?🤔

当然,上述这些只是我一个只碰过宝马3️⃣系2️⃣5️⃣分钟的人的一些鄙见。去年我自己在纠结😐我自己要买 325 还是 Model Y 的时候,当时也完全拿不定主意。拖了几个月也没下订,最终先给我爸买了一辆比亚迪代步,然后我爸其实当时还没驾照,所以这车是我在开。眼看这马上就快要到一年的驾驶体验来说,我肯定优先选 Model Y 了。电车在市区是真香,0.36元/度的电价让我有一种丢垃圾🗑️都想开车🚗去的想法。目前购车已有🔟个月,里程 2.8 万公里,我感觉还是 affordable/acceptable 的。其实当时也算过,如果我当时真买了宝马3️⃣系,平均来看,每个月的用车成本真的超过 2000. 有点肉痛。同事给我看了他这个月还不到半个月的信用卡帐单,~2500,然后我当着他的面打开了我的招商银行掌上生活,~5000. 他只是说了一句:shit bro,what the fuck……

最后,这家宝马 4S 店比较离谱,不仅迎宾竟然不发水,连午餐🍱也堪比街边 12 元快餐店。我今天穿着一身简单的“红衣”,也挺“出众”了吧?在店门口的几辆车之间兜兜转转了几圈,最终在试驾完拿着下订金✅的文件跑进大门时(因为下起了小雨🌧️),也没能被前台尴尬地问了一句:是来看车的吗?怎么,我拿着你们的“合同”,还不够混个脸熟吗?🤔 当然,这些都不是重点,我不介意。

光明新区看起来确实很新,建筑🏠、公路🛣️都很新,很干净。同事的朋友说光明新区是深圳的未来,我问未来多久到来?他不知道,我说,得有个至少 20 年吧?不管深圳有没有留住我,20 年后应该不是我的时代了。我只想,现在,快快乐乐。未来,未来。

末了,把同事带回了地铁站🚉,因为他预感今天会堵车,他还赶时间回福田陪他妈妈👩一起过母亲节。而我,拉着另外一位同事去南山吃了我最爱吃的一家椰汁🥥鸡,没别的,就算是个仪式感吧?这店家我之前经常跟我的另外一个同事去,每周去一次的程度,但是后来那个人——up and vanished like a fart in the wind——后,我也就不再是常客。所以当我拿出一张已经过期一周的优惠券时,一个陌生的阿姨说,过期了这个不能用不能用。我只是微笑着对阿姨说,好的好的,节日快乐。然后当老板过来的时候,我重复了同样的请求,老板肯定看我面熟,于是给我打了折。

我说我给家庭群发了个红包🧧,我问他你发了吗?他说没有,他 made a phone call 📞。我向来不爱跟家人用电话/语音沟通。因为我真的觉得没什么说的……就不聊聊日常。连人家 99 后的妹子都觉得跟我有代沟了……当然,这和父母之间的沟通不具可比性。我跟我父母相处得也很好,我只是想说,父母都是担心我吃🍽️好、睡💤好没有。我们日常都有在群里简单沟通,我真不习惯打电话 📞。我和很多人不一样。

同事的预感非常正确,从宝安到南山,区区 10 公里路程,我们堵了2️⃣个小时。就像和绝大部分高速公路拥挤一样,当你快速多次地穿梭于车辆之间后会发现,前面简直是畅通无阻、一片光明。什么,光明?我感觉今天的拥堵实属就是对同事买车最大的讽刺。

3条评论 页首

2024-05-11.md

待办事项

  • 加入十年之约还者开往。
  • 保活检测
  • 证书过期检测
  • 正在维护 handler
  • 自动删除不认识的 cookie(管理员首页)
  • 整理一些聊天记录,给文章加上私密访问功能。
  • 接入 rbac 系统,从 tiger 里面复用代码。
  • 把文章的更新写入文本日志,恢复到 git 仓库。
  • 本地缓存头像
  • 创建打码的图片动态不保存结果
没有评论 页首