

粤B·BB6688,好!


粤B·BB6688,好!
同事终于把宝马提到手了,穷逼我也第一次开上了宝马……
笑死,同事吃午饭的时候跟我说:我跟 XXX 来这个店试驾了三次,今天提车带你来。我说,你这不是渣男吗……🤣(澄清一下,他一直单身。)
我收回部分上次说的话,再谈谈我觉得的一些明显的优点与缺点:
优点:
缺点:
哎,搞得好像是我提了一辆 #宝马 这么高兴一样,你咋发这么多图呢?
真的很帅……

















南山确实比光明有钱,至少……至少餐厅有工作人员,在光明的时候感觉全部是自助。




“每天都值得庆祝🎉”,每天都要有 #仪式感。他们喝了点啤酒🍺,今天晚上这宝马,我是开定了。





感觉深圳最少不了的就是湖南菜,菜的花样多,名字也是…… 大湖南、大弗兰、大胡兰,一时间搞不清楚到底哪些是真、哪些是假……

以及……一些在今天这个日子有些奇奇怪怪/牛逼的车牌……


nginx 居然在我服务 panic 挂了的时候重新连接一次……神奇,一个请求收到两次连接。。。
Go 里面这样可以实现一个允许可重复读、多次副本读的 io.Reader,还挺好玩的,感觉又在 #套娃……
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 |
|
结果:
1 2 3 4 5 6 7 8 9 10 11 |
|
主要原理是:
TeeReader 把从原始接口读出来的数据顺便写一份拷贝到内存 Buffer 里面(io.Writer);io.Reader),然后继续从原始的数据读;Buffer 的 Bytes() 重建一个 bytes.Reader 支持了 io.Seeker1。由于是在内存中缓存的,所以要小心数据不能太大。否则应该用文件实现缓冲(io.ReadWriteSeeker)。
奇怪为什么 bytes.Buffer 不支持 Seek? ^
《Using i.e. and e.g. correctly》1
The abbreviation “i.e.” stands for id est, which is Latin for “that is.”
The abbreviation “e.g.” stands for the Latin phrase exempli gratia, meaning “for example.”
哇,国外的正规引号的写法真的就是中文的引号!?
“
LEFT DOUBLE QUOTATION MARK
Unicode: U+201C,UTF-8: E2 80 9C
分号是这么用的:
All employees will receive the standard discount; i.e., 20 percent.
...we technically have created a compound sentence...
So we use a semicolon to join the two independent clauses.
用过 Unix-like 系统的人都知道以 “/” 开头的路径是绝对路径,但是不知道 Go 为什么要加一个奇怪的 URL.IsAbs() 函数,这个函数只通过判断有没有协议头(Scheme)来确定是不是绝对路径……
1 2 3 4 5 6 7 8 9 10 11 12 |
|
你要这么搞的话,我感觉 Go 语言对我来说有点儿不受控了……
1 2 |
|
就算对于前端来说,以 / 开头的也是绝对路径啊,以 https:// 开头这种难道不叫跨源吗?都可以叫作“不是同一个文件系统”了……

这是一条来自手机端 iOS App 的碎碎念!🍏🍎。 测试!
人生 #第二次 开发 iOS App!
当然,我并不是要开发一个完整的客户端,只是为了测试一下如何在 iOS 上使用 #GRPC 和 #ProtocolBuffer,上手难易程度完全在预期范围内,感觉当初用 GRPC + ProtocolBuffer 重构 API 接口是非常正确的选择。
只是……接近两年没写 #SwiftUI 了,反倒是 UI 慢慢摸索了好久……




(当然,图片不是来自手机端 🤪🤪🤪)。
我一定是现学现用!感觉从来没有开过这么多的标签页!
#第一次 使用 #AVIF 图片格式,比 JPG/PNG 都小,甚至比 WebP 还小很多,后面有空再试试 #JpegXL。
第一次总有些不愉快…… 是的,下面这张图好大,因为我代码的图片自动缩放功能不认识 AVIF 格式,晚点有空再修吧😇。

暴力出奇迹:java - How to get image dimensions from an avif file? - Stack Overflow。

找了半天的图片转文字(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 |
|
就这加上空行、注释才 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 |
|
不好意思,这里也是 29 行,就是这么巧!
图片来自上一篇碎碎念。
开个坑:
博客支持自动识别图片文字内容并保存、可供文本搜索图片🔍。
可选方案:服务在后台扫描有更新的文章,通过 grpc stream 的方式让提供方(本地客户端)提供技术支持。
从上一份外企的工作的经验得知,#日历 这个东西,也知道像是手机上的日历、#待办事项、#备忘录 一样,都是有通用的标准的。像是 Apple、Google 都在使用这些古早的标准。是的,非常古早,无它——任何除 HTML 外仍在使用 XML 作为交换数据格式的协议我都认为是古董了。
这也使我极度排斥和它们打交道,之前做 XmlRpc/Pingback 把我做到吐。所以虽然我一直想做一个自己的日历本,一直拖、一直拖…… 在拖到完成之前,这条碎碎念我就慢慢 #填坑 吧。
Tokidoki,是 go-webdav 作者的项目,前者基于后者,实现了基于文件系统的后端。目前看起来还比较粗糙,还不足以上生产环境。
X-APPLE-STRUCTURED-LOCATION。用 <script> 嵌入 JSON 的正规做法1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
实际上,放 Yaml 也不是不行,就像我友链文章中的那样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
在 StackOverflow 上面发个帖子问一下关于 Safari 字体大小问题 的根本原因时为了补充一个视频时发现:StackOverflow 支持 GIF,但是不支持 MP4.
可是……当我用 #FFMPEG 把录屏转换成 GIF 时:
1 2 3 4 |
|
转了一圈最后发现,GIF 不管是大小、清晰度、帧率、声音通道、色彩空间都完全被 MP4 吊打啊,完全不在一个量级。
这还是我读高中时认识的那个占用空间大的 MP4 格式吗?StackOverflow 这样抱残守缺干嘛?连 Twitter 都早就用 MP4 代替 GIF 了。
放个 MP4 吧(GIF 就不放了,感觉浪费我空间😅),200KB,8 秒的视频,如此清晰,什么如获至宝,时代的眼泪……
哈哈哈,在别人的网站上又看到了一个 GIF。是功夫里面的冯小刚打人片段,我从原视频里面截了一部分,然后转成了 MP4,大小为 179KB,原 GIF 是 362KB,仅是后者的 50%,且不说 MP4 的分辨率是 GIF 的 两倍……
GIF 看着好有年代感啊!一看就回到了那个年代。
自以为是早期的 Win32 开发者,对事件系统非常熟悉,以为可以照搬到浏览器里面。尽管如此,但还是在 js 这里踩了坑,对浏览器中 js 执行顺序误解很大。
比如下面这些代码片段,打印顺序是啥样?
1 2 3 |
|
其中,not-found.js 是一个不存在的脚本。
测试用例:first.html。
然后再看看下面这个:
1 2 3 |
|
其中,222.js 的内容是 alert(222);。
测试用例:second.html,记得多刷新几次看看有没有不同。
以及:
1 2 3 |
|
测试用例:third.html。
别问我,我不知道。
七娘山⛰️真是个特殊的山,特殊在哪呢,就是能不能去登山完全取决于当天的天气,对,是当天。因此,需要当天打电话问管理人员才能决定,官方(深圳大鹏半岛国家地质公园)并不会在任何地方公布这个信息(微信公众号已经停留在了几年前)。也别相信各个地图所谓的“正在营业”,因为我上次去就扑空了,然后转去了隔壁的杨梅坑/鹿嘴山庄。
火狐的问题:从 https://www.gstatic.com/generate-204 到 https://www.gstatic.com/generate_204 居然不清屏,甚至 URL 也返回了前者。
时间分隔线,中间用时间表示
预览时不移除标题
后端渲染数学公式
合法的新手司机了,周年快乐!


这里程中,90% 应该都是我贡献的,高速应该超过 50%.
如果不是因为保险限制一年不能超过 30000 公里,这数据再翻过倍毫无压力。
#仪式感 ,是的,晚上又去吃椰汁鸡了!不过,这次变得有些“聪明”了,竟然想起了问老板有没有停车🅿️券,有!感觉以前血亏!那可是深圳超繁忙路段之一啊!
上次买 #宝马 的那个朋友,跟妹子的关系似乎发展不如预期,找我吃了个夜宵。结论:现在的妹子真的难追……尽管他已经差不多年薪百万的深圳人了,还是感觉难,非常地难。不知道现在的妹子在想什么……噢,忘了说,他把上次在光明买的宝马订单退了,等等,不是不买了,是换成了一家南山的店,价钱一样,赠品也几乎完全一样,除了我当时坚持的座椅通风。他说:天热怕什么,空调给我使劲开!
一直用 @media screen,今天才知道有 @container 这么个神器,简单一图胜千言:
<template> 被 parse 进 head把推特的数据📊从官方轻松点几下、一键导出了,非常便捷。只不过,官方说为了安全,需要等待至少1️⃣天时间才能下载,期间会不停地要求邮件验证以确定帐号安全。
刚好满一天,下载了下来,打开一看,非常吃惊😱。打开首页,完全就是个离线版的推特,有自己的全量数据,一览到底,所有文字、图片、视频打包📦在一起。各种数据文件的格式在文档中描述得清清楚楚。
什么业界良心企业啊,我哭死……😭
我……是不是要导入过来呢?
早前推上有人说像 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
|
|
我只敢肯定这段代码是我给公司写的,语言是 C++,但是意义嘛……
但不管怎样,我最终还是放弃了marked,因为我不想在后端一直保留 nodejs,我是🐶党。
随机 #开往 了一个网站“Evan's Space”,发现作者把文章的附件挂在国内某云盘上,尽管附件仅有 8KB 大小……
说实话,作为一个经历过中国互联网大大小小在线存储、云盘服务商的我来说,不是很理解这种行为。
一些不成熟的见解:
所以,我从建站初期就很少使用过第三方存储(云盘、图床等)。尽管前些年用过腾讯云 COS 存储我的音视频(太大了以至于我不想放 Git 仓库),直到后来腾讯云换域名(以及改 HTTPS 访问)导致之前的链接挂掉了之后,我就弃用了。我认为他们对兼容性的考虑甚至比我更加草台班子。
这篇《Understanding SameSite cookies》讲 SameSite 的文章比 Mozilla 官方还详细得多。
为了给博客后台的碎碎念找个能用的 Markdown 编辑✍️器,结果一不小心给人家提了一堆 issues,感觉我有罪:

选此 Tiny-Markdown-Editor(TME) 的原因有几个:
<textarea>。最最最重要的: 它不自带渲染功能!
很奇怪的需求?不奇怪!我的博客程序支持非常多的自定义渲染(基本上没有不兼容标准 Markdown),市面上的各种编辑器无一例外无法和我的博客兼容。而使用 TME 我就完全可以自己渲染。这样就可以把编辑器做得非常小而美。
所以最终选了它,没想到 bugs(主要是 Firefox 上)这么多呢?🥹
编辑器这种复杂的东西我不敢碰,所以都是提 issues,没有 pull-requests。
谁人一天大周末的不出去约妹子还在家写代码给人家提 issue 啊?是我🙃。
Go 语言至今都不允许当全局变量的初始值是函数返回值时,全局变量的类型被定义成带 const 修饰。比如下面这样的语句不被允许:
1 2 |
|
真的很迷,可能 Go 语言认为 const 必须全宇宙级别的不变,不能是程序初始化来的。
这就导致类似 goldmark 里面像下面这种看起来像常量的全局变量,实际上,并不是:
1 2 3 4 |
|
我一不小心写了个 switch-case 语句,包含了重复的 case 值,竟然不报错:
1 2 3 4 5 6 |
|
看着是有那么点儿怪怪的吧?还好我有习惯是会在提交代码前会再 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?