桃子的碎碎念

陪她去流浪 新建

以前听人说,男人成熟的其中一个标志是“学会坐着尿尿”。原因是会更卫生,对大家来说。

终于,自从因为北方的家里冷、我给家里的马桶🚽装上了马桶垫后,马桶盖再也不能稳稳地打开并固定了(因为垫子较厚的原因会自动倒下来),所以我被迫学会了坐着尿尿,然后……尿完后还会擦一擦……🥵🥵🥵。

虚心地向各位女同志们学习。

听说有人说我是女孩子👧?

IMG_7695.avif

访问了一下 VirtualBox 官网,发现其好像竟然又开始支持 Apple Silicon 系列了!

VirtualBox is a general-purpose full virtualization software for x86_64 hardware (

...with version 7.1 additionally for macOS/Arm...

), targeted at laptop, desktop, server and embedded use.

Downloads – Oracle VirtualBox.avif

#VirtualBox #虚拟机

去了外省旅居,租住的公寓没有提供 WiFi,也不方便拉光纤(短租),整天靠分享热点给几个平板和几台笔记本使用属实不太方便;而且 iPhone 的热点还经常自动断开、需要重新启用才能被发现。

于是干脆买了个“随身WiFi”;尽管买之前就知道这玩意儿本质上还是使用的电话卡(流量卡),所以网速肯定不会稳定到哪里去,不过好在流量比较便宜,也确实“随身”、方便。

利益相关:利益无关。

设备单独购买,以下是短期基本套餐情况:

费用 流量 期限
9.9元 30G 30天
19.9元 100G 30天
29.9元 300G 30天
39.9元 1500G 30天

想起年前的时候自己也做过类似的产品(Access Point,AP),成本可以控制在 10 元内。 当时是用的 ESP8266 芯片,如果再买一张物联网卡作为流量卡,那就是完全是个类似的产品。


等后续更新,如果好用的话,我也许会替换掉我在深圳家里的超贵的千兆光纤,人不在家实属浪费,月话费都可以买一个季节的流量了。

再度失联小半个月,终于“花重金”求不远 1.5 公里外的朋友去了趟家里,按了一下重启键,恢复了家里的网络和博客。具体原因未细查,但是大概率是网卡寄了。

怎么办?向狗屁通询问了一下“如何无条件定时自动重启机器”(重启大法好!)🥵🥵🥵,何尝不是极其简单粗暴?

每第 5 天凌晨 5 点🕔 给我自动重启!(暂时没空管你!)

0 5 */5 * * /sbin/reboot

我看你还敢给我失联!


当然,多年来我依然一直讨厌使用 cron,也一直讨厌 crontab 默认操作为替换;如果不小心没有 -e,哦豁,全清! 当然,软件作者大概也收到了各种报怨,所以也甩了个锅🍳?

nuc:→ crontab -h
crontab: invalid option -- 'h'
crontab: usage error: unrecognized option
usage:	crontab [-u user] file
	crontab [ -u user ] [ -i ] { -e | -l | -r }
		(default operation is replace, per 1003.2)
	-e	(edit user's crontab)
	-l	(list user's crontab)
	-r	(delete user's crontab)
	-i	(prompt before deleting user's crontab)

续:各位关心我的、没关心我的朋友们,又是好久不见,我还活着

刚才埃及回来什么也没干躺了两天就直奔东北去野了半个🈷️,仿佛是今天才结束假期……

是的,今天我又双叒叕回来深圳了……🥵

这应该是我见过的最豪华的飞机屏幕了吧?

  • 可以取下来;
  • 可以玩游戏;
  • 有键盘;
  • 可以刷信用卡💳!

但是,为什么你要把 Player 翻译成 播放机?一点儿都不专业。

拍摄于从埃及回中国的途中。

#开罗 #广州 #四川航空 #草台班子

各位关心我的、没关心我的朋友们,好久不见,我还活着……[狗头]

#埃及 玩了一个月,不亦乐乎,博客也完全没有经营……

但是今天为什么想起发一条碎碎念?因为我手机坏了[狗头]……只得玩电脑(?)。

我在 #马特鲁 玩海的时候,又一次1把手机泡水了,在我明确知道手机被拆过、不能防水的情况下……现象是:面容ID坏掉了、屏幕完全失灵……😭。

好害怕,我的资料不会全部毁了吧?我的相册不会全没了吧?我不会在埃及孤立无援吧?不会吧不会吧?😭😭😭。求求了,一定要坚持到新手机发布!

2024-9-11 23:33:09

手机已经好几天不能开机,我快崩溃了……

2024-10-6 20:20:49

手机修好了,但是有点不开心。

去年刚拿驾照时租油车加了省加油费在加油站办了张广发的信用卡(第一次确实省了很多钱),结果最近一年的消费不足以抵扣收费,被扣两百块……

IMG_1360.avif

什么无妄之灾啊!一气之下决定注销……结果刚接通,对方竟然猜准了我的来意,直接问我是不是“因为年费原因才要注销”[捂脸],哈哈哈。如果继续注销的话,年费肯定省不了了。所以我选择了不注销,但是要在接下来一个月消费满 6 笔 / 或者金额数达标(几百块),然后就退回年费。

早知道就不办这玩意儿,为了省几十块钱,每年都要恶心我一下……我一直用的招行信用卡,我记得招行是不要年费的啊!

#信用卡

在别人的提醒下,办了一张国际驾照🪪,可以到国外租个车玩玩儿了!

原来驾照可以这样用的、原来这玩意儿就是个翻译件?[捂脸][捂脸][捂脸],花了我 ~¥100 😢……

IMG_1358.avif IMG_1359.avif

#驾照

连飞个无人机也要强制登录了,到山顶才发现……

被限高 30 米、限远 50 米。 我就这样拿着遥控器,从山顶到山腰、转了一大圈、花了一个小时才找到一丝信号连上网接收到验证码,周围的安卓手机也没有信号。感觉自己是个智障一样。

  • 大国人引以为豪的大基建呢?
  • 大疆这么大一企业就从来没有想过离线验证?

感觉生活在这个国家,总是被各种莫名其妙的东西戏耍。

IMG_1254.avif

#草台班子 #大疆无人机

2024-8-5 12:12:39

截屏 2024-08-05 12.11.08.avif

大疆售后牛逼!

经常一天能接到很多陌生电话。没耐心的话,就不接;有耐心地话,等我手输手机号在微信里面“添加朋友”看看其到底是个什么“昵称”后再决定要不要接、还是拉黑。

所以,我有一个最终想法,如果“来电功能”能以某种程度和“微信”合作一下,显示“来电者”的名字该有多好。 之所以这是一个最终想法,是考虑到隐私泄漏:不可能来一个电话就向微信查询一下。应该是像苹果早几年的“归属地显示”功能一样:是先由提供方预置一个归属地数据库给苹果使用,苹果自己在本地去查询,完全不与提供方再有后续的交互。

有些电话,若接吧,我又不是它的潜在客户,浪费你我大家的时间;不接吧,又怕错过可能有用的电话。难搞。

还挺神奇的,下面3️⃣个电话,几乎是每个小时打一次,不能说毫无关联吧?

IMG_1215.avif

#想法

2024-8-5 10:20:37

电话打进来的时候,只显示“中国 大陆”;点进去的时候,显示的是“中国 广东 广州” ➕ 备用流量卡的信息。

有这个必要吗,产品体验非得做得如此割裂?作为一张只用来上网的卡,我完全可以自信地拒绝任何电话📞——如果你在电话打进来的时候就显示给我看。

看来没有乔布斯的苹果已经不知道怎么做手机了。

IMG_1303.avif

#教你做产品 #不要浪费我的时间

博客又被 209.141.34.4 这个死妈的垃圾攻击了,这次就准备长期放家里了,不折腾 VPS 了,随便你咋打我。

你一定很开心我这样咒你全家吧?

  • 头像服务还是用的 gravatar,发现家里访问不了,所以得重写一下头像缓存服务。
2024-8-1 05:04:39

才发现 Cloudflare 把我的 ETag 头部去掉了,导致文章总是返回 200 🥵🥵🥵……

2024-8-1 05:35:19

Cloudflare 的 Argo Tunnel 不支持 GRPC 转发(nginx 中的 grpc_pass),所以基于 GRPC 的服务全部挂了:

  • 电脑上的后台备份进程可以通过直连内网解决
  • 但是手机客户端暂时无解
2024-8-7 10:22:06
  • 由于 Cloudflare 的 GRPC 问题未解决,备份服务没法走域名,先使用内网地址
  • 支持 Upgrade 拨号器转发 GRPC 请求

点了这么多回 #肯德基🍟 外卖,第一次遇到不要配送费的[捂脸],以前都是 9 块、6 块……吃不起吃不起……

IMG_0994.avif

要是每次都有“满30配送减6”多好啊,哪次没有超过30?

和朋友一起去看了电影《抓娃娃》。

作为一个土生土长的农村孩子,我对这部片没有太多评价,搞笑片算不上,对我来说有点童年阴影。 中国的父母——特别是农村家庭的——爱孩子的方式很多都是:没苦硬吃,还说是“为你好”。当然,中国的社会整体价值观都偏向于歌颂苦难。有一句话是怎么说的来着?“祝歌颂苦难的人天天都有苦头吃。”

片尾,父母认为“大号练废了”(原话),需要给孩子惊喜:一个弟弟或妹妹。我不太了解导演到底是想表达什么,或者是这样更符合主旋律? 咋的,敢情说孩子就是父母来拿练手的?练废了就重开?什么弱智行为。放过他人,也放过自己。

IMG_0990.avif

对于“小孩儿要穷养”这件事,我还是比较有发言权的,因为我自己勉强就算得上是一个被穷养长大的孩子。 依稀记得上初中那会儿(2007年左右),我表弟借宿我家,和我上同一个初中,初三住校。他一周的生活费是 50 元,而我,只有 15 元。 平均一天 3 元,要知道,中午的荤菜是 2.5 元,晚餐的米线是 1.5 元;所以我经常食不果腹。但是我知道,父母肯定拿得出更多的钱至少让我吃饱、不饿着。只是不知道他们从哪里听说了一些“歪门邪道”的东西:孩子要穷养、要多吃苦……才会体会到生活的不易、才会更努力。 小时候我可能认为这样观念正确,但是很显然长大后的我不认同这种东西。但是我也不怪他们,毕竟他们本身也没有什么文化,没有自己的思想,容易被控制。

没苦硬吃容易让人从小自卑,是的,我从小就自卑。也不知道是不是因为从小经常饿肚子的原因,我个子很小(裸身高 163cm),严重拖了后腿。不像现在的 00 后,普遍 170+。年初相亲的 00 后,就是 170+,没有哪个妹子愿意接受比自己矮很多的吧?所以,这事儿,它没成,不能说完全无关。

IMG_1219.avif

#电影

把以前写的脚本语言服务端部分重新编写并编译成 #WASM 后迁移到了 GitHub Pages。六年多没有更新了(短期内没有再更新的打算),少点儿服务器运维;域名 https://tao.twofei.com 作废了

People die, but long live GitHub.

  1. https://laike9m.com/blog/people-die-but-long-live-github,122/
  2. https://github.com/yihong0618/gitblog
  3. https://josephcz.xyz/log/talk-about-github/
2024-8-1 20:58:19

尝试把域名也通过 Cloudflare 转发,发现不管是“DNS HTTPS 记录”还是“DNS URI 记录”都无效,然后试了试“Page Rules”:

1
2
tao.twofei.com/*
Forwarding URL (Status Code: 301 - Permanent Redirect, Url: https://movsb.github.io/taolang/)

也不生效,再仔细看了 Page Rules 的文档,说是必须先要添加一条对应的 DNS 记录 😅,神经兮兮的……没添加、不报错、不生效……这种体验是人做的吗?

特别注意,添加 A 记录的时候要添加特殊的值,见文档里面:

Page Rules require proxied DNS records

Page Rules require a proxied DNS record for your page rule to work. Page Rules will not apply to hostnames that do not exist in DNS or are not being directed to Cloudflare.

Depending on the record type, you can use different values for the target as a placeholder. Either one of these achieves the same outcome and you only need to create one:

1
2
3
www.example.com  A      192.0.2.1
www.example.com  AAAA   2001:DB8::1
www.example.com  CNAME  domain.example

Cloudflare recommends only using reserved IP addresses or domain names to avoid sending traffic to foreign infrastructure.

添加(且代理)后解决了,现在 https://tao.twofei.com 永久重定向到了 https://movsb.github.io/taolang/

2024-8-5 02:15:33

时不时就要兴起一股写编译器的风: https://twitter.com/Manjusaka_Lee/status/1815378850328789133

前同事一直叫我去 #长沙 耍、发展、定居……盛情难却!

去了才知道,长沙这天气比深圳还热还闷🔥。 待了一周多,几乎一直在家里😂😂😂…… 好在是新家,其他家人及小孩全都不在这边儿~ 也几乎没出去玩儿,整天就是到处吃吃喝喝,专职司机接送上、下班🥵…… 认识了五、六个新朋友……

没有时间顺序的随意生活记录📝。


说来奇怪,两个从虾皮离职的湖南同事,都去了长沙的蚂蚁🐜……虽然听说是外包,但是是全资子公司?🥵

IMG_0858.avif

刚好周末,陪他们一家人带小孩子爬了 #岳麓山,噢不——是全程走公路上去的,没有登山道。

IMG_0868.avif IMG_0869.avif

虽然去过几次了,但是还是去 #文和友 硬凑了个热闹,感觉拍得挺好看的一张照片,原图直出。文和友多了一架钢琴🎹,可惜我好久没练琴,弹了一小段王菲的《如愿》,手就不听使唤了🥵……装逼失败☹️。

IMG_0878.avif

在家里体验了一下 VR,看了几部电影🎥,非常非常“身临其境”🥵🥵🥵……

IMG_0866.avif

恰好有要好的大学同学在字节跳动的 PICO 项目组,随便问了几句……

IMG_0986.avif

快看,下面👇这个外型、配色好像二狗!

IMG_0860.avif

超大的实习,“贵手”,每天都很堵的西二环……

IMG_0900.avif

以及灯💡红🔴酒🍷绿🟢的玉兰路……

IMG_0903.avif

环境优雅、停车难的“湘水谣”:

IMG_0928.avif

超级好吃的椰汁🥥奶冻(四季缤纷椰子鸡.梅溪湖步步高店):

IMG_0910.avif

以及——公司楼下一前一后的两家好吃的早餐店:超人气、非常便宜、马子(臊子)种类自助且超多的“带杏干面馆” & 还不错的女同事推荐的“谭记粉馆”。 老板说看你小伙子瘦骨嶙峋的,肯定吃不了老长沙扣肉……我全吃完了……🥵


返程:753km;高速费用:¥386;时间:12小时(暴雨⛈️、堵车1小时➕充电3小时,下午4点出发、凌晨4点到)。

高速趣事:在刚出龙山服务区(广连高速广州方向)的时候,遇到一辆比我还快的小车🚗(一般比较少见,哈哈哈……),在长途驾车无聊➕没有人超我车➕夜间行车的情况下,我竟然提速追上了他,走到前面又放慢车速,然后又被他超过,他又被我超过……😂😂😂 就这样反反复复,我超他、他超我,前前后后共同行驶了大概有 50km,最终在广深沿江高速的时候“分道扬镳”,他去广州(猜测)、我去深圳。噢,忘了说,他的车牌是 粤J﹒736AA(广东省江门市)。第一次在高速上这样玩儿,感觉好有意思,让无聊的旅途也变得有意思了!


同事、朋友都说长沙作为主力发展旅游的城市,对外地车非常友好:交警尽量不处罚外地车辆的违规😂😂😂。不像深圳,逮住就往死了罚,不愧对作为打工城市的称号。


#长沙 #高速公路 #文和友 #岳麓山

#橘子洲头 没有去。

#茶颜悦色 没有喝,喝的霸王茶姬(同事老婆买的,长沙本地人),奇怪不奇怪?🤔 茶颜悦色不火了?

#长沙 玩了一周多,一天都没有写代码。刚回来又想写代码了……🥵🥵🥵

记得之前有人问我华为问界的英语名字“AITO”是什么意思,以下应该算得上是官方回答……

Adding Intelligence to Auto.

IMG_0939.avif

“华为好、华为美,华为给我增智慧……”[狗头][狗头][狗头]

#英语 #问界

从去年买车到现在一年时间内,折腾了各种商业充电桩,浪费了大量时间与国内的交互师作斗争(注册、充值、扫码、下 App、实名认证、退款、提现……),终于在长沙发现了“e充电”的“即插即充”功能:插上去后一键开充,自动从微信扣款……国家电网牛逼🥵🥵🥵! 其它的垃圾交互全部去死吧!

IMG_0938.avif

终于把这张从第一天上高速就贴上去的、来自深圳交警的、质量超好的实习贴给换新了!

这一年经历了数不清的风吹雨打、它就是不会掉!相比我姐在重庆交警那里获得的实习贴,质量好十倍!

等等,我不是驾照已经满一年了吗?为什么还要贴实习贴?😏😏😏

IMG_0839.avif IMG_0838.avif

#扮猪吃老虎 #深圳 #重庆

看了《NGINX 配置避免 IP 访问时证书暴露域名》,了解到:

  1. 虽然类似 Cloudflare 虽然这种可以隐藏真实 IP……;
  2. 通过 IP 访问可以通过在 ClientHello 里面通过证书确定对应的域名;
  3. Censys 在全网范围内通过访问所有 IP 来找对应的域名;

看来 ssl_reject_handshake 必须得开了。

我怕不是有精神病,为什么看无糖可乐像黑丝?🥵🥵🥵🥵🥵

IMG_0832.avif

二狗的这张照片一定要保存起来:

20211128_17212793.avif

在一个含有 225 个 JPG 大图的目录内用 #FFMPEG 执行到 #AVIF 批量转换时……

截屏2024-07-17 13.09.52.avif

太爆炸💥了,我存储空间剩余不到 200G,内存总共 32G,这 659GB 是怎么冒出来的?🤔

自从把服务器搬到无限流量的机器上以抵御攻击后,QQ 邮件服务又失败了……要不是二狗说没收到通知,我还没留意到最近一周的邮件通知全部失败了。

具体现象是,美国的服务器连不上国内的 QQ 邮箱的 smtp 服务器,看起来是墙的双向屏蔽功能在起作用了,挺好的,主动脱轨,早日倒闭。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
root@localhost:~# ping smtp.qq.com
PING smtp.qq.com (43.129.255.54) 56(84) bytes of data.
64 bytes from 43.129.255.54: icmp_seq=1 ttl=50 time=201 ms
64 bytes from 43.129.255.54: icmp_seq=2 ttl=50 time=201 ms
^C
--- smtp.qq.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 200.505/200.544/200.584/0.039 ms

root@localhost:~# nc -v 43.129.255.54 465
nc: connect to 43.129.255.54 port 465 (tcp) failed: Connection timed out
2024-7-13 07:17:56

用了二狗推荐的 Zoho 邮件,感觉很不错。但是,我只发送成功过一封邮件,后续就再也连不上服务器了,已经发了工单问为什么。

1
2
3
4
5
6
7
8
root@localhost:~# ping smtp.zoho.com
PING smtp.zoho.com (136.143.190.56) 56(84) bytes of data.
^C
--- smtp.zoho.com ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3108ms

root@localhost:~# nc -v smtp.zoho.com 465
nc: connect to smtp.zoho.com (136.143.190.56) port 465 (tcp) failed: Connection timed out
2024-7-14 14:09:04

写了点代码,允许服务器从国内建连接,即:从国外翻回国内。我™️真的太难了🥺🥺🥺。

既然翻回了国内,所以二狗推荐 Zoho 也用不着了,又回到了 QQ 域名邮箱。

评论的邮件通知终于恢复了,哎。

  • 注册“远程拨号器”目前没有鉴权,考虑到只有 TLS 连接,缓缓再搞吧
  • 可以考虑把所有对外的请求通过远程拨号器发起,这样可以避免暴露服务器真实 IP 地址
2024-7-15 18:07:26

连 QQ 邮箱也发不了邮件了……放过我吧,真的不想折腾这玩意儿了……

1
2
3
4
5
6
7
Running tool: /opt/homebrew/bin/go test -timeout 30s -run ^Test$ github.com/movsb/taoblog/modules/mailer -v -count 1

=== RUN   Test
    /Users/tao/code/taoblog/modules/mailer/mail_test.go:18: 535 Login Fail. Please enter your authorization code to login. More information in http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
--- FAIL: Test (0.15s)
FAIL
FAIL	github.com/movsb/taoblog/modules/mailer	0.405s
2024-7-15 19:03:37

注册了一个专用的 Gmail 账号,结果发现在服务器上 smtp.gmail.com 也访问不了……我这才意识到是服务器的问题!

mmp 🤬🤬🤬

2024-7-15 19:46:57

QQ 域名邮箱恢复了,可以继续使用了:

WechatIMG4767.avif

要知道,现在重新注册的话,至少要 ¥25/月,天价……

跟前同事聊天的时候,他看我一直闲着,说让我试试 Web3:

部分聊天记录.avif

直到我今天给他发了这张图😅😅😅:

#护照 补办拿到了!虽然错过了去东南亚、去埃及🇪🇬…… 再找机会!

IMG_0556.avif

然后跟一个大学同学聊了几句天,感觉有点儿聊不下去……😒

IMG_0564.avif

又看到别人推荐 #绝命毒师1 2,竟然还排第一。然后看了下自己的硬盘,三年前就下载好了🥵🥵🥵……

花了一晚上看完了第一季,好像没有特别来劲,感觉不如《漫长的季节》🥵🥵🥵。但是他们说要继续看,后面越看越好看。

剧集排行.avif

对应的中文名字3

编号 英文名 中文名 看过
1 Breaking Bad 绝命毒师
2 Game of Thrones 权力的游戏
3 Chernobyl 切尔诺贝利
4 The Sopranos 黑道家族
5 Band of Brothers 兄弟连
6 The Wire 火线
7 Better Call Saul 风骚律师
8 Stranger Things 怪奇物语
9 Sherlock 神探夏洛克
10 Peaky Blinders 浴血黑帮
11 The Twilight Zone 阴阳魔界
12 Fleabag 伦敦生活
13 Fargo 冰血暴
14 House 豪斯医生
15 Friends 老友记
16 Dark 暗黑(德国)
17 The Office 办公室
18 Succession 继承之战
19 Battlestar Galactica 太空堡垒卡拉狄加
20 Freaks and Geeks 怪胎与书呆
21 Mad Men 广告狂人
22 Narcos 毒枭
23 Mindhunter 心灵猎人
24 Mr. Robot 黑客军团
25 Black Mirror 黑镜
26 Heartstopper 心跳漏一拍
27 Severance 人生切割术
28 It's Always Sunny in Philadelphia 费城永远阳光灿烂
29 The Boys 黑袍纠察队
30 Seinfeld 宋飞传
31 Peep Show 窥视秀
32 The Last of Us 最后生还者
33 When They See Us 有色眼镜
34 The Mandalorian 曼达洛人
35 Lost 迷失
36 Line of Duty 重任在肩
37 Deadwood 朽木
38 Mare of Easttown 东城梦魇
39 Hannibal 汉尼拔
40 The Bear 熊家餐馆
41 Boardwalk Empire 大西洋帝国
42 Atlanta 亚特兰大
43 Vikings 维京传奇
44 Twin Peaks 双峰
45 The Shield 盾牌
46 Happy Valley 幸福谷
47 True Detective 真探
48 The Haunting of Hill House 鬼入侵
49 The Americans 美国谍梦
50 Justified 火线警探

一些观影记录📝

S02

看到了二狗的狗窝:(S02E01@15:33)

doghouse.avif

孕妇🤰也可以把车开得飞起,国内挺着大肚子感觉行走都很难的啊!难道又是体质差异?(S02E04@08:40)

虽然马上临产,但也可以找到一份好工作,家人也同意去上班。🥵 (S02E07@32:10)

哈哈哈,这摩托笑死我了:(S02E07@34:51)

Breaking.Bad.S02E07.BluRay.720p.x264.AC3-CnSCG-0001.avif

既然大家都在讨论说 Pinkman 用 ATM 爆了某人的头,但是为什么警方完全没有找过他做过调查?美国/墨西哥的法律好奇怪。

我发现很多电影中时常提到中国,什么中国菜、中国的经济,这部剧集也是……不明觉厉。 (S02E11@22:15)

杰西还是太年轻不成器啊,轻轻松松就对小女友和盘托出了!不由得想起了圣经中的一句话:Spare the rod, spoil the child. (S02E12@32:36)

Breaking.Bad.S02E12.BluRay.720p.x264.AC3-CnSCG-0001.avif

S03

在坐床头拿平板看完了第三集,啥也没有记录😅😅😅。

S04

S04E13(最后一集)把 Gus 炸裂那一段真精彩啊,走得非常体面。

慎点!血腥!

Walt 这下全身而退了?难道全剧不应该终于此吗,竟然还有一季!赶紧看看是怎么回事!

S05

看完了,感觉最后一季有点儿无聊呢🥵。

Breaking.Bad.S05E16.BluRay.720p.x264.AC3-CnSCG-0001.avif

不过,最后几分钟的重机枪扫射看着是真的爽🤪🤪🤪。

@yiqifacai 只有穷人,才会痴迷技术;只有笨人,才会想着先把事做好。
观察一下身边真正的有钱人,就会发现他们有一个共同的特点:“明明知道这个人不行,但是他不提醒、不指点不好为人师,即便是他的认知经验都超过了对方,他也不会给对方的提建议。
因为无论你是指点、说教,都是需要消耗能量,情商最低的行为就是不停的讲道理,智者戒口,愚者指点江山。能说服一个人的从来不是道理,而是南墙。能点醒一个人的从来不是说教,而是磨难。

噢,难怪我越来越穷了!

不小心写错了代码没加限制🚫,一下子启动了上千个子进程(Perl),瞬间把 CPU & Memory 干爆,要不是连上了图形化的 VNC 终端,我差点没辙……(才意识到 BuyVM 不像 HostDare,后者有拯救模式(Rescue Mode),没出问题时万事大吉,出问题了才知道谁是大哥)。

截图 2024-07-08 03.44.49.avif

截图 2024-07-08 03.45.14.avif

问题已经解决了,那我还要不要写容器的资源配额呢?(逃……)

奇奇怪怪🤔,北京的同学竟然突然发了一张我大学的书📖的照片给我,关键是,我已经完全忘记什么时候给过他这本书了。

b433f2619b34e13576ed021db2f9c1e0.avif

chat.avif

每次找数据库管理软件,就还是觉得 Adminer 顺手,除用 #Adminer 打开 #SQLite3 数据库外,因为它不允许无密码登录,每次都要折腾一下……😡😡😡

  1. Accessing a database without a password 推荐页面使用 login-password-less 这个插件方式;

  2. 这里生成你自己的密码,并替换上述插件的源代码如下:

    1
    2
    3
    4
    5
    6
    
    16,17c16,17
    < 	function __construct($password_hash) {
    < 		$this->password_hash = $password_hash;
    ---
    > 	function __construct() {
    > 		$this->password_hash = '$2y$10$0X0Fb9jejoSGWYjUzZzEh.Ck6riuMLm8z./tClCcQe.jEN68/DZ72';
    
  3. 覆盖掉原始插件代码:docker run -it --rm -v ./your.db:/your.db -v ./login-password-less.php:/var/www/html/plugins/login-password-less.php -p 8080:8080 -e ADMINER_PLUGINS='login-password-less' adminer

就行了,密码输入刚才上面第二步的密码,用户名留空,数据库输入映射的路径即可(绝对路径最好)。

感觉还是做个成品的镜像吧,感觉网上也挺多人搜索这个的,但是网上的方法明显偏复杂,不 Ad-Hoc 🙄:

  • 做个临时用的 Adminer for SQLite3 镜像

“阿米娜·阔伊姆@二代目”最近再度因为在 #推特 上发表了可能涉儿童色情相关的内容被封号,导致推上出现了一众高仿号(“阿米娜·阔伊姆@三代目”),搞得大家都无从分辨孰真孰假。好景不长,“阿米娜·阔伊姆@三代目”又被封号,现在又出现了一堆“阿米娜·阔伊姆@四代目”🤪……

阿米娜·阔伊姆.avif

我是想借这个话题讨论下如何简单证明自己曾经是某个帐户的持有者——一个不需要实名的方式。

方法非常类似于数字签名✍️:

  1. 生成一对公/私钥🔐;
  2. 用私钥签名自己的帐户名字;
  3. 将签名结果置于当前帐号的描述中;
  4. 帐号被封;
  5. 注册新的帐号;
  6. 用私钥再对新的帐号签名(步骤2、3);

验证方式:

由于签名中带有公钥,如果新、旧帐户的公钥相同,则一定是由相同的私钥签名的,从而证明新、旧帐户的持有者是同一人。

说明:

  1. 被签名的数据可以是任意的,只需要保证公钥一致。

蔡佩軒 Ariel Tsai【禮物】(Blessings) 4K MV 官方版

为什么觉得特别好听,听了一晚上……😂😂😂😂😂

#音乐

今天奇怪的一连串事件……

空调突然漏水,正好滴在我电脑💻上,然后,下方正好是插排🥵🥵🥵!

还好我怕灰尘太多,把 MacBook 用原装的袋子裹了一下,没想到有意外的收获。 早上躺在床上的时候听到滴滴的声音,明明感觉声音是来自空调内机……

然后发现,二狗和雨帆竟然在我的评论区写起了 HTML,见评论。 于是我就惊坐起,赶忙看看这几天又把哪里的代码改崩了😡😡😡……

然后又发现,那个古早时期玩 QQ 空间(暴露年龄了)留下的“跑马灯🐎”的滚动效果的单词 marquee 正好是“大帐篷”的意思……

然后我顺手就从旁边装鸡蛋🥚的箱子📦里面拿起一块泡沫,盖在了电脑上,给插排搭起了个“帐篷⛺️”:危险⚠️解除!

IMG_9970.avif

待办事项
  • 编写自定义的 robots / well-known 处理器,过滤机器人请求

非常郁闷,同事说明天中午一起吃饭订机票,该启动国际旅游计划了…… 但是,我突然发现我的 #护照 不见了,找了一个小时都找不到。打视频电话给妈妈让帮忙在农村老家找一找,看是不是过年落家里了,结果也没有找到……

2024-6-20 01:15:38

花了一晚上,做了个大扫除🧹,把出租屋翻了个底朝天,仍未得。

我真的会谢,这么多年,时常看见,从来没有带出过门,突然需要用到时就……消失得无影无踪 😭😭😭。

时常会接到深圳的莫名其妙的电话,也不知道是不是谁拾到了我的护照交公了,然后因为我不接陌生电话而错失……

哎😑,预约了明天的补办,失败了好几次。看造化吧。

2024-6-20 13:17:05

IMG_9925.avif

去补办了,哎呀,要等到 7️⃣🈷️1️⃣1️⃣ 号才能拿到,黄花菜都凉了……我错了🧎。

刚装的全新系统,一跑 docker-compose 就脚本报错,搞了好一阵才发现原来 #Docker 早就放弃 #Python 版本、而用 #Go 重写了。

所以,现在不再是:

1
apt install docker-compose

而是:

1
apt install docker-compose-v2

了。以前是用 docker-compose,现在是用 docker compose。难怪官方一直叫我这样用但是又一直报错:docker: 'compose' is not a docker command.……🙄

非常丝滑。哎,生命苦短,别用 Python。

如果有人想看看是什么错,可以点击展开。
 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
root@twofei:~/servers/taoblog# docker-compose up -d

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 214, in _retrieve_server_version
    return self.version(api_version=False)["ApiVersion"]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/daemon.py", line 181, in version
    return self._result(self._get(url), json=True)
                        ^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/utils/decorators.py", line 46, in inner
    return f(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 237, in _get
    return self.get(url, **self._set_request_timeout(kwargs))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 602, in get
    return self.request("GET", url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 486, in send
    resp = conn.urlopen(
           ^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 791, in urlopen
    response = self._make_request(
               ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 497, in _make_request
    conn.request(
TypeError: HTTPConnection.request() got an unexpected keyword argument 'chunked'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/docker-compose", line 33, in <module>
    sys.exit(load_entry_point('docker-compose==1.29.2', 'console_scripts', 'docker-compose')())
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 81, in main
    command_func()
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 200, in perform_command
    project = project_from_options('.', options)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 60, in project_from_options
    return get_project(
           ^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/command.py", line 152, in get_project
    client = get_client(
             ^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/docker_client.py", line 41, in get_client
    client = docker_client(
             ^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/compose/cli/docker_client.py", line 170, in docker_client
    client = APIClient(use_ssh_client=not use_paramiko_ssh, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 197, in __init__
    self._version = self._retrieve_server_version()
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/docker/api/client.py", line 221, in _retrieve_server_version
    raise DockerException(
docker.errors.DockerException: Error while fetching server API version: HTTPConnection.request() got an unexpected keyword argument 'chunked'

我去,小火箭是怎么敢把 #NES 几十年的扩展名你都敢给我占了?😡😡😡

Xnip2024-06-14_17-52-01.avif

待办事项
  • 监控服务器的磁盘空间(几度要被打满了)(这里

还是很好听……

标题:おやすみ

专辑:Zwei!! Original Sound Track

作者:Falcom Sound Team jdk

00:00
摄于:2019年1月26日 星期六 23:48

#番茄花园 🍅,#复古

おやすみなさい。

啊啊啊,原来 position: sticky; 已经早就进入标准的 #CSS 了,而我的《CSS 定位 (Positioning)》这篇文章正好写于标准化的那一年前后……

从这个页面的表格上面学来的:https://exiftool.org/

2024-6-14 16:36:55

偷走了,可以在博客程序页面中的更新历史表格中看到效果。

2024-6-14 17:39:04
2024-6-14 22:13:48

维斯百科表格中关于 <table> 的使用的描述

Common attributes for columns, column groups and row groups

The MediaWiki syntax for tables currently offers no support for specifying common attributes for columns (with the HTML element ‎<col />), column groups (HTML element ‎<colgroup>‎</colgroup>) and row groups (HTML elements ‎<thead>‎</thead>, ‎<tbody>‎</tbody> and ‎<tfoot>‎</tfoot>). Those standard HTML elements are not accepted even in their HTML or XHTML syntax.

All the rows and cells (header or data) of the table are rendered within a single implicit row group (HTML element ‎<tbody>‎</tbody>) without any attributes or styles.### Common attributes for columns, column groups and row groups

The MediaWiki syntax for tables currently offers no support for specifying common attributes for columns (with the HTML element ‎<col />), column groups (HTML element ‎<colgroup>‎</colgroup>) and row groups (HTML elements ‎<thead>‎</thead>, ‎<tbody>‎</tbody> and ‎<tfoot>‎</tfoot>). Those standard HTML elements are not accepted even in their HTML or XHTML syntax.

All the rows and cells (header or data) of the table are rendered within a single implicit row group (HTML element ‎<tbody>‎</tbody>) without any attributes or styles.

2024-6-14 23:26:51

不要用 border-collapse: separate;,除非样式写得非常完美,否则带 rowspan 的 tr/td 的 border 会重复出现。不信试试?1

待办事项
  • 把用 outline 实现的 th 的 border 成文(border-collapse 的情况下);

#Grafana 设置单个面板的时间范围为昨天一整天:

很难理解,但是达到要求了。

把 Query Options 设置成:

  • Relative time:now/d
  • Time shift:1d/d

其中的 / 有特殊含义:

  • 对于开始时间:表示 round 到时间单位的开始;
  • 对于结束时间:表示 round 到时间单位的结束。

上面的ℹ️提示也非常秘:Relative time should be now-5m and 5m, or variables like $_relativeTime.
请问:你就一个框,你教我如何填两个值?

relative-time.avif

就连特意显示的时间范围的友好名也是错误的:

time-info.avif

这里明明该是:Yesterday。

把用 #Obsidian 管理维护的日记本仓库自动同步脚本停了,废弃 Obsidian 中……

说了好久了,用了几年,感觉越来越难用。

2024-6-11 10:57:21

把日记导入到博客中的代码写好了。

2024-6-11 12:36:05

全部导入了,编号范围:10831417,默认状态全部为“私密”。

我竟然写了这么多……

2024-8-5 01:42:20

哈哈哈,希望我放弃 #Obsidian 是正确的选择:

IMG_1274.avif

className 竟然可能不是普通 string……

className can also be an instance of SVGAnimatedString if the element is an SVGElement.
It is better to get/set the className of an element using Element.getAttribute and Element.setAttribute if you are dealing with SVG elements.
However, take into account that Element.getAttribute returns null instead of "" if the element has an empty class attribute.

意味着,没有 includes 方法1…… 太反直觉了,虽然我一直用 classList.contains

傻逼苹果,电源都给整出负数了,一天没用电脑,待机又把电耗空了,又睡死了……

neg.avif

#中山#珠海 一日游~ 没别的,同事去练练车。

带同事去了野狸岛——上次相亲妹子带我去的那个岛,终于吃上了妹子非常推荐的那家店的蛋挞(上次排队太久没等),好吃是非常好吃,但这也太腻了……🥵。

#七娘山 回来的路上,顺路送了一个一起下山的大哥。大哥人挺好的,下雨的时候还主动提出给我雨衣,我朋友下山非常慢,他还边走边等我们一起。到山脚公路上的时候,他说他要打车从七娘山回龙岗,我非常吃惊,毕竟这得有 60 多公里,还挺偏,不得一两百的打车🚖费?于是我就捎上了他,当然,他说要给我钱,我没要,大哥不要嫌弃我开飞车就好了。 #你是个好人

送毕,终于是想起了要去一个九年没见的老同学那里。大学的时候我们都是用 QQ,我连他的微信都没有,毕业后没了消息。我们都是来自同一个人工智能实验室,所以其实关系很好。他就在龙岗,巧的是,他的店就在大哥下车点 2 公里。

听另一个同学说他自己创业在 #深圳 开了一家 #火锅 🍲 店,想过去尝尝味道如何。作为小半个 #重庆 人,还得是重庆味道适合我。店在龙岗,因为他之前在比亚迪龙岗的工厂里面,后来遇疫情就辞职了,然后几乎是从零开始学做火锅,这让我非常震惊。我没有问他为何辞职,但我知道的是,比亚迪和在龙岗的华为一样,都是非常血汗的工厂,而和华为不一样的是,比亚迪的工资非常低。

今天可不是周末,但是几乎座无虚席…… 我刚走到门口,他就过来跟我握手,那一定是一眼就认出是我来了。当然,我也认出他来了,我们似乎都没有变。 他看起来完全不像是一个老板模样,还是学校时的穿着,学生模样。我那个同学跟我说:等他结账的时候,你就知道他是老板了。

我问他你这边怎么这么多妹子,是不是附近有什么学校🏫?他:深圳妹子本来就多……

我还没有结婚,他,也没有。

(打码好麻烦,不想打了。)

终于等到了不是下雨的一天,也终于去了 #七娘山 —— 一座应该算得是 #深圳 少有的我没爬过的山了。

越近山脚,就发现天气越来越开始恶化,尽管我一早就打电话问过今天是可以登山的,但是我仍然一度怀疑马上又要封山,害怕又白来一趟!虽然我觉得开车非常有乐趣,但是,我过来可是要 90 公里,这可不是闹着玩儿的!

一点儿都不风和日丽,几张非常普通的照片。 登顶的时候甚至飘起了小雨🌧️,感觉全身湿了个大半。 而且上面完全是白茫茫的一片,被雾气🌁笼罩着,几乎没有能见度。 本来也带上了无人机,但是发现毫无用处。(最后一张是山顶。)

这座山有个非常神奇的特点: 虽然登山的路上经常可以看到多条支路,但是,最终它们都会在前面几十米处殊途同归。我一开始会犹豫怎么走,但是经历过几次后发现:怎么一回头就发现隔壁还有一条路?然后就明白,并不是他们不愿意标路牌,因为真的不用🙂‍↔️。

山顶上竟然有“证书”可以拿?这应该是我第一张关于登山的证书。

山上的所谓的观景平台,其实是一个个凸起的小坑位,只有一条路进入,周边也非常隐秘。再加上我们是非周末去的,人非常少,感觉会是情侣幽会的绝佳之地😝。 我应该用无人机来拍的,可惜这天气让我懒得拿。

“🧑‍🧒‍🧒设施老旧,请勿聚集。”

同事终于把宝马提到手了,穷逼我也第一次开上了宝马……

笑死,同事吃午饭的时候跟我说:我跟 XXX 来这个店试驾了三次,今天提车带你来。 我说,你这不是渣男吗……🤣(澄清一下,他一直单身。)

体验再谈

我收回部分上次说的话,再谈谈我觉得的一些明显的优点与缺点:

优点:

  • 油门响应速度确实快,远比我租的 200 块一天的车好使,上次那个试驾车是个垃圾;
  • 外观非常漂亮,高端、大气、上档次。

缺点:

  • 车机非常鸡肋:
    • 蓝牙连接后切换困难,害得我手机关机后同事才重新连上;
    • 用不了百度地图,车机地图不适应;
    • CarPlay 响应很慢、手机发热严重、甚至会把音乐/语音给卡断。

哎,搞得好像是我提了一辆 #宝马 这么高兴一样,你咋发这么多图呢?

特写

真的很帅……

随拍

午餐

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

晚餐

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

一些沿途

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

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

nginx 居然在我服务 panic 挂了的时候重新连接一次……神奇,一个请求收到两次连接。。。

“白头并非雪可替,相识已是上上签。” 这 #杨晚晚 这么懂我,怕不是有毒吧!🥵

没错,深圳又开始不停地下着雨了,计划一周的去 #七娘山 又泡汤了……只能宅家研究杨晚晚……啊不不不,是“研究”技术……🥵

白头并非雪可替,相识已是上上签.avif
白头并非雪可替,相识已是上上签.png

上面哪一张图更清晰?你猜哪张是原图? 上面是 #AVIF,下面是 #PNG

答案是:下面的 PNG 是原图。特地为了对比,所以没有删除。 AVIF 是用 ffmpeg 从 PNG 转换来的,因为 PNG 太大了(446KB),而 AVIF 只有 38KB,不足十分之一大小,神奇不神奇?看来这 AVIF 是不得不爱了!

另外,没想到这 AVIF 还有 “美颜/磨皮”效果?🤪

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
package main

import (
	"bytes"
	"io"
	"os"
	"strings"
)

// 基于内存实现的可重复读的 Reader。
func MemDupReader(r io.Reader) func() io.Reader {
	b := bytes.NewBuffer(nil)
	t := io.TeeReader(r, b)

	return func() io.Reader {
		br := bytes.NewReader(b.Bytes())
		return io.MultiReader(br, t)
	}
}

func main() {
	r := strings.NewReader("123\n")

	dup := MemDupReader(r)

	for i := 0; i < 10; i++ {
		io.Copy(os.Stdout, dup())
	}
}

结果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
tests (main) → go run main.go
123
123
123
123
123
123
123
123
123
123

主要原理是:

  1. 通过 TeeReader 把从原始接口读出来的数据顺便写一份拷贝到内存 Buffer 里面(io.Writer);
  2. 然后下次读的时候,首先从内存读(io.Reader),然后继续从原始的数据读;
  3. 通过内存 BufferBytes() 重建一个 bytes.Reader 支持了 io.Seeker1

由于是在内存中缓存的,所以要小心数据不能太大。否则应该用文件实现缓冲(io.ReadWriteSeeker)。


  1. 奇怪为什么 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
package main

import (
	"fmt"
	"net/url"
)

func main() {
	u1, _ := url.Parse("/1.txt")
	u2, _ := url.Parse("file:///1.txt")
	fmt.Println(u1.IsAbs(), u2.IsAbs())
}

你要这么搞的话,我感觉 Go 语言对我来说有点儿不受控了……

1
2
$ go run main.go
false true

就算对于前端来说,以 / 开头的也是绝对路径啊,以 https:// 开头这种难道不叫跨源吗?都可以叫作“不是同一个文件系统”了……

笑死,神经病一样,在 GitHub 上看故事1,这些烂用 GitHub 的人到底有没有公德心? #王思聪 #AVIF

又不回我是吧.jpg

特意贴这句话,是突地想起了前司的一位同组的女同事……之前经常相互发这个来着……🥵,差点遗忘,写下来,对抗遗忘。

为了防止我自己也忘记名字,我应该把名字记录在本文中,怎么做?

这是一条来自手机端 iOS App 的碎碎念!🍏🍎。 测试!

人生 #第二次 开发 iOS App!

当然,我并不是要开发一个完整的客户端,只是为了测试一下如何在 iOS 上使用 #GRPC#ProtocolBuffer,上手难易程度完全在预期范围内,感觉当初用 GRPC + ProtocolBuffer 重构 API 接口是非常正确的选择。

只是……接近两年没写 #SwiftUI 了,反倒是 UI 慢慢摸索了好久……

2024-6-2 09:18:11

(当然,图片不是来自手机端 🤪🤪🤪)。

2024-6-2 09:34:19

我一定是现学现用!感觉从来没有开过这么多的标签页!

#第一次 使用 #AVIF 图片格式,比 JPG/PNG 都小,甚至比 WebP 还小很多,后面有空再试试 #JpegXL

第一次总有些不愉快…… 是的,下面这张图好大,因为我代码的图片自动缩放功能不认识 AVIF 格式,晚点有空再修吧😇

tabs.avif

2024-6-2 23:51:10

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

LMt5R.jpg

2024-6-3 07:43:51

#AVIF 图片大小修好了,就不会有我搞不定的事!

2024-6-14 18:01:58

找了半天的图片转文字(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 的后端);

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

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

2024-5-30 15:08:54

必须来一首 #洗脑 的歌:

标题:片片相思赋予谁

专辑:片片相思赋予谁

作者:杨晚晚

00:00

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

2024-6-14 19:25:42

reply.avif

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

<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

别问我,我不知道。

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

待办事项

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

license.jpeg
stat

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

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


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


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

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

container-query.svg

待办事项

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

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

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

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

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

一大早刚醒来,就看见亲戚发了个视频,现场非常惨不忍睹。是的,家里进村的小公路旁边又发生了严重车祸,一辆白色的比亚迪汽车径直撞向了一旁的等待坐免费公交去镇上赶集的老年人、等待上学的孩子、以及接送学生的家长。其中 5️⃣ 个人没了(学生没事),其中一个是我们村的。

去年带同事回老家时就发觉到,我们村本来就非常小,常住人差点两只手👐都能数尽(敢信?),不像同事河南那儿,一个村几千人/户。我们村要是再出个事、走几个老人,那几乎是要成“消逝的村庄”了。不知道多少个家庭又支离破碎。

我很后悔虽然从小在老家生活长大、但其实极少留下值得纪念的东西,甚至照片都少之又少。现在家乡变化又这么大,尽管我如同一个“闲人”,但是我还是“回不去”那个家乡。

希望大家都平平安安。

“吾心安处是吾乡。”——XX。


不出意外,没过多久,现场就收拾得“干干净净”。然后就有人给我家人“送温暖”,上门翻查手机,要求删除视频。 电话甚至都打到了远在云南那头的我爸那里…… 从没有哪一刻感觉到他们的温暖如此亲切过。

这叫什么好事不出门、此地无银啊? 同事问我怎么没上新闻📰?我说:什么时候他们不这样做了,那才算得上是新闻。


现场视频出来了,慎点~

后来爬起来那个小孩子是我堂姐的女儿👧,万幸只受了轻微擦伤,她妈妈也没事。


👩:今天调查的人说中央都来了人的。
👩:撞人的那个人,儿子是飞行员,也跟他停职了。今天调查的人来说的。


新闻出来了(为了隐私暂时不放),驾驶员头天晚上彻夜打麻将🀄️致严重疲劳驾驶。

早前推上有人说像 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,我是🐶党。

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

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

一些不成熟的见解:

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

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

又是小满,又是 5.20,跟前同事约了个饭🍚,继续走个仪式,叙叙旧。 他今天没上班,但是也不会出去玩,因为晚上他约了妹子。

本来我俩是很早就规划了5️⃣🈷️份去东南亚新马泰🇸🇬的玩法,结果为了避开高峰,5️⃣1️⃣就去了他家茂名。还以为东南亚之旅已经不再提,结果又被提起,maybe 六月(底)。说起来,前司是一家主营东南亚的公司,虽然我待了好几年年,竟然没借机出去玩过……实属遗憾。

好巧不巧,我姐要带侄儿于暑期去土耳其🇹🇷去找姐夫,问我要不要随同,从深圳出发🛫…… 如果不去,就帮她照看一下猫猫🐈:

78月份有安排没
我把猫带过来,帮我养两个月吧[捂脸][捂脸]
哈哈哈哈,很乖的。只需要铲屎🥣,其他都不管[捂脸]
猫砂猫粮我买了寄过来,自动喂食器安起,自己喂自己吃🐱
乖得很,不吵闹不拆家,不凶人,舍不得不要了
可以保证饿不死[旺柴](我)
你隔太远了,要是在重庆,就安逸了[捂脸]
带人家旅游下不好吗(我)
飞机托运很麻烦,[奸笑]要不你回来,爸爸满60

这最后一句,让我 emo 了。我差点儿就忘记爸爸马上要过生日了,倒不是忘记,只是会影响到我的规划。 车子本来就是买给他庆祝 60 岁生日🎂的,被我开到了深圳来……在考虑要不要回去?

我自认为不是一个很麻烦的人,但是有时候真的各种事情混在一起我真的很怕麻烦:

  • 要找工作、回去后要面对如何给家人/亲戚解释还没有工作
  • 要找女朋友、要面对如何给媒婆解释为什么不找人家妹子聊天💬了
  • 要面对同学为何给你介绍妹子的局不去……

有时候很想自己是一个自由的人,但大多数时候身不由己……

“唯有取舍让我为难。”——雪舞。

待办事项

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

待办事项

  • 写一个类似日历的事件记录系统,比如十周年

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

tme.jpg

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

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

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

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

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

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?

待办事项

  • 错误页面

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

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

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 没有问题🙂‍↔️。

待办事项

  • 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>

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

用错了 line-height 好多年😇,仔细读读 line-height - CSS: Cascading Style Sheets | MDN,其中提到的关于带单位与不带单位的不预期的行为。

本来想写点儿例子总结下的,结果发现写的例子总有我自己不明白的地方,干脆不写了🌿。

还是写点儿……

  1. 既然 span 继承了 div 的 line-height,但是为什么写和不写有区别?

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    <div><span>1</span></div>
    <style>
    	div {
    		line-height: 2em;
    	}
    	span  {
    		font-size: 8em;
    		line-height: 2em;
    	}
    </style>
    

    用例:line-height-inheritance.html

原来,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');

待办事项

  • 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️⃣个小时。就像和绝大部分高速公路拥挤一样,当你快速多次地穿梭于车辆之间后会发现,前面简直是畅通无阻、一片光明。 什么,光明?我感觉今天的拥堵实属就是对同事买车最大的讽刺。

待办事项

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

Go 语言多少有点儿大病,以至于这种东西需要我自己实现,以至于我需要用我三脚猫功夫的模板/泛型才能实现。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// https://en.wikipedia.org/wiki/IIf
// https://blog.twofei.com/716/#没有条件运算符
//
// 用法:
//      a := IIF(b, c, d)
// 类似于:
//      a := d; if b { a = c }
// 其它语言写法:
//      let a = b ? c : d;
func IIF[Condition ~bool, Any any](cond Condition, first, second Any) Any {
	if cond {
		return first
	}
	return second
}

是谁当初说不需要三元/条件运算符的?我打断他的 🐶 腿。

我真是个天才。

如果评论中带列表(list),那么当前的列表会顺序递进样式:比如第一层用实心圆点儿,第二层用空心圆点儿,第三层用方块儿。这个行为是浏览器默认的。

但是我的评论列表也是用的 <ul>/<ol> 来描述,这种嵌套关系会导致评论内容中的列表表现不一样,所以需要重置列表项的样式(list-style-type)。 做法也非常简单:

1
2
3
ul, ol {
    list-style-type: initial;
}

解决完这个问题后,我突发奇想:Markdown 是支持多种 Markers 符号官方的(就是用哪个符号表示要开始写列表了,比如:- + * . )), 那么我为啥不保留原始的这个符号呢,这样更所见即所得? 于是我就打开了 list-style-type 一看,竟然示例中第一个就是自定义样式🤣,这下不得不学了……

如我想像中的那样简单,常用的都预置了。但是 1) 2) 这种没有。我用 @at-rule 自己写了一个 marker 生成器:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// https://developer.mozilla.org/en-US/docs/Web/CSS/@counter-style
@counter-style parenthesis {
	system: numeric;
	symbols: "0" "1" "2" "3" "4" "5" "6" "7" "8" "9";
	suffix: ") ";
}
ul, ol {
	&.marker-minus          { list-style-type: "- ";        }
	&.marker-plus           { list-style-type: "+ ";        }
	&.marker-asterisk       { list-style-type: "* ";        }
	&.marker-period         { list-style-type: decimal;     }
	&.marker-parenthesis    { list-style-type: parenthesis; }
}

然后就是在文档渲染时解析 Markdown 的过程中判断一下 Marker 的类型并增加类名即可:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
var knownListItemMarkers = map[byte]string{
	'-': `minus`,
	'+': `plus`,
	'*': `asterisk`,
	'.': `period`,
	')': `parenthesis`,
}

// 保留列表样式。
//
// 只是增加类名,前端通过类名自行决定怎么展示。
func (*_ReserveListItemMarkerStyle) WalkEntering(n ast.Node) (ast.WalkStatus, error) {
	switch typed := n.(type) {
	case *ast.List:
		if class, ok := knownListItemMarkers[typed.Marker]; ok {
			appendClass(typed, `marker-`+class)
		}
	}
	return ast.WalkContinue, nil
}

然后就是一些例子🌰:

如愿

  • 演唱:王菲
  • 作词:唐恬
  • 作曲:钱雷
  • 你是 遥遥的路
  • 山野大雾里的灯
  • 我是孩童啊 走在你的眼眸
  • 你是 明月清风
  • 我是你照拂的梦
  • 见与不见都一生与你相拥
  1. 而我将爱你所爱的人间
  2. 愿你所愿的笑颜
  3. 你的手我蹒跚在牵
  4. 请带我去明天
  5. 如果说你曾苦过我的甜
  6. 我愿活成你的愿
  7. 愿不枉啊 愿勇往啊
  8. 这盛世每一天
  1. 你是岁月长河 星火燃起的天空
  2. 我是仰望者 就把你唱成歌
  3. 你是我之所来 也是我心之所归
  4. 世间所有路都将与你相逢

不知道是哪天,为了显得行文更正式一点儿,我特地给“妳”添加到了自定义短语里面,输入vq即可代替原本不是二级简码的vqiy。 这样就和输入“你(wq)”一样只需要两笔。

然而,我几乎从来没有打过这个字。因为,没有一个她。

妳

在我正在每天使用的电脑的一个很浅的备份目录内找到了7️⃣年前备份的“说说”(就是本碎念功能的前身)。看了下时间点,正好结束在隐藏说说功能前夕。

都是我的过去,为了不丢失,还是给它们“安个身”吧?毕竟也没有别的人这么多年陪着我,只有我的数据。

1
2
3
4
5
6
7
-- MySQL dump 10.13  Distrib 5.5.43, for debian-linux-gnu (x86_64)
--
-- Host: localhost    Database: taoblog
-- ------------------------------------------------------
-- Server version	5.5.43-0ubuntu0.14.04.1

-- Dump completed on 2017-10-08  3:38:08

看起来有些年迈了。

哈哈哈,那时候的“说说”还记录了地点信息的:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
DROP TABLE IF EXISTS `shuoshuo`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `shuoshuo` (
  `id` int(20) unsigned NOT NULL AUTO_INCREMENT,
  `content` text CHARACTER SET utf8 NOT NULL,
  `source` text CHARACTER SET utf8,
  `date` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
  `geo_lat` float(10,6) NOT NULL DEFAULT '0.000000',
  `geo_lng` float(10,6) NOT NULL DEFAULT '0.000000',
  `geo_addr` varchar(256) CHARACTER SET utf8 NOT NULL,
  `comments` int(20) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=208 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

那还是我数据库时间用 datetime 的年代,想想当年好像是写了一整个的 PHP 文件来处理日期/时间📅。

评论就显得比较简单,竟然连作者邮箱都不用留的,随意留言,多么简单而又美好的年代:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
DROP TABLE IF EXISTS `shuoshuo_comments`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `shuoshuo_comments` (
  `id` int(20) unsigned NOT NULL AUTO_INCREMENT,
  `sid` int(20) unsigned NOT NULL,
  `author` tinytext CHARACTER SET utf8 NOT NULL,
  `date` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
  `content` text CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

待办事项

  • 用节流的方式更改博客的备份时机。现在一直是一天定点备份。有滞后,风险较高。
  • 把代码渲染改成可选项,RSS 不需要渲染。
  • 接入 plantuml
  • 动态更新时间?页面时间 1 分钟前 显示不对不会更新,除非强刷。。
  • 把 taorm 成文
  • api获取文章时删除敏感字段(geo)
  • 我应该复用评论编辑框为文章编辑框,这样就使合并文章和评论的进度又提前了一步。
  • 管理员允许编辑评论者的信息。
  • 预览文章编辑信息。
  • 实现一个前端的编辑距离算法以自动定位没加 name 的 # hashtag。并且生成 toc。
  • 把三元运算符成文。
  • 把 Youtube 加载变懒。
  • 我甚至可以开放编辑✍️功能……
  • 写个debounce,延缓文件刷新。
  • 支持 HEAD 请求,不要返回 404
  • 用 api 更新动态可变数据(文章评论数)

为了在前端发一张带图片的碎碎念,写了一天的代码支持在前端上传⏫文件🥵,兜兜转转又回来了。

看了很多上传文件相关的文章,但是都没有采用(fetch + XMLHttpRequest)。
取而代之,用的是我自己的文件上传方案:通过 WebSocket 把 GRPC Stream 代理(双向拷贝)到前端。
这样的话接口就全部统一了。也可以很方便地增加上传进度展示(目前没有加,因为文件小)。

这好像是一个网上很少被提起的方案。

Go 的内嵌接口不会自动包含被内嵌的对象实现的接口,所以像下面这样的代码不会如预期的方式工作,不知道为什么,踩坑几次了😫:

 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
package main

import (
	"io"
)

type A struct{}

func (a *A) Close() error               { return nil }
func (a *A) Read(p []byte) (int, error) { return len(p), nil }

// A 实现了 ReadCloser
var _ io.ReadCloser = (*A)(nil)

// 无论以何种方式嵌入 A,B/N 都无法完全断言出 A 实现的全部接口。
type B struct{ io.Closer }
type N struct{ any }

func main() {
	var b any

	b = &B{&A{}}
	b.(io.Closer).Close()
	b.(io.Reader).Read(nil)

	b = &N{&A{}}
	b.(io.Closer).Close()
	b.(io.Reader).Read(nil)
}

现实代码是,我包裹了 http.ResponseWriter 通过重写 WriteHeader 的方式以实现捕捉到状态码:

1
2
3
4
type _ResponseWriter struct {
	http.ResponseWriter
	code int
}

然后就发现,我自己的 _ResponseWriter 没有实现 Hijacker 了,导致我的 WebSocket 升级失败。

现实是,很多代码都这样写,并且以为不会出问题。比如:

一直没明白为什么不支持。

2024-6-1 18:05:41

发现了一个 Go1.20 新加入的功能:https://pkg.go.dev/net/http#NewResponseController 可以完成我要的功能。

2024-6-4 07:00:46
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// https://blog.twofei.com/909/
type _ResponseWriter struct {
	http.ResponseWriter
	*http.ResponseController
	code int
}

func (w *_ResponseWriter) WriteHeader(statusCode int) {
	w.code = statusCode
	w.ResponseWriter.WriteHeader(statusCode)
}

使用 Rollup 给 js 打包的时候发现它有一个“奇怪”的格式化参数 -f iife。查了一下才知道,像下面这样的代码写法:

1
2
3
(function () {
    /* ... */
})();

有一个专门的名字:Immediately invoked function expression / 立即调用函数表达式

这个概念已经存在很久很久了,只是我今天才知道它有正式的名字,被这样缩写。

我好像很久没看书📖了。有点儿恐怖。

待办事项

  • admin/script.js 为什么没有缓存?

终于回到了深圳,结束了五一假期为期4️⃣天的茂名/化州旅游,日子又回归平静。

全程 1028.6kM。 去程(4月30号22点➡️次日11点)用时13小时; 回程(5月4号18点➡️次日02点)用时8小时。 回程少花了好几个小时,大概是少经历了好几次车祸现场,并且中途变聪明了,中途下道几次躲避拥堵。 去程的途中也经历了超级大暴雨⛈️,不过好在已经是早上的7点,天已大亮,并且尽管已熬整夜,但大家状态都非常好。而我,经历过贵州山区的超级大暴雨,这点儿“毛毛雨🌧️”对我来说,不值一提。听闻此次梅州高速坍塌事件后非常痛心。

认识了董的好几个家人(几个姐姐、相亲对象、以及他爸),(他们)广东人(范围是不是太大了,应该是茂名人/化州人/他们家?)不管是什么场合(吃饭、唱歌、娱乐、购物、散步、乘车……)感觉有说不玩的笑话,一家人的气氛非常的活跃、欢快、热情。 这是我以前从未见过如此和谐的家庭。当然,他们几乎全程用当地方言,我几乎没能参与对话,也不能明白他们谈吐的精髓。比较遗憾。

当然,旅游不一定有足够吸引人的风景可看,但……美食不应该少。各种特色盐焗鸡、牛腩没少吃!特别是他爸现场监工的那只盐焗鸡,据说是现挑、现杀、现做、现提、现吃。是我吃过的最好吃的一只!

待办事项

  • 编写统一的重未登录定向处理器。
  • 成文: Grpc stream interceptor 的 wrap context WrapServerStream
  • 把评论列表静态化成一个 json文件。

W3C 总是能给我整出恶心的东西,为什么把一个 Date 赋值给 <input type="datetime-local" /> 这么难?这tm是给人用的吗?🤔

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// https://dev.to/kevinluo201/set-value-of-datetime-local-input-field-3435
// getFullYear, getMonth, getDate, getHours, getMinutes all return values of local time.
const convertToDateTimeLocalString = (date) => {
  const year = date.getFullYear();
  const month = (date.getMonth() + 1).toString().padStart(2, "0");
  const day = date.getDate().toString().padStart(2, "0");
  const hours = date.getHours().toString().padStart(2, "0");
  const minutes = date.getMinutes().toString().padStart(2, "0");

  return `${year}-${month}-${day}T${hours}:${minutes}`;
}
const currentTime = new Date()
document.getElementById('start-time').value = convertToDateTimeLocalString(currentTime)

而如果是 Go 的话,只需要下面这样一句就可以了:

1
time.Now().Format("2006-01-02T15:04:05")

五一本来是不打算出去玩儿的,节假日都不喜欢,太堵了,堵人堵车。但这次是个例外,是准备去董的家乡茂名旅游一圈。董的相亲对象竟然非常巧合地在高铁临近出发前错过了,于是一行四人,晚上十点,从深圳出发。

从未在节假日高峰开车出游过,没想到到虎门50公里开了4️⃣个小时。而全程不到500公里的路程居然次日早上11点才到。总共驾驶13个小时,除两次充电分别休息差不多半小时外,全程是我开车,是真的累,堵得累。有史以来连续开车最长的一次,不是炫耀。

没想到刚上线话唠功能就收到了 Freya 的邮件说博客挂了🥵…… 跑上去一看是代理工具把磁盘全部占满了。

我在vps上也无法访问,重启了先…

大概原因是被我的代理服务打日志把根盘占满了🥵

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
root@twofei:~/servers/taoblog# df -htext4
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        34G   32G     0 100% /

root@twofei:/var/lib/docker/containers/593754ff847d194ac2b1172b551bd28c55d421a6c63fe1335cab74898022d7c3# ls -lh
total 13G
-rw-r----- 1 root root  13G Apr 30 13:04 593754ff847d194ac2b1172b551bd28c55d421a6c63fe1335cab74898022d7c3-json.log
drwx------ 2 root root 4.0K May 29  2023 checkpoints
-rw------- 1 root root 2.6K Mar 11 22:03 config.v2.json
-rw-r--r-- 1 root root 1.5K Mar 11 22:03 hostconfig.json
-rw-r--r-- 1 root root   11 Mar 11 22:03 hostname
-rw-r--r-- 1 root root  225 Mar 11 22:03 hosts
drwx--x--- 2 root root 4.0K May 29  2023 mounts
-rw-r--r-- 1 root root   38 Mar 11 22:03 resolv.conf

上面那个json日志好大🥵 10多个G

1
2
root@twofei:~/servers/taoblog# docker ps | grep  59375
593754ff847d   taocker/socks-proxy            "./socks-proxy serve…"   11 months ago   Up 7 weeks  socks-proxy

跑了11个月了

我家里整个外网访问全靠它🥵🥵🥵

看来运维做得还是不够好呀,我是草台班子!

早在 2015 年刚创建本博客程序的时候就有了一个简单的“说说”功能,相对于复杂的文章来说,就是用来发表日常吐槽。

可是本来是我技术起步阶段,就做得非常难用。后来就隐藏了这个功能,再后来就删除了这个功能。 不知道以前的数据还在不在,如果在的话,抽空同步上来。

现在你看到的这个“碎碎念”,不再是另外一种单独的载体,而就是一篇普通的、没有标题的文章。 之所以这样做,有很多好处:

  • 可以完全复用文章的发表、更新、数据管理工具;
  • 可以完全复用文章的评论功能;
  • 和文章统一链接、统一渲染、统一……

当然,“碎碎念”默认不显示在首页、也不显示其首页评论、也不显示在 RSS 订阅中。

碎碎念不乏有一些比较隐私的内容,我该想一个较好的方案来隐私这部分细节?🤔

待办事项

  • 编辑评论时应该带上时间以防止多次更新冲突;
  • p={id} 查询失效了。curl 中看到的。
  • 不要使用 h2、h3 作为大字体显示用。
  • 评论时检查是否仍属于此文章。
  • 规范化用户及ip 的获取过程
  • 把页面重定向到 /page 形式。

技术

这篇 MDN 的 onsise 处理里面提到了一篇 throuttle 和 debounce 的文章,很好。

在这里讨论了博客评论分页如何永久有效的问题:https://github.com/movsb/taoblog/commit/366c66d2841377c2ddf155af7b31e703a6c39ee2

待办事项

  • 博客请求记录器;
  • 写一篇关于是否需要 HTML 转义的文章;
  • 文章的更新时间应该是最后评论的时间。
  • 更新评论的评论链接;
  • 更新首页的评论链接;

技术

关于 HTML 在特殊符号是否需要转码的问题。这篇文章写得比如清楚,但是,个人觉得只适合手写的情况。


准备把博客的评论改在后端生成,改了半天发现,我直接把所有评论用 js 返回给前端,前端用 js 渲染出来不就行了吗?妈的,写了半天,浪费时间……🙄

待办事项

  • 把通行密钥的使用成文;

技术

终于把拖了几年的通行密钥给上线到博客了,太难了!

技术

发现 iPad 上的浏览器的 user agent 是桌面电脑的,因为设置里面“请求桌面网站”一直是打开的。 但是,桌面版不魂 touch event,iPad 支持。那我要如何区分?

通过 alert('ontouchstart' in window) 可以判断出来。

技术

一句错误的代码:

1
(true ? document.body.prepend : document.body.append)(document.createElement('hr'))

正确的写法:

1
(true ? document.body.prepend : document.body.append).call(document.body,document.createElement('hr'))

火狐的提示比谷歌详细很多。

简写:

1
2
let a = document.append;
a('<hr>');

技术

第一次学习了 JS 的 get/set 属性方法

待办事项

  • 写个 age 加密的教程。
  • 发现 age 可以直接上 ssh 的 key,曝爽!

连发音都是一样的,不能说毫无关系🤔。

1782445642662695037-GLyEuBubEAAljo9.jpg

技术

不知道啥时候把 blog@twofei.com 这个邮箱发件人的昵称命名成了 “damn” 🥵,找了好一会儿设置才将其改掉了。


给博客加上了自动重新部署的逻辑,通过 GitHub 的 Webhooks。

待办事项

  • 把博客美化评论内容成文;

待办事项

生活

每次点击 Obsidian 的 “open today's daily note“ 发现是个新页面时,就恐惧又是新的一天,好像昨天什么也没做一样。

苹果要完,这应该怎么破? #bugOS

前端

发现 node.propnode.getAttribute('prop') 还是不一样。比如当 <img src="照片.jpg" /> 时,前者拿到的是完整路径,后者拿到的是原始值。见:https://stackoverflow.com/a/78312419/3628322

待办事项

  • 把以前的 mind 项目(从 yaml 生成 table)改变成 markdown 扩展。再怎么说描述能力也比 markdown 强吧?🤔

生活

去了甘坑古镇和东西涌。甘坑非常漂亮,容易出图!适合带妹子去!我的妹子在哪里呢!

生活

多次注意到 OpenStreetMap,今天终于打开看了一下。是由全世界的人共同绘制的,感觉很不错。

简单调研了一下几款地图显示老家地址的区别:谷歌 百度 高德,发现只有谷歌卫星地图最最清晰。

看到很多人推荐用 LanDrop 替代 AirDrop,…… 没想到第一次就这么难。☹️

1774882097054015516-GKGlplBa4AAw-gE.jpg

把苹果的开发者订阅取消了。以后是不是就算是本地也用不了 Xcode 了?是不是已上架的也会被下架?是不是也用不了 iOS Beta 版了?

IMG_8899.avif

订购了2️⃣年,开发了两个 iOS App,0️⃣ 收入 [捂脸][捂脸][捂脸]

#苹果 #开发者

待办事项

在停车月租费到期的最后一天交了月费,前台说已经不能给非楼栋人员出租了。

旅游

韶关丹霞山

景点描述

有两个景点:1️⃣ 阳元山风景区 2️⃣ 长老峰风景区。

两个景点有独立的入口,门票总共 100,一次性购买。

阳元山风景区内,阳元山环绕有两条山道,应该从左边上,右边下。 长老峰风景区包含:阴元石、一线天。从长老峰进去后首先达阴元石,然后返程路上可以选择往上去一线天。也可以不去,最终都是到达长老峰出口。

停车可以在东北门处,也可以从大门进去(非内部人员收费 15 元)。

我的费用清单

景区船票:40 停车费用:15+2.5 电费油费:45+38+37+60 高速费用:196+178

其它

可能是由于一天的奔波(头天晚上没睡好觉、早上六点出发、开了一上午车、爬了一下午山),晚上(次日凌晨)开车回家的时候竟然有点恍惚😶‍🌫️(那感觉像前面的车有点重叠、又没有在动的样子),降了速度,听了几首嗨歌(Waking in the Sum、半糖🍬主义、龙战骑士等)才终于回过神来。害怕,开车大半年来 #第一次 出现这种现象。

生活

把大疆遥控器里面的内存卡拷贝了 YouTube 视频后插在比亚迪的车上听了一天歌,晚上回家的时候,竟然读不出来了,然后再插回遥控器,提示“需要格式化”,拔出来再插一次,又不提示了,但是在通知栏里面找不到“浏览”的选项。回家后插在电脑上,完全可以正常使用🙄…… 等有空再插到车机上试试,垃圾比亚迪。

待办事项

  • 把博客的 Vim 按键模拟 成文;
  • 写一篇关于动态页面 304 处理的思考;
  • 隐藏博客标签列表;

技术

突然发现 MacOS 上的 Firefox 进入全屏也会新开桌面了,以前是不会的。这就导致:

  • 全屏时的动画效果不好看了;
  • 不能在全屏的视频窗口中打开微信(等)非全屏窗口了;

about:config 里面找到了配置:full-screen-api.macos-native-full-screen,改成 false 即可。


在博客上实现了一个简单的 Vim 按键模拟,比想像之中的要简单。

生活

看了小米汽车的发布会,如果早一年,我就买了。现在在想能不能把比亚迪秦置换成小米汽车。

待办事项

  • 把 taomd 成文

技术

发现火狐的右键截图会自动带上背景色(即:虽为 PNG,但不透明),而如果在 Inspector 里面 复制 为 Data-URL,然后在浏览器里面打开可得到透明背景的 PNG。此时就可以按需根据自己网页的调整图片背景色。突然发现 PNG 的这个优点还挺好的!

生活

给姐姐发了一个 理想 Mega 测试过程中撞飞假人的视频,结果被告知“谢谢,下次这种不用发我了😡”。哎,如果不去了解、认识到一个东西的缺点与危害,何谈避免、主动保全自己的人身安全?难道这也是男人与女人的区别吗?

个人

做了一下 MBTI 的类型测试,结果表明我是 INTP 类型。适合做科学家,渴求知识。

然而我发现我好像并没有很渴求,对于一些听过很多遍的词都没有去了解过,比如“唯物主义”,虽然从第一次听说以后就大概知道是什么意思,但是从未真正了解过。

待办事项

  • printf/log 库成文

思考

博客的文章是用标签来推荐相关文章的,而标签只不过是作者从文章内容中抽取的几个主旨/高频词,如果能用 AI 来自动分词并可能地提取出关键词/含义。那是不是文章就不用再手动分类了?🤔

待办事项

  • 到天才吧检查 MacBook 的电池状况

生活

因为在小红书上发了一篇帖子MacBook 电池健康严重不足! 后有较多的反馈同样的问题并建议检查一下,于是预约了白天的天才吧。

语言

在《近藤浩治 - 维基百科,自由的百科全书》的页面上发现 cover 被翻译为“翻唱”,终于知道了这个词的翻译。然后顺便看了一下苹果字典,确实有“翻唱”之意。 #英语

好!

1766516063729037800-GIPs-pNboAA74zL.jpg

待办事项

  • 把无线充电放在车上

待办事项

  • 联系比亚迪的售后询问维修进度
  • 把无人机里面的在东莞拍的照片导出来发朋友圈

生活

把车开到了比亚迪汽车王朝网(深圳粤迪4S店) 来维修制动时的异响问题,吃完午饭回来看,竟然发现车前身左侧被刮擦了,很像是在墙面上刮的,不像是车刮的,所以放弃了找比亚迪负责。但是,我最近没有在哪里有刮擦啊!😭

周处除三害🤔

Mac 迅雷会在任务目录下建立一些隐藏文件,其中就包含这个 .magent 文件。是的,是 magent 不是 magnet。 #草台班子

1764642905019519334-GH1FMPUacAAeSQ4.png

个人

再看了一遍 #电影 “我的少女时代”(为了找那句《周处除三害》台词),在看到徐太宇给林真心表白的那句西班牙语“Aqui te amo(我爱你)”(1:59:56)时,竟然莫名其妙地想到了小学五年级(应该没记错?)时, 龙婉妮跟我表白时说的那句“I love you”了,虽然当时我并不知道这句英语是什么意思、也学了好久才记住。哎~,女性成熟得真早啊。

网络

突然发现我的邮箱 chkesp@gmail.com 竟然扯上了 CH(32V003) 和 ESP(32) 哈哈哈哈😄。

网络

深圳家里的 NUC 和 代理 都连不上了,感觉是失联。但是竟然手机上的华硕路由器竟然可以远程(不在同一网络)访问到路由器,感觉救了我一命! 但是华硕不显示 IPv6 地址,最终通过找到 IPv6 前缀➕之前的 IPv6 后缀拼接成了 NUC 的 IPv6 地址,然后在路由器 Web UI 页面上(App 菜单里面有此选项)将其添加到了防火墙允许名单中,最终得以通过 IPv6 访问到 NUC。

生活

  • 来到 #无锡 ,酒店的网络没有 #IPv6 ,不得不在 Mac 上安装了一个 #OpenWRT
  • 发现无锡硕放机场没有竟然没有自助销售机,而且餐饮非常贵(比如:王四老字号面馆,50+ 一碗牛肉面)。
  • 飞机因为需要打扫🧹卫生所以延误了二十分钟,但是航班信息却不更新,误导人。
  • 到达 #北京

准备明天去北京,需要把 Twitter、Telegram、YouTube 等先卸载了吗? 🥵🥵🥵 怕怕。

如何记住南桥与北桥?速度快的在上面,上面就是北方。

noteworthy

编程

硬件

学习

  • 我才知道 "同比" 的英语是 "year-on-year","环比" 的英语是 "month-on-month" ... 有时候,我确实不太懂汉语,不知道为什么就这么叫了,只能去强行记住一个词的 "概念",直到我看到英语,卧槽怎么这么简单明了?

编程

生活

音乐

  • 发现 #音乐 《人世间》和《如愿》的作曲家都是 #钱雷 ,都非常好听。 看百度百科,《大鱼》、《默》竟然也是!!!

硬件

  • 今天制作了 CH32V003 的第一块板子(红外遥控开关),感觉意外地舒服。
  • 下单了第一块 #3D打印 的单,给 CH32V003 红外遥控制作的盒子。 #第一次

学习

  • 把《英语二》在 #闲鱼 上卖出去了,买家是个声音很好听的小姑娘,跟着男友一起来的。 #英语

#VsCode 你不要这么离谱。。。

1746119328825757847-GDt2PO7aIAArZrQ.jpg

看到这个想起个问题:在 C/C++ 里面,有哪个函数能从字符串里面严格 parse 出整数出来?

严格是指:不能有多余的前缀/后缀空格、不相关字符、不能解析就报错而不是返回 0。

什么 atoi、stol、strtoll 之类的就不提了。from_chars?咋能不能简单点?

🥵🥵🥵 我是谁,我在哪里?

1744642987345498133-GDY3do8bgAASwCL.jpg

去年2月份换的电脑,92% 已经好几个月了🙃

1743856312751182020-GDNsCRsaIAA3Bi8.jpg

生活

  • #第一次 在优衣库官方网站购买了衣服。

待办事项

  • 把 CH32V003 项目独立成模板
  • 研究下 mitmproxy,看能不能拿到比亚迪的车机数据
    • 发现手机不能设置代理,否则比亚迪 App 一定会报错
    • 但是可以用 VPN 把流量转到 mitm 的 proxy 上
    • 最终还是没有拿到数据,猜想是走的 TCP 协议
  • 从日记里面整理出所有的待办事项成列表,防止未办
  • 把插排改成智能设备
  • 采购 LDO 和 人在传感器

一眼阳痿

1743185428952621247-GDEJkevacAAofj-.png 1743185428952621247-GDEJ5ltbAAAOzgp.png

我大量使用 #Raycast 的这个词典功能,但是它经常把查词(Define word)功能远远地放在了我找不到的地方,是不是我使用的姿势不对?🤔 它为什么没有学习到我的使用习惯?@raycastapp

1743168242305441962-GDD5dWKbIAAcu19.jpg 1743168242305441962-GDD5kIpaMAA0qH9.jpg

昨天给 #esp32 设备写 provisioning 代码的时候,怎么感觉这前后端一起写这么闹心?一加个接口就要写界面、发请求处理。一堆的 Vanilla JS 写得我🥵。一气之下150行代码写了个简单的“(假)终端模拟器”,另外再 150 行写了个类 Shell 解释执行器🥵,看起来真是有模有样。

1743148150951739884-GDDn_HkaYAA8HCf.jpg 1743148150951739884-GDDn_HjagAAOXg9.jpg 1743148150951739884-GDDn_HmaIAABpAN.jpg 1743148150951739884-GDDn_HfbcAAaf0t.jpg

硬件

  • 画的 homekit-swtich 的板子外接端口,一上来就碰到了 GPIO16 为 ESP8266 的 RTC IO 不能使用的总是,蛋疼。这都画了多少个版本了。 #待办
    • 把排针按 2.54 对齐
    • 废掉 GPIO16(不能用中断)
    • 另外发现:GPIO14、12、13 是坏的

虽然大家还是没习惯写 const,但是仍然不影响我不知道传进去的这个 pointer 是不是会被长期持有。😣

1739635771995455921-GCRs_Y8a8AA-7CI.png

自从上次顺丰app主动问我快递员有没有送货上门、我勾选了“否”以后,今天顺丰打了个ai电话问我是要送货上门、放代收点,…… 于是我选了“上门”,刚刚,真上门了。好难得,终于不用跑楼下了😇

编程

  • 第一次发现居然有人写 do while 不加花括号

    1
    2
    3
    
    do ret = mbedtls_ssl_handshake( &ssl );
    while( ret == MBEDTLS_ERR_SSL_WANT_READ ||
             ret == MBEDTLS_ERR_SSL_WANT_WRITE );
    

旅游

  • 结束了为期7️⃣天的假期!回到深圳。总结:总共7️⃣天,去了4️⃣个省份1️⃣0️⃣个城市,里程共3️⃣5️⃣0️⃣0️⃣公里。

硬件

  • 这一次的嘉立创非常快,昨天下的单,今天已经顺丰发货了,明天就能到!

旅游

  • 早上买了点水果🍉去了刘宝宝家,然后一起吃了早餐,送他上班。去了五一广场,逛了逛文和友老长沙。
  • 第一次来到了 #江西 ,在 #宜春 天沐温泉度假村第一次泡了个温泉🧖🏻。然后立马起身上高速到了 #井冈山 ,200公里的高速上居然只遇到3️⃣辆车,一路简直是飞奔过来。下了高速后,在井冈山遇到了各种“红色文化”。简直了!到了预计的民宿“兔溪农家”,老板非常热情地招待了我们,给我们安排了行程,还问我们是否需要就餐。

时间:2023-12-17(周日) → 2023-12-24(周六) 历时:7 天 人数:2 人 地点: #深圳 #阳朔 #张家界 #长沙 #赣州 #揭阳 #武功山 类型: #自驾游 #穷游 #特种兵

费用

日期📅 项目 费用
第1️⃣天 租车 2714
桂林米粉 33
糯米饭 12
加油 277
竹筏 320
电摩托 30
停车费 15
千古情门票 320
停车费 15
啤酒鱼 83+15
酒店 60
第2️⃣天 桂林米粉 24
租车➕手套 35
牛记秧塘牛八宝 87
停车费 5
侗乡缘 85
加油 295
民宿 74
第3️⃣天 张家界国家森林公园 598
蜜雪冰城 20
零食 40
导游 100
晚餐 166
酒店 72
第4️⃣天 早饭 26
鲁珍牛肉面 26
橘子🍊 11
卤菜 40
停车费 10
加油 284
停车费 10
住宿 91
第5️⃣天 水果 52
停车费 25
马蹄 15
臭豆腐 10
泳裤🩳 20
温泉 300
晚餐 65
住宿 76
第6️⃣天 面包 14
肯德基 26
加油 248
橘子🍊 25
人民大排档 100
烤地瓜🍠 14
停车费 12
住宿 80
第7️⃣天 三及第 18
花萼楼 20
加油 296
猪脚饭 70
加油 221
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
~  python3
Python 3.11.6 (main, Oct  2 2023, 13:45:54) [Clang 15.0.0 (clang-1500.0.40.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 2714+33+12+277+320+30+15+320+15+98+60
3894
>>> 24+35+87+5+85+295+74
605
>>> 598+20+40+100+166+72
996
>>> 26+26+11+40+10+284+10+91
498
>>> 52+25+15+10+20+300+65+76
563
>>> 14+26+248+25+100+14+12+80
519
>>> 18+20+296+70+221
625
>>> 3894+605+996+498+563+519+625
7700
>>> 7700/2
3850.0
>>>

行程

日期📅 起点 终点 里程(公里) 耗时(小时)
第1️⃣天 深圳 阳朔 500 6
第2️⃣、3️⃣天 阳朔 张家界 700 8
第4️⃣天 张家界 长沙 300 4
第5️⃣天 长沙 武功山

第1️⃣天:阳朔

景点

地点 项目 票价 开放时间
工农桥 风景 免费
十里画廊 风景 免费 全天
遇龙河 竹筏、山水 ¥160 07:00-17:00
兴坪古镇 游玩 免费 全天
西街 小吃、酒吧街 免费 全天
阳朔之夜 风情 ¥70 16:00-23:00
桂林千古情

美食

名字 价格 推荐店铺
桂林米粉 2️⃣两6️⃣元 老东江米粉
🐮牛八宝 一锅涮,100
螺蛳粉

第2️⃣、3️⃣天:张家界

景点

地点 项目 票价 开放时间
天门山国家森林公园 275
张家界国家森林公园 225
凤凰古城 免费
天门山

进山线路分3️⃣种:

  • A线:索道上,汽车下(优先这个)
  • B线:洗车上,索道下
  • C线:汽车上,汽车下

项目:

  • 索道
  • 玻璃栈道
  • 悬索桥
  • 鬼谷天堑
  • 天门洞
  • 天梯(999台阶)

第4️⃣天:长沙

景点

地点 项目 票价 开放时间
五一广场 免费
黄兴步行街 免费
岳麓山 免费
橘子洲 免费
湖南省博物馆 免费

美食

名字
茶颜悦色
臭豆腐

第5️⃣天:赣州

景点

地点 项目 票价 开放时间
江南宋城 免费
古浮桥 免费
郁孤台 免费

第6️⃣天:揭阳

待办事项

  • 把 CH32V003 独立成项目
  • 把 SysTick 成文

我也一直深受这个问题困扰,今天突发奇想……这也行?😝😝😝

1735515026717634947-GBXJn03bkAAYRZ_.png

硬件

  • 正确打开 VsCode 的方式是在终端里面先导出环境变量,然后再 code <目录>

硬件

  • Rev 1.4 的 homekit-switch “上线”工作不到十分钟就宣告停止工作:继电器吸不上去了。测试发现是继电器坏掉了。
    • 在淘宝和京东上以及拼多多上都没有找到之前那五个松乐继电器的订单,那估计是最早那天晚上用另外一个错误创建的拼多多账号买的。大概率是买到假货了:吸合不了,容易掉漆。拆下来一个旧的和在优信电子上面习的对比了一下,有很大差别。

在 -Os 优化的情况下,GCC 的整数除法竟然占用了 1.5KB,把在 2023 年还没有除法指令的 #CH32V003 的 FLASH 坑掉了 1/10 🥵 于是手撸了一个,48字节完成✅ 什么时候干掉 printf?

1734424210909671828-GBHoifobEAAVmgU.png 1734424210909671828-GBHpOw9a8AAvvvW.jpg

不太聪明的样子,给你个表情自己体会吧 < 0 ^ 0 >

1734417041757749632-GBHirMAbUAAdcIS.jpg 1734417041757749632-GBHi7QtbEAAsXG1.png

代码

竟然在 C++ 标准库里面发现了 doxygen 注释,看来我选择它没错了:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
/**
* @brief Provides compile-time rational arithmetic.
*
* This class template represents any finite rational number with a
* numerator and denominator representable by compile-time constants of
* type intmax_t. The ratio is simplified when instantiated.
*
* For example:
* @code
* std::ratio<7,-21>::num == -1;
* std::ratio<7,-21>::den == 3;
* @endcode
*
*/
template<intmax_t _Num, intmax_t _Den = 1>

struct ratio

第1️⃣次在自己的代码中使用“用户自定义字面值”,太爽了: https://github.com/movsb/libstuff/commit/5e652e78f1ac18c2d78469f346d7acf22de0ce45

系统

  • 尝试添加一个“自定义短语”,MacOS 卡出屎了,直接重启。

待办事项

  • 把在虚拟机里面安装 openocd 调试成文
  • 把 ch32v00x C++ 编译支持成文
  • ch32v00x cmake 项目成文
  • 把启动过程、存储空间划分分配、分析成文

硬件

  • CH32V003 竟然没有除法指令,一个 __divdi3 占用了 1.5KB 的空间,可是一共才 16KB 啊😭

这邮箱地址……真的难绷 😅😅😅,建议换成 kfpt@byd.com

1733865567692755396-GA_tT-3asAA2KL_.jpg

相同代码用 SDCC 和 GCC 编译出来的二进制大小差太多,于是我就看看差在哪里了,无意发现我图1的代码编译出来只剩那么点汇编了,才发现逻辑符号写错了😅 然后就问了 ChatGPT 如何解决,结果 GCC 8 和 GCC 12 都不行,Clang 却成功警告了 😶‍🌫️(卒

1733280962908426445-GA3V0f3bQAAUXjL.jpg 1733280962908426445-GA3WQw-bUAAEw4y.jpg 1733280962908426445-GA3Zq98akAA5lkk.jpg


啊,我错了…… -Wall 并不包含 -Wlogical-op 🫣🫣🫣

1733281964168483236-GA3ap4BbIAAx3Ax.jpg

Are you right?

1733199909833359393-GA2QBldbQAATm37.png

软件

  • 看了 xPack 的官方才发现 xpack-riscv-none-embed-gcc-8.2.0xpack-riscv-none-elf-gcc-12.2.0-3 是同一个东西,只是前者是为了保持跟 SiFive 的版本一样,后来两者都 Deprecated 了。WCH 真垃圾。
  • Wch-LinkE 在 Win7 串口驱动装不上,准备装 Win10,结果两次卡死机,放弃。

硬件

  • 成功把 CH32V003 灯点亮了,并且,关闭串口后,IO 默认为 SDIO,下载程序非常方便了。
  • 根据这篇文章手动编译了 OpenOCD for WCH,结果他妈的只支持 wlink 不支持 wlinke,什么傻逼公司玩意儿。

🐶🅱️了一下,发现还 does work(当时竟然还没有 go mod) 🤪。但是缺少音乐的世界不完美,写到第2️⃣张图的时候,正是我入职上一份工作前半个🈷️🥵,缺少了最动听的部分。

1733060711369388132-GA0Qq0DbYAEltfQ.jpg 1733060711369388132-GA0RM6Ua8AACcI8.jpg

收支

  • 从今天开始,每个月给维基百科捐款1️⃣美元。

汽车

硬件

  • 因为发了自己写的 NES 模拟器,被大佬 STRRL.gpt, Manjusaka 推特 关注了 🥵 紧张

软件

    • C语言里面为什么不以用 const int 作为数组的长度?(没开启 VLA)
    • 在 C 语言中,数组的长度必须是一个编译时确定的常量表达式。而 const int 在 C 中并不是一个常量表达式,而是一个只读变量。因此,尽管 const int 意味着这个变量是只读的,但它并不是一个常量表达式,不能用作数组的长度。

待办事项

  • 晾衣服
  • 了解一下 LaunchAgent 并回复博客用户。
  • 把 世特力硬盘 控制器 成文;
  • 成文:把 MacOS 作为 HomeKit
  • 成文:Whisper 周年

待办事项

  • 晾衣服
  • 了解一下 LaunchAgent 并回复博客用户。
  • 把 世特力硬盘 控制器 成文;
  • 成文:把 MacOS 作为 HomeKit

前端

  • 在 HTML 中使用 SVG 的方法对比,为了可以选择 SVG 中的文本。
    • 使用 <object data=name.svg
      • 这种方法目前完美达到要求
      • 2023-12-24 更新:不完美,也会生成 frame,并且 Firefox 上会出现右半边部分无法选中文本。
      • 2024-01-16 更新:生成的 frame 没有 body。Stylish 扩展的 document.body 直接 throw,导致页面解析中断了😅。
    • 使用 <iframe src=""></iframe>
      • 会嵌入新的框架,并且会产生滚动条,弃用
    • 使用 <svg><use xlink:href=""></use></svg>
      • 根据 ChatGPT 的测试,没有成功

硬件

  • 起床准备把无线开关装上去的时候,发现 ESP32-C3 这个 WiFi 又它妈不停的重连又断开了,干。

生活

  • 收到了妈妈寄来的两只鸡!开心,现在就开始炖!

看得出来国外的 App 都不是太喜欢像国内一样用内置浏览器打开自家网页并保持登录状态的做法。然而苹果这样打开一个像极了原生 Music 的网页的意义何在?

1732011558715420887-GAlW8VFbAAAtUzU.jpg

待办事项

  • 晾衣服
  • 了解一下 LaunchAgent 并回复博客用户。
  • 把 世特力硬盘 控制器 成文;
  • 自动切换输入法成文;
  • 成文:把 MacOS 作为 HomeKit

阅读

学习

硬件

  • 把红外和遥控方案都做好了,就等盒子。

开发

  • 用 Swift 的 DistributedNotificationCenter 轻松做到了监控系统锁屏状态,可以方便同步到 HomeKit 了。

智能家居

  • 完成了把“锁定屏幕”和“音量调节”添加到了 #HomeKit

如何告诉 VS @code 不要这么给我省内存,我发现一天不关闭重启一下 vscode,就特别卡,鼠标点击都能 1 秒钟才能反应过来那种。

1731297663113650618-GAbNprVasAAvLG1.jpg

硬件

网络

  • anhbk@qq.com 作为 Firefox 的登录邮箱已经超过十年了,今天换成了 chkesp@gmail.com

真就是……主板“插在”显卡上🥹

挺好看的😋 🌈🌈🌈

1729936555358482905-GAH4E6na8AAfVXj.png

系统

  • Ubuntu上竟然可以随意安装桌面环境或随意切换:How to Install a Desktop (GUI) on an Ubuntu Server
    • 为了测试 CH32V003 芯片的集成开发环境。。。太折腾了,Mac 上只有工具链。
  • 搞了半天桌面是装成功了,但是网络问题没解决,netplan,真难搞。
  • Cockpit 居然可以安装 Windows ……,QEMU 真神奇…… 服务器环境下也可以装。速度很快,神了,比在 MacOS 上用 UTM 模拟快多了。

硬件

  • 在 YouTube 上面看到一个介绍 RISC-V Linux 的小板子 MilkV Duo a $9 Linux board,然后在淘宝上搜索了一下,居然有卖,再把语言切换成中文,竟然是国内的,叫群芯闪耀,再一看地址,竟然就在旁边“中国广东省深圳市宝安区西乡街道流塘社区新安四路198号宝立方B座L8-01室”,在深圳给我的一点好处就是,一堆公司就在身边……
  • 买了 CH32V003J4M6、WCH-LinkE,以及转接板。

硬件

运维

  • 博客和家里服务器证书又过期了,Grafana 监控还是没到位😳。

待办事项

开发

  • MacOS 上居然有 /etc/paths 这个文件…… StackOverflow
  • 学会了使用 CMake!了解了基本语法后,直接上命令手册!

折腾

  • 把 MinIO 的“预览”用脚本改到了新容器!
  • 发现暴力猴🐒可以自动把备份同步到 WebDav!
    • 然后又发现可以从 URL 安装,这样更好方便版本化。

待办事项

  • 驾照满半年,注册滴答顺风车
    • 注册失败,明天继续
  • 差评红外遥控器,明明是 CR2025,发的是 CR1220。

硬件

  • 学习了 STC51 单片机的软件复位进入下载,不用受 Device Not Configured 困扰了。

待办事项

硬件

  • 终于找到了 HomeKit 开关为什么明明关闭了,但是重新打开又显示为开的问题:
    • IO 口输出 1 的时候,确实灯关闭了
    • 但是如果此时读 IO 口数据,会显示为 0,只有 0.8V 的样子,为什么会这样呢?
    • 接线:IO 口 → 三极管(NPN)→ 继电器
    • 是因为三极管 BE 极是二极管,压降被控制在 0.7V 左右的原因吗?
    • 基极缺限流电阻
    • 三极管数据手册:lcsc
    • L8050QLT1G,,Q 系列,。取中间:225,则 。限流电阻大小:,改变电阻的大小只会影响电流的大小,对吧?
    • 继电器周围要加续流二极管继电器为何要并联二极管
  • 给 HomeKit 开关增加了固件升级功能!
  • 淘宝上了解到了红外芯片

学习

以前觉得嘉立创打样挺快的,现在呢?至少至少2️⃣天的打板 ➕ 至少1️⃣天的顺丰,实在太慢了。还不如用洞洞板飞线,可无奈多数元件是贴片😮‍💨。

硬件

产品

  • 体验了一下 pkgx,第一印象好像还不错。主要看重是原 brew 的作者发明的。 #成文

折腾

  • 卸载旧版本 Homebrew: #成文

    • 下载脚本: curl -LO https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh
    • 手动执行:./uninstall.sh --path /usr/local
  • brew 的 bash-completion #成文

    安装过程:

    • 安装 bash-completion 时会提示:

      Add the following line to your ~/.bash_profile:

      [[ -r "/opt/homebrew/etc/profile.d/bash_completion.sh" ]] && . "/opt/homebrew/etc/profile.d/bash_completion.sh"

    • 这是一个软链接,指向:Cellar/bash-completion@2/2.11/etc/profile.d/bash_completion.sh

    • 上述文件会 source:/opt/homebrew/Cellar/bash-completion@2/2.11/share/bash-completion/bash_completion 文件;

    • 被 source 的这个文件来自 bash-completion 官方,但是有修改,会执行这个目录下的所有文件:compat_dir=${BASH_COMPLETION_COMPAT_DIR:-/opt/homebrew/etc/bash_completion.d}

    • 这个目录里面就是 brew 当前安装的包的 completion 文件;

    Brew 的 completion 文件看起来是自己写的:Formula/g/git.rb#L136-L137。不知道其它包管理器(像是 pkgx)怎么处理这个问题?并找到这些文件来自哪里。

待办事项

技术

  • 再次把 ChatGPT 安装了回来,这次登录时的报错是: IPv6 域名被禁止了(国内的),于是在 OpenWRT 里面把 IPv6 的解析禁用掉了(本来代理服务器也不支持),成功登录,并体验了语音功能。
  • 了解到语音助手的实现:
    • 先把语音转换成文字(比如 Whisper);
    • 然后用自然语言处理:
      • 分词(Tokenization)
      • 词性标记(Part of speech Tagging)
      • 命名实体识别(Named Entity Recognition,NER):识别文字中的实体,如人名、地名;
      • 语法分析:分析句子的结构和语法关系;

硬件

  • 经再次考虑,把老家的无线开关设备方案换成了 2.4G 方案。

    • 最直接的原因:不需要联网,电池供电,比使用 WiFi 稳定。如果家里网出问题,家里人解决不了。
    • 晚上用手机开关可能确实没有那么方便;
    • 爸爸的手机不支持 HomeKit;
    • 稳定 > 方便;
  • 看了这篇碱性电池测试 | 知名品牌的电池真的比较好吗?碱性电池的测试,电池🔋居然可以支持 500mA 的大电流。好强啊,比钮扣电池的 0.x mA 强太多了。看来我的无线按钮项目要换成电池了。

  • 串口通信协议是一种在串行通信中用于发送和接收数据的规则和约定。串口通信协议定义了数据如何被组织、传输和解释。在串口通信中,常见的协议包括以下几种:

    1. UART (Universal Asynchronous Receiver/Transmitter): UART是一种最基本的串口通信协议,它定义了数据位、停止位、奇偶校验等基本参数,但没有固定的数据帧结构。它通常是异步的、无差错检测的。

    2. RS-232: RS-232是一种标准化的串行通信接口协议,定义了数据格式、传输速率、电平等规范。它通常用于连接计算机与外围设备,例如串口打印机、调制解调器等。

    3. RS-485: RS-485是一种用于工业环境的串行通信协议,支持多点通信和差分信号传输。它可以支持长距离通信,并具有抗干扰能力。

    4. SPI (Serial Peripheral Interface): SPI是一种用于片上系统(SoC)中外围设备通信的同步串行通信协议。它具有高速、全双工、点对点或多点传输等特点。

    5. I2C (Inter-Integrated Circuit): I2C是一种用于短距离数字通信的串行通信协议。它允许多个设备通过同一条总线进行通信,并具有地址分配和数据传输的能力。

    6. CAN (Controller Area Network): CAN是一种用于车辆和工业领域的串行通信协议。它支持多个设备连接,并具有高度的实时性和可靠性。

    每种协议都有其特定的应用场景和优势,选择合适的协议取决于具体的通信需求,如距离、速率、设备支持等。

Be patient, be Positive.

1726871244426125707-F_cUBEyagAAaDqD.jpg

待办事项

  • 了解一下 LaunchAgent 并回复博客用户。
  • 把 goldmark wiki table 成文;
  • 把 世特力硬盘 控制器 成文;
  • 自动切换输入法成文;
  • 把 goldmark 的 wiki table 支持上线并提交 pr

社交

  • 刘能给 follow back 回来了,又一大佬🧍‍♂️!

硬件

  • 尝试了一下安装 stm32 的 Stm32CubeIDE,这年头居然还在用 Eclipse,过于老气横秋了。

  • 新名词:Sub-GHz: "Sub-GHz"是指低于1GHz的频率范围。在无线通信领域,Sub-GHz通常指的是低于1GHz的射频频段。这个频段包括从300MHz到1000MHz之间的范围,也可以是更窄的频率范围,如433MHz、868MHz或915MHz等特定的频率。

    Sub-GHz频段在无线通信中具有一些优点,例如:

    • 更长的传输距离: 低频率信号具有更好的穿透能力,能够在障碍物穿透和长距离传输方面表现更好。
    • 更好的覆盖范围: 由于信号穿透性强,Sub-GHz频段的通信信号在建筑物内部和城市环境中能够提供较好的覆盖范围。
    • 较少的功耗: 低频率的通信通常需要较低的功耗,这对于一些低功耗设备和电池供电设备而言是有利的。

    因此,在许多无线通信应用中,Sub-GHz频段常用于低功耗、长距离传输和穿透障碍物的需求,例如物联网(IoT)、传感器网络、远程监控等。

待办事项

折腾

  • 使用 go get 始终拉不下来最新的代码,结果靠 GONOPROXY="github.com" 搞定,妈的,真是气人。非要搞什么 cache。

突然发现维斯百科的 Tables 描述方式好像还不错,能用很简洁的方式描述出比较复杂/漂亮的表格。于是今天一时兴起不足500行代码递归🔄下降⬇️了一个 parser,准备集成到现在使用的 Markdown 引擎中🤔。(例子来自官方:

1726149029820829954-F_SA_saaMAA3SJ5.jpg 1726149029820829954-F_SBJYlbUAACMB-.jpg 1726149029820829954-F_SDJXTbUAAGHIB.jpg

待办事项

  • 了解一下 LaunchAgent 并回复博客用户。

音乐🎵

  • 竟然听了一天的朴树,第一次。有几首歌还是很好听的:
    • New Body
    • Forever Young
    • 空帆船⛵️
    • 平凡之路

woc,震惊🤯🤯 当年觉得 VB6 调用 Win32 SDK 太麻烦,玩了一年就放弃了。你们太强了。。。

第一眼竟然看成了是乔布斯的推特😅…… 不过,不管是“乔布斯”还是“工作”,这种场合都挺微妙的。

竟然离职了 🥲🥲🥲

硬件

  • 水位检测
    • 水位检测
      • 超声波 SR-04
    • 钮扣电池供电
      • 电压检测
    • 水位告警

想法

  • 翻到了旧项目 mind,是一个将 yaml 转换成表格的程序,类似于思维导图。我在想能不能把它改成一个描述表格如何生成的语言?用于方便地在 Markdown 里面嵌入复杂的表格。我又在想创造一门形式语言了?😄😄😄

都自我审查到这里来了 🥵,赶紧让苹果改啊🤪。

1725131826979815477-F_DmP63asAALAZg.jpg 1725131826979815477-F_DmP63b0AAwhou.jpg

待办事项

  • 关闭这个问题单:https://github.com/canonical/microk8s/issues/4296
  • 提醒闲鱼买家签收树莓派
  • 五分钟未使用电烙铁自动关闭主电源🔌
  • 把 Shadowsocks 跑在 esp32 里面?
    • 这样可以 轻松回家,如果再加个 DDNS,就太爽了吧?

工具

  • 对 nvim 配置了 im-select 脚本,现在在 Normal 与 Edit 之间切换的时候可以自动切换输入法了!爽爆😆

硬件

  • 折腾了一晚上树莓派 3B+,想弄成一个家庭影院/娱乐系统,过年的时候带回家,结果新学了一种包管理器 flatpak,但是始终没有搞定其沙盒的权限问题,难受☹️。
  • 拆了好多次小米的电脑挂灯,才发现原来是滚轮没有对准,难怪盖子合不好!😡

刚刚 #vscode 持续崩溃,才发现是 MacOS 空间满了,但是系统没有任何提示。等我发现并清理部分资源后再打开 vscode,发现其 profiles 全部丢了,最近项目列表清空了😭。都是些什么草台班子啊。

1724441920674394551-F-5xUqFWQAE42Bp.jpg 1724441920674394551-F-5xdJ2XYAARxVL.png 1724441920674394551-F-5yZgpXoAAemJG.jpg

待办事项

学习

  • SPDX: # The Software Package Data Exchange. 虽然看到 SPDX-License-Identifier 过很多次了,但是今天才知道这个是什么全称。我应该对新事物保持更多的 #好奇心 😳。
  • 终于知道什么是开漏了:
    • 开漏输出(Open-Drain Output)是一种数字输出模式,常见于集成电路中的输出引脚。这种输出模式的特点是在逻辑高电平(1)时,输出为高阻态(开路),而在逻辑低电平(0)时,输出为低电平(连接到地或另一低电平源)。开漏输出的优势之一是它允许多个设备共享同一信号线而不引起冲突,因为只有在有设备输出低电平时才会拉低信号线。这在I2C等总线通信中经常使用。

硬件

  • 在优信电子上面发现了 “一体化超声波测距模块 倒车雷达防水超声波JSN-SR04T”,感觉跟汽车雷达已经非常接近?HC-SR04 测量角度非常小(15°),而且对表面要求平整:0.5 m²,即 0.7m ⨉ 0.7m,这也太离谱了,实际体验并不是很好。用来测水面还行?
  • 电源电压抑制比 (Power supply rejection ratio, PSRR):在电子设备中, 电源抑制比是一个经常在电子放大器或稳压器的规格书出现的参数,用来描述某一设备对电源噪声的抑制能力。 电源抑制比的定义是电源电压变化做成设备输出的电压相应变化的比例。因为此比值一般较大,为方便使用,常以分贝作为单位,理想的设备其PSRR是无限大。维基百科 #术语
  • 天线,到底应该怎么摆放?
  • 格力空调 YAPOF3 红外编码

网络

  • 因为 Mozilla 提示我捐款失败了,更新了信用卡。终于想起来把 Paypal 的二次验证给打开 了,真难以想像只需要一个 密码就能登录进账户是什么安全体验🙄。

硬件

  • 在嘉立创的 PCB 下单中心发现了 3D 打印的选项,名字叫“三维猴”,看起来可以下单,但是有点儿贵。好在不用自己购买打印机了。
  • “有源蜂鸣器”和“无源蜂鸣器”:这里的“源”不是指电源。而是指振荡源。 有源蜂鸣器内部有一简单的振荡电路,能将恒定的直流电转化成一 定频率的脉冲信号,程序控制方便但频率固定,单片机一个高低电平就 可以让其发出声音。 无源蜂鸣器和电磁扬声器一样没有内部驱动电路需要接在音频输出电 路中才能发声。如果给直流信号是不响的,因为磁路恒定,必须用2K~5K 的方波去驱动它。声音频率可控,可以做出“多来米发索拉西”的效果。 在一些特例中,可以和LED复用一个控制口。来源

待办事项

  • 看电影🎬《奥本海默》
    • 看得睡着了,叙事有点儿慢,抽空再看一遍

技术

硬件

  • 第一次在嘉立创打印黑色的 PCB 板子,感觉非常好看。
    • 实测发现 WiFi 还是不容易连上,再次失败。

待办事项

  • 看电影🎬《奥本海默》

起点

  • 今天开始用日记本记录“待办事项”。

TIL

  • 刚刚竟然发现绿联的 USB Type-C 转 Type-A 的 蓝色 Type-A 竟然 4 + 5 根触点…… 太神奇了。。。 但是我好像从来没有见过这样的公头。。。
  • 绿联的 Type-C 扩展坞电源输出只有 4.2V,不知道是哪里坏了。搭了一个飞线,从 Type-C 输入,目前的输出电压是 5.2V,不知道会不会干坏我的外部设备。

折腾

  • 被 nginx 又浪费了几个小时。
    • 临时生成的文件不要跟配置文件放在一个目录!不然挂载到宿主机会看到,会影响下次启动!
  • 突然发现博客服务器上可以 curl curl / curl google 直接访问,但是又找不到是谁解析的。resolv.conf 只有 nameserver。

为了坐在床头看电影时方便调节电脑的音量。写了点代码跑在 MacBook 上,将它作为一个 HomeKit 配件。由于 #HomeKit 移除了 Speaker🔉 支持,我直接 fake 成一个可以控制亮度🔆的灯泡💡。😅😅😅 #智能家居

1722318620053909957-F-bnbZDbsAAcvf1.jpg 1722318620053909957-F-bnbWdaoAAh-Ct.jpg

数码

  • 终于写了个“自动运行.app“,可以无忧地启动需要登录后启动的命令了。
  • 把 MacBook 添加成为了 HomeKit 设备,这下可以在手机上控制音量了。😄

数码

  • 用了6️⃣年的绿联 USB-C 转 USB-A 扩展坞竟然出现了电源不稳定情况,ESP32 连 WiFI 会报 brownout resets。蛋疼。但是竟然发现它可以外接电源供电。试试。

ESP32 官方推荐的用户论坛,是如何做到又丑又极其难用的?🤔

最不能忍的时候还在使用上古 BBCode。。。

https://esp32.com/

硬件

  • 把世特力硬盘的 ESP8266 拿出来重新烧了个程序,加上了 #HomeKit ,几行代码搞定,爽翻😊。
  • 把罗兰电钢琴的 12V 电源直接接在 ESP32 的板子上,忘记了变压器输出端有个耐压只有 6.3V 的电容,几秒钟时间直接爆了,声音很大,味很重。难受。
  • 花了一天时间,终于把 ESP32-C3 为什么自动重启的问题解决了———省略了官方电路的电容。实在没想到这玩意儿影响会这么大。 这下好了,板子要重新画了。😭

想把家里的某有源音箱改成智能设备,这样的话, 坐在床头看电影的时候就不会跑到显示器面前去调声音大小了。可是……为什么 #HomeKit#Matter 都不支持 Speaker 呢?前者是取消了支持,后者是根本不支持。我能怎么办,我也很无助啊 🤔

1721103154572669044-F-KIfABbYAA19BI.jpg 1721103154572669044-F-KWLiGaQAAyozo.jpg 1721103154572669044-F-KWLiFasAAeop1.png

看着很精致🥺 最近正好做了一些智能家居设备需要盒子(我警告⚠️你们…),年初又学了画模型,看看这次双十一能不能买一个吧🥵🥵🥵

硬件

  • 自制的基于 ESP32-C3 的板子在连接 WiFi 时始终会重启,没找到原因,除了板子上没有接电容外,跟官方推荐的应用电路没有区别。苦恼😖,我好菜🥬。

  • 电源降压芯片 AMS1117,ESP32 官方用的是 SGM2212,看起来电流比较稳定?🤔 买了几个试试,也不知道是不是正品。另外,它也有电压可调版本,需要借助可调电阻(变阻器/数字电位器)。MCP40D18 看起来很不错(并且是 I2C接口),但是淘宝竟然没有卖的 😳,不应该啊(因为 17/19 都有卖)。

  • ESP32 官方利用 DTR/RTS 来自动复位以编程 的方式非常巧妙,见 ESP32-C3-DevKitM-1 原理图。必须盗走!

硬件

  • 始终没搞清楚为什么 HomeKit 移除了 Speaker 支持,Matter 也不支持。我想在观影的时候在我的手机上控制电脑的音量真的就这么难吗?

太真实了……🥵

笑死,点开“最近更新”,看到“已停止更新”…… 这是要走商业化路线了?🤔

1719910011869286585-F95Y4FgbEAAHKtO.jpg 1719910011869286585-F95Y9oragAAtqYr.jpg

这两天这网是明显地变慢了🤔,发生什么事了。。。

1719906816178749676-F95V2zobEAAk9DF.jpg 1719906816178749676-F95WDVbbgAAowBi.png

硬件

  • 搞了一天的 Ci24R1,虽然搞通了,但是很不稳定。不知道原因,放弃。考虑重新搞 ESP32 HomeKit / Matter 方案。
  • 之前访问 ESP32 的官方的时候发现 HomeKit-SDK 需要 MFi 认证
    • Espressif HomeKit SDK 仅提供给已获得 MFi 许可的用户。获取 SDK 时请务必提供六位数的 Account Number。

  • 今天到 GitHub 仓库却发现不需要了(可能一直都不需要)!!!开心!!! 放心扔了垃圾 51 单片机和简单的 2.4GHz 无线方案。
    • 用官方的例子添加了一个风扇,成功!

Type-A 可以给 Type-C 供电,但是 Type-C 不可以给 Type-C 供电(VBUS 没电)。我一定是第一次画 Type-C 板子。😧😧😧

这个 TLD 不错,所有的动名词/现在分词都可以拿来用了。🤣

硬件

  • 被 type-c 坑的一天 见与 深圳市海瑟威电子商行 的聊天。
    • 电脑和充电器 type-c 连 type-c 均无法给 stc8 板子供电,但是硬盘柜的 type-a 转 type-c 却可以,至今不知道为啥。
  • 从 stc15 迁移到 stc8 的过程中,因为定时器 2 和定时器 1 的默认分频方式不一样,导致浪费两个时间调试,最终修改 AUXR 的值调通串口。
  • SFRs in the 8051 architecture cannot be accessed through indirect addressing, so pointers are of no use.

无线方案

名称 成本 功耗 指向性(需要对准设备) 一个遥控器控制多个设备 远程控制 智能家居
红外遥控器 ⭐️ ⭐️ 否(室内)
2.4GHz ⭐️⭐️ ⭐️⭐️ 否(但是可以实现) 是(百米内) 否(但是可以实现)
手机 + WiFi ⭐️⭐️⭐️⭐️ ⭐️⭐️⭐️ 是(不限距离)

技术

  • SDCC 的 printf 函数竟然支持自定义 outputChar 回调函数extern int _print_format (pfn_outputchar pfn, void* pvoid, const char *format, va_list ap);。这样的话,内部就不用定义不知道需要多大的 buffer。交给用户来输出 。特别适用于在单片机上使用串口输出数据的典型使用。什么叫人类之光啊!太好使了。瞬间有点儿喜欢这个工具了。

看上来某国产便宜 2.4GHz SoC,但是光买个烧录器需要 300 多块钱。劝退 😅

1718830474238529629-F9qDEbabcAAV0EP.jpg

硬件

硬件

  • 看上了 ST 的 STM8L050J3 芯片,8 个引脚,想做一个手持红外遥控器,但是发现工具链太难搞了,放弃。芯片倒是很有吸引力:
    • 超低功耗:一颗松下 CR2032 电池,按低功耗正常运行只有 5uA。225mAh 的容量,可以跑 5 年!
    • 有 ADC,可以用来测电池的电压
    • 有红外接口
  • 再看了一下 MSP430,好像都需要专用的编程器与收费的工具链,快要放弃了,难道我还是得回到 51 😭?
  • 看上了 Ci2451,但是是小众产品,非常适合,但是没有资料。Ci24R1 也非常适合,但是不是 SoC。
  • 然后发现安信可有成品模组:2.4G,看起来非常不错。

我一直有个疑问:微博的话题是包含在微博正文内容中的,“不显示话题内容而显示搜索词结果”难道不该是完全相同的结果吗?🤔

硬件

  • 研究了一下在 Mac 上使用 STC 芯片的方式:
    • 编译器使用 sdcc
    • 下载器使用 stcgal
    • 效果还行,初次使用芯片的时候要进行频率校准:./stcgal.py -p /dev/cu.usbserial-110 -b 19200 -l 19200 -t 11057 ../sdcc/main.ihx-t 参数)
    • 参考文章:

游戏

  • 开外挂玩了一遍“林则徐禁烟”,这玩意儿是如何做到只有仅仅 4 关的剧情却有 512KB 大小的?非得对话,不然路都给你封了,简直智障🙄。 #NES
  • 玩了一把记忆中的“战斧🪓/斧王”,依然是垃圾中的战斗机,全程只有一两个动作。当年是如何单独作为一张大卡销售的?

学习

  • 原来 Chile(智利) 的发音是 BrE ˈtʃɪli, AmE ˈtʃɪli,我一直以为后面的 le 发音为 l。懵了…… 看来遇到陌生的知识真的还能妄图自己能猜对,还是需要当成新知识了解它、认识它。 #TIL

网易云音乐车载音乐还要单独开 VIP 🥵🥵

怀念 CarPlay😳

1712326387011559881-F8Nnw6TbkAA3Z5S.jpg 1712326387011559881-F8Nnw6TboAAaMit.jpg 1712326387011559881-F8Nnw6SbQAA9ubF.jpg

有鉴于节假日航班✈️一票难求,建议各机场增购10倍的飞机。平常没用的时候可以把闲置租出去或者机长🧑‍✈️自己去接活。🤔

学习

  • 听着 Apple Music 推荐的邓紫棋的新歌“唯一”时,发现有句歌词是“你真的希望你能厘清”,咦,这里“真的”……按照“的地得”的用法,应该用“地”呀,🥵!但是我自己也从来没有这样用过🥺。

网络

  • 终于想起把被盗多年的百度地图头像给换掉了。

#全屋新风

装修完入住一年多了,除了空调、冰箱这种传统神器之外,最推荐的是全屋新风。

一年多以来,家里窗户没开过,新风没关过。

优点: 1⃣可以立刻入住。空气流动,不存在甲醛浓度积累的问题。 2⃣️浮尘减少 90%。保守估算,擦拭数码产品的频率低了十倍。 3⃣️没有空气过敏。家人的花粉过敏和各种鼻炎症状不见了。 4⃣️神清气爽。长期在书房闭门办公,没有空气问题导致的困倦和不适。

缺点: 1⃣️安装费用和水平。和空调一样,风道、静音都考验安装水平。

其他缺点没了。买的国产品牌,机器和耗材都很便宜,功耗也不高可以 7*24 开启。

个人

  • 整理数据时,尝试把以前给雪舞读的故事博客数据库导出来,发现只有 MySQL 的数据文件了,为了导出 MySQL 语句,遇到了各种问题:
    • 忘记了 mysql 的版本,导致用 docker-compose 启动的时候报各种错误:

      db_1       | 2023-09-20T21:06:25.674785Z 0 [Warning] The plugin 'unix_socket' used to authenticate user 'root'@'localhost' is not loaded. Nobody can currently login using this account.
      db_1       | 2023-09-20T21:06:25.675092Z 0 [Warning] System table 'time_zone_leap_second' is expected to be transactional.
      db_1       | 2023-09-20T21:06:25.675531Z 0 [ERROR] Native table 'performance_schema'.'cond_instances' has the wrong structure
      db_1       | 2023-09-20T21:06:25.675552Z 0 [ERROR] Native table 'performance_schema'.'events_waits_current' has the wrong structure
      db_1       | 2023-09-20T21:06:25.675572Z 0 [ERROR] Native table 'performance_schema'.'events_waits_history' has the wrong structure
      db_1       | 2023-09-20T21:06:25.677161Z 0 [ERROR] Incorrect definition of table mysql.db: expected column 'User' at position 2 to have type char(32), found type char(80).
      db_1       | 2023-09-20T21:06:25.677173Z 0 [ERROR] mysql.user has no `Event_priv` column at position 28
      db_1       | 2023-09-20T21:06:25.677256Z 0 [ERROR] Incorrect definition of table mysql.event: expected column 'definer' at position 3 to have type char(77), found type char(141).
      db_1       | 2023-09-20T21:06:25.677282Z 0 [ERROR] Incorrect definition of table mysql.event: expected column 'sql_mode' at position 14 to have type set('REAL_AS_FLOAT','PIPES_AS_CONCAT', ...
      
    • 虽然 MySQL 还是启动成功了,但是 mysqldump 不行:

      root@d587871a3053:/# mysqldump -h 127.0.0.1 shirley
      -- MySQL dump 10.13  Distrib 5.7.9, for Linux (x86_64)
      --
      -- Host: 127.0.0.1    Database: shirley
      -- ------------------------------------------------------
      -- Server version	5.7.9
      
      /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
      /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
      /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
      /*!40101 SET NAMES utf8 */;
      /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
      /*!40103 SET TIME_ZONE='+00:00' */;
      /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
      /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
      /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
      /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
      mysqldump: Couldn't execute 'SHOW VARIABLES LIKE 'gtid\_mode'': Native table 'performance_schema'.'session_variables' has the wrong structure (1682)
      
    • 然后尝试用 mysql(cli)直接导出,不行,没有办法,只能查看 select 的结果。

    • 然后就是用 adminer 登录后台:发现原来的数据库没有设置密码…… Adminer 4.6.3 及以后不允许……

    • 换了 Adminer 4.6.2 后成功进入,并导出成功

    • 可以删除数据文件了。

    • 长记性啊!以后可只能保存 sql 文件了,不要再保存不知道版本的 mysql 数据文件夹。

生活

  • 今天在神舟租车租了一辆坦克 300 来试着开一下,有点儿贵,388 。说说体验:
    • 和普通油车没什么区别,踩油门反应很慢;
    • 车重,发动机声音大;
    • 非常耗油。开了 165 公里,花了 185 块钱油费。平均 1 公里 > 1 块钱。简直离谱!!!再也不想开油车了!!! 185 块钱在家里可以充满电接近 10 次,可以跑至少 3000 公里!离谱!!!
  • 这几天预制菜突然闹得沸沸扬扬,我尝试在京东上面买了一点来吃:猪肚鸡、梅菜扣肉。还买了一包鱼皮,但是味道根本不如在香港买的那个,光一股盐味,不好吃。

数码

  • 熬夜看了苹果 iPhone15 的发布会,有点儿想买,但是 Pro Max 1TB 的价格要 13999,放弃。

个人

  • 今晚第一次使用金花推荐的爱柔肤系列护肤品🧴,花了 2000+ 块钱(实在太贵了!),也不知道有没有效果,简单记录📝一个起点吧~

ESP32-CAM 拿 multipart 数据放 来显示视频 是什么我没见过的高级玩法?🤔️

1700891099508900267-F5rHNNuaMAAcqrj.jpg

屏蔽➕静音后再次进入依然能看到,什么狗屁膏药马斯克啊

1676408311040860161-F0PMeECakAEJnfv.jpg

你果就是解决不了电池电量🪫偷跑的问题。

1674690180442390531-Fz2xpkGakAAJ2qL.jpg

技术

  • 不知道为何从其它主机 ping openwrt 时断时续的,花了几个小时才发现又是 docker 的转发规则导致的(文章里面写过),但是为何是时断时续的?又花了近一下午的时间来处理,哎,网络问题真难啊 ☹️。

生活

  • 最近在云南跟妈妈一起看《三分野》,里面的插曲《心里的流星》非常好听,在 Apple Music上一搜,居然是周惠唱的,这声音居然这么多年未变 。依然这么好听 。

    一直挺喜欢听周惠的歌的,但是我这种害怕去发现新歌、又害怕错过好听的歌曲的应该如何是好?

    逛维斯百科资料发现周惠的英文名竟然叫 Where Chou,怎么会有人用 Where 作名字啊?🥵她的小名 惠儿?

技术

  • 通过一张二维码终于知道了什么是 HDR,还是挺神奇的 。

GitHub 在 block s.b. 的时候可以填 optional note,这就很 git 的。(不然我会忘了我为什么会这样做)

1669378861254209537-FyrTOCiaAAIUgtG.jpg 1669378861254209537-FyrTOCiaMAA87y3.png

生活

  • 买了明天清早的机票,去昆明看看妈妈 。
  • 中国电信广东省电话网络竟然遭遇大面积服务中断,无服务信号、空号 。

有意思,这是被 syn flood / DDoS 攻击了?

1666093825578921992-Fx8neGBaAAIovQP.jpg

#rarbg 近 300 万部,近 6000 T。🤔 空间不够用了。️

1665848650591764480-Fx5H-wraAAAKHDJ.jpg

技术

  • 熬夜看完了 #WWDC 23,第一次看。感觉今年没有必须买 iPhone 15 。
  • 磁力链接的 btih 种子哈希竟然可以不是十六进制! https://twitter.com/majin_shinsa/status/1664972757208276993/photo/1
  • 发现博客服务器流量又被跑光了,并且发现大量 SYN_RECV 状态的连接。用 nethogs 命令看到有个连接在 2M/s,但是每次启动 nethogs 都显示不同的连接,搞不懂是为什么。从厂商的后台统计数据看到才恢复一个小时,流量已经跑了 30G 了。
    • 折腾了很久,不知道如何解决。先关电源关了。

生活

  • 我发现喉咙痛好像是因为空气太干燥的原因(整天开空调),持续喝水以后,喉咙就不痛了。多喝水!

ChatGPT 被强制登出了,看来换地区也不行了。到底是怎么检测到我不在美国的(地区设置和登录谷歌账号都是美国)?学多邻国用时区?时区改了我可没法适应啊。😡😡😡

生活

  • 在抖音上看到一部爽剧《回到古代当太子》,要收费,竟然在油管上面找到免费的,然后发现非常多类似的,看了通宵一早上,连看了四部剧。🥵🥵🥵

“此人已被永久禁言。”

1664529270612561922-FxmYcvHaIAEAnAg.jpg

生活

  • 儿童节快乐!收到了妈妈的儿童节红包🧧。
  • 今天一觉睡到快中午时分,头特别晕,还伴随着发烧,很难受。
  • 一天没吃饭,晚上一个人去吃了探唐烧烤,搬过来几年了,第一次去吃,味道还行。 吃了饭回来睡了个觉,一觉睡到接近 23 点,头还是很晕,不知道是为啥。 期间还一直做恶梦:科三停车前一定要经过某个点,并且速度不能超过 30 。🙃 反反复复做了几十次。 终于不想睡了,爬了起来。

醒醒!起来换证书📄了!

1663412520659607552-FxWg2DkaAAAJBZi.jpg


舒服了。。

1663420915852673026-FxWoeFdagAASZNZ.jpg

技术

  • laixintao 竟然关注了我的博客,收到了他的评论
  • 监控面板增加了一个证书过期倒计时面板,再也不怕证书过期了。但是告警规则用得还不熟,通知消息时而发时而不发的,有点儿奇怪。

GoDaddy 居然有真人在线客服💁的。。。

1663088284430635009-FxR565JaQAI8w88.jpg

Docker(包括 Compose)默认的端口居然默认是暴露在 0.0.0.0 上面的,真是离谱。(我真的没见过多少人会写 IP 地址的,基本上只会写 端口:端口)。这不一下子把服务器的端口直接暴露在公网上了。😡 这么多年 Docker 白用了。

1663010371882614784-FxQyEgUaYAEF0W3.jpg 1663010371882614784-FxQy1rAagAEi7bY.jpg

技术

  • 刚刚发现 docker 的端口默认是暴露在 0.0.0.0 上面的,才发现博客的 grpc 端口也暴露在公网了。Twitter
  • 把 blog 的服务器 do-release-upgrade 了一下,然后挂了。重新 install 了系统,只需要备份 servers 目录即可。目前看来一切正常。

技术

  • 早上一爬起来又收到了 VPS 带宽被耗尽的邮件。但是,这次不像是被别人下载文件耗光的,看了下官方的统计数据,是以 5.6 M/s 的速度持续下载了 10+ 个小时的数据。但是我目前没找到是哪里的下载导致的。
  • 学会了使用通配符域名,之前的很多个 xxx.home.twofei.com 可以全部去掉,保留 *.home.twofei.com 即可。

换完电池,顺便去莲花山公园溜达了一圈,灯光秀还不错。

IMG_3771.avif IMG_3781.avif IMG_3782.avif IMG_3783.avif

把手机换了一块电池🪫。

IMG_3756.avif IMG_3793.avif

2024-8-7 13:49:28

实际上,说是原装,但是质量也很差。一年多一点点就掉到了 86%.

生活

  • 来华强北给手机换了块电池,160,换的电芯。不知道好用不。

  • 在市民中心看到了带灯带的风筝🪁

  • 搬到这边来几年了,终于吃了一次“王麻麻小龙虾”。

生活

  • 拿到驾照🪪了!!!科三一把过,满分💯,科四裸考 94 分!开心极了!🥰🥰🥰

生活

  • 去模拟了科三,感觉还是好难,明天仍然没有把握过。
  • 发现 谢 把我的 telegram 消息全部清空了。

技术

  • 查看 nginx 的日志发现上次 vps 流量用完是因为被别人循环下载博客上的“天使爱美丽.pdf“文件给刷完了的,不是我自己用完的。难怪。
    • 刚才写了段代码,建立 256 个 ssh 连接到它的 IP,不知道它还能不能连上它的 ssh。

为了删除已经推送到 GitHub 的大文件,必须把仓库删除再重建…………🥵 不可思议。

1660855308917387264-FwyLE9VaAAA5-a9.jpg

操作步骤

  • 创建了两台虚拟机:alpine-host(192.168.1.217),alpine-client(192.168.1.88)。

  • 设置 client 的 gateway 为 host:

    1
    2
    3
    4
    5
    6
    7
    
    # cat /etc/network/interfaces
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp
    	gateway 192.168.1.217
    
  • 通过 ssredir_tproxy.sh 成功从 client 请求 Google。

    • 原理:在 host 机器上将流量通过 iptables 转换到 ipt2socks 进程内处理
    • 进程将其转换成 socks5 client 协议,然后请求代理 socks server 服务完成翻墙。

iptables 规则里面有两条没看懂,TPROXY 没定义,不知道跳哪里去了。

hand over the marked package to TPROXY for processing

1
2
iptables -t mangle -A PREROUTING -p tcp -m mark --mark 0x2333 -j TPROXY --on-ip 127.0.0.1 --on-port 60080
iptables -t mangle -A PREROUTING -p udp -m mark --mark 0x2333 -j TPROXY --on-ip 127.0.0.1 --on-port 60080

查到了,竟然是 Linux 官方标准模块…… Transparent proxy support

相关工具

  • ipt2socks 将作为 gateway 的流量转换成 socks5 client 后请求 socks server 将流量发送到境外;

技术

  • 基本上搞懂了,OpenWRT 软路由的工作方式,非常开心 🥳。 接下来就是做一个自己的,ImmortalWRT 实在太丑了,功能繁复,用不着。

技术

  • 备份电影到 nuc 时,先备份创建时间(rsync 的 -N 参数),结果发现 nuc 上面的 rsync 版本太低(2018 年的)不支持。真是奇怪🤔️,ext4 这类文件系统是有什么奇怪的理由默认不开启保存文件的创建时间?

    那我手贱升级一下系统版本吧,希望不要“滚挂”!😡。论什么是动力啊!

    花了一个多个小时,更新成功。重新安装 Docker 后把我的防火墙默认 POLICY 又改成 DROP 了。花了好一阵才解决。

技术

  • 安装了 #ChatGPT iOS 官方客户端,却死活用谷歌登录不了(电脑端可以),开全局防火墙也不行,于是我就好奇,我又没开定位,它是怎么知道我在哪里的?然后我发现手机系统设置里面有一个“语言与地区”,地区是中国,我尝试改成“美国”,然后发现可以了!身在中国__在美国🥲。

生活

  • 买了两瓶 #维生素 B,OTC 的。希望皮肤能好一点儿?

生活

  • 在拼多多买了两块 Apple Watch 表带,大小合适,终于不用在手腕上打圈了。

学习

  • “五一”挤死也要旅游,图个啥?用马斯洛需求层次理论分析一下
    • 五个层次
      1. 生理:食物、水、空气、睡、性
      2. 安全:身体、财产、事业
      3. 爱与归属:亲情、爱情、友情、社交
      4. 尊重:自信、收获尊重
      5. 自我实现:个人理想与抱负
    • 代表
      • 西游记:唐僧、孙悟空、沙和尚、白龙马、猪八戒
      • 工作:发工资、五险一金、团建、表扬/晋升、自我实现

一不小心没注意到用完了 VPS 的流量,直接导致彻底失联了。。。村里终于通网了。。。

世事无常,R.I.P.

1658057776474787841-FwKaX5AaQAEE4XD.png

技术

  • 一早起来发现 HostDare 的 VPS 流量用完了……宅家这段时间看油管真多啊!导致失联了好几个小时。并且,新买了副本,从早到晚旧 VPS 的网络彻底不给用了(可以在网页上 VNC),不知道怎么把旧数据迁移到新 VPS。
  • 另一个更惊讶的消息是,陈皓(@haoel)先生因为心梗意外离世了。
  • 搞了一晚上,把代理进程全部改成了 docker,并且开启了负载均衡。跑一下看看效果。

技术

  • 使用 WebSocket 重写了 http2tcp,支持连接断开自动重连。以前想写的“永不断开的 TCP” 好像完成了?🤔️

最近家里代理服务器很不稳定,不知道是不是有啥大事?奇怪的是我发现直接打开服务器上的网站却秒开,是不是我 443 端口的 nginx/tls 特征伪装被识破了?🤔️

于是我用Go WebSocket写了个代理编译成WASM直接跑在无头浏览器Chrome里面,目前看来很稳定。️🤔

最成功的“伪装”是:我真真正正是个浏览器?

1657388986309169152-FwA4eL-aUAEd6Vq.png 1657388986309169152-FwA5FtsaQAE2SlQ.jpg 1657388986309169152-FwA5p1oakAEVJgT.jpg

技术

  • 基于 无头浏览器 + WebSocket 实现了五个真正浏览器级别的代理软件,会不会比 GO 的 TLS 特征更好?

写了个油猴脚本,自动下载点过赞的油管音乐视频🤔️不怕本地没音乐了,实在无聊用 ffplay 无打扰播放一下也行。😂

1656335584208756736-Fvx7mNjaMAIRuNS.png 1656335584208756736-Fvx724JaYAAg63J.png 1656335584208756736-Fvx8MJ6akAMAoyP.jpg

技术

  • 弄了个油猴脚本,自动下载油管点赞过的音乐视频。不怕没资源了!

为什么要把该开发者解决的事情丢用用户去解决。有本事不写 Cookie?

1655937664435228675-FvsSWWGakAAK1Oc.jpg

在把 2015 年花 299 买的漫步者音箱拆开加装个蓝牙模块改成无线时发现,这货居然用的是 TDA2030/2050 😅 这可是在学校那时用的玩意儿啊。。。

1655882834090004480-FvrgnU6akAEIQ4u.jpg 1655882834090004480-FvrgoS0aIAAm0Gu.jpg

娱乐

  • 一口气看完了《漫长的季节》,感觉就是个加长版的悬疑电影?

技术

  • 这都什么年代了,C++ 从字符串里面解析出一个数值居然还是非常复杂:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    #include <iostream>
    #include <charconv>
    
    int main()
    {
        const char* str = "1234";
        int num;
        auto [p, ec] = std::from_chars(str, str + std::strlen(str), num);
        if (ec != std::errc()) {
            std::cerr << "Error: invalid integer string\n";
            return 1;
        }
        if (p != str + std::strlen(str)) {
            std::cerr << "Error: invalid characters in integer string\n";
            return 1;
        }
        std::cout << "Parsed integer: " << num << '\n';
        return 0;
    }
    
    

我给加了个 HomeKit 协议支持,现在可以在手机上随时控制开关与查看状态了😅 太能折腾。。。

1654119735200722945-FvSc_z8aEAMNm-m.jpg

板子打好了,花了点儿时间焊上去,正常工作!🥰

1653988085896740864-FvQlRPMaAAI-MeA.jpg 1653988085896740864-FvQlRQBaMAAiihn.jpg 1653988085896740864-FvQlRPpakAA8Uql.jpg

技术

  • 嘉立创打的板子到了,很快焊好 ESP8266,工作非常好!
  • 让硬盘柜风扇支持了 HomeKit!算是我制作的智能家居的第一个设备!

跟着别人的视频初学 3D 建模,人家 1⃣ 个小时的视频,我边看边做花了 5⃣️ 个小时 🥵🥵🥵 可太难了。

https://youtu.be/ZCGhYYpyf84


然而还不太像……

1653346398182731778-FvHdxfDagAMtVpq.jpg


看截面像一点儿~

1653348730840698880-FvHf5UBacAUVT-K.jpg

我也想要一个谷歌面试机会🥹🥹🥹

(这款 ESP32 没有硬件 PWM,效果不是很好。)

生活

  • 不知道为什么把“系统服务”的“指南针校准”给庆掉了,一直使用苹果自带地图的时候不显示方向给我气死了。

在家里划水两个月,捡起了8⃣️年前的爱好……

闲来没事儿,还是画了块 PCB。应该有8⃣️年没画了吧?非电子专业,接受各种批评……🤡🤡🤡

1652583173992374272-Fu8m6LOagAEuLv4.png 1652583173992374272-Fu8nPj8akAAIJXK.png

技术

  • 画了世特力风扇控制的电路板,贴片元件。结果下单的时候觉得太贵了又改成了插件。5张花20块。
  • ESP32-C3 的 FreeRTOS 有个 configTICK_RATE_HZ/CONFIG_FREERTOS_HZ 是用来配置内核任务调度的频率的,配置的范围是 ,那么每次 tick 的最短时间就是 (也可以说成是灵敏度?),所以无法做到像不使用实时操作系统的那种单片机方式来精确 sleep ,这其实挺难受的。

笑死,不给看😅

1652178798178344962-Fu231WPacAAdyiD.jpg


@code

加了一句 #Stylish, CSS。看数据手册瞬间清爽了🥹

1651777628410634241-FuxKpw2aYAEWbo-.jpg 1651777628410634241-FuxK25baYAAl_2B.jpg 1651777628410634241-FuxK9QJakAUdlRS.jpg

生活

  • 招商银行给寄送了一张金葵花卡,但是电话中匆忙,没有了解到具体有什么用,有没有管理费什么的。之前几次都是信用卡中心打电话来让我办卡,我拒绝了,现在突然换成开户行打过来,我一下子没反应过来就答应了。。。这样子感觉容易受骗!

硬件

  • 终于把红外遥控器的接收代码从树莓派 Pico 移植到了 ESP32-C3,花了很大工夫!
    • 终于体会到什么是实时系统:在中断处理程序里面停留的时间必须非常短(printf 都不被允许),否则会被 abort / 看门狗超时,需要将事件丢到队列里面,让别的任务去消费处理。
    • 这样一来,之前的设计就有问题:在树莓派的非实时系统上裸机操作时,进入中断函数的处理时间长度是不受限制的。而实时系统里面,事件(比如电平变化)发生的时候就要马上获取到当前电平(还比如事件发生的时间),将它们投递到事件队列,处理任务通过此拿到事件发生的时间。否则时间就是不准确的。

Jellyfin 给我的电影(私有短片)自动匹配的封面(注意看数字),简直笑死我了…… 😅

1650897080565796865-Fukpy5zakAEXPLA.jpg

自动温度调控加好了。。。

用 esp8266 写了个 http 请求,每分钟向服务器查询是否需要开启风扇,而服务器通过 hddtemp 获取实时硬盘温度。然后写 IO 口 驱动三极管(s9013)驱动 12V 100mA 的风扇。😅

成品图太丑了,先不放了。(没有画 PCB,直接全部拉飞线从 esp8266 模块上搞的)。🥵

1650548461148975106-Fufsz3raQAY69cQ.jpg

技术

  • 终于把硬盘柜的“智能”温度调控功能做好了,已经把 ESP8266 封装到了世特力硬盘柜内,通过调用服务器接口决定要不要开启风扇。本以为把 ESP8266 放在全金属封装(除风扇口外)的密闭空间内会没有 WiFi 信号,从路由器上面看到信号非常好。不知道是不是因为路由器就在旁边的缘故。

技术

  • 在 ESP32 C2 上面成功把“从服务器读取指令,决定要不要开启硬盘柜的风扇”功能实现了。后续等电阻到了以后移植到 ESP8266 上面。开心!

你说苹果是有多自信啊?不能设置访达的通知,也不能智能分组……只能手动一个一个点掉😡

1649723586343739393-FuT-0nDaQAA2ifn.jpg


关键它还不会自动隐藏,要么手动关掉、要么只能看着它……

说实话,我并没有感受到“整型提升”有啥实际好处?打这么多“弱类型体操”有啥用?

~0xFF 是先扩展成 0x000000FF,再取反得:0xFFFFFF00,那能等于 0x00?🤡🤡🤡

敢情我写代码的时候不考虑的定义的是 byte 类型,而该去考虑 CPU 需要什么类型?

1649494682047741953-FuQmDmdaYAAPp0L.jpg 1649494682047741953-FuQoSC8aAAAWI1Z.jpg 1649494682047741953-FuQovHKaYAA7M04.jpg


我原本的代码是这样写的,没生效:

1649499836927082496-FuQzWlXaEAAFRaK.jpg


这样描述更简洁直观:🤡🤡🤡🤡🤡

1649498538768994305-FuQyG-3acAAX3o5.jpg


我挺好奇 ~0xFF (字节类型)在 32 位机器上和在 8 位机器上是不是有不同的结果。。。

技术

  • 被 C/C++ 的“整型提升”耽误了两个小时时间,因为我在写红外遥控的检测的时候,发现 ~0xFF 竟然不等于 0x00……
  • 完美地实现了红外遥控器的解码。
  • 拿到了 ESP32-C3 的板子,完成了 HelloWorld 的测试!

刚刚莫名其妙发现 go build 出来的二进制居然没法执行(图一),排查了一阵子才发现是因为挂载的磁盘有 noexec 选项,可是我没在 fstab 里添加这个参数啊(图二),最近的唯一改动就是加了个 user 选项以使不需要 root 用户就可以 (u)mount。结果一查文档才知道 implies 了这么多选项(图三)🥲🥲🥲

1649050480470032384-FuKYNTZaIAAExke.jpg 1649050480470032384-FuKZUJkaYAIbirQ.jpg 1649050480470032384-FuKZ8YLaAAM6AQy.jpg 1649050480470032384-FuKaGk4acAA1iBn.jpg

外观

  • 芯片:只包含乐鑫的芯片。
  • 模组:把芯片焊在一块小的多层核心板上,留出引脚。
  • 开发板:把模组焊在另一块板子,板子提供电源接口、存储芯片、LED、GPIO 口等。

说明

蓝牙(俗称传统蓝牙)和低功耗蓝牙,不是一回事儿~

系列

  • ESP32-S - Xtensa 内核,安全机制 & 神经网络
    • ESP32-S2
      • WiFi
    • ESP32-S3
      • WiFi & BLE
  • ESP32-C - RISC-V 内核
    • ESP32-C2(含 ESP8684)
      • WiFi & BLE
    • ESP32-C3(含 ESP8685)
      • 比 C2 多了安全算法
    • ESP32-C6
      • 比 C3 多了 IEEE 802.15.4
  • ESP32
    • WiFI & BLE
    • 更注重低功耗?
  • ESP8266
    • 仅 WiFI
  • ESP32-H
    • 无 WiFI
    • BLE & IEEE 802.15.4

快十年没玩硬件,读个温度传感器搞了整整一下午🥲🥲🥲

1648365254395703297-FuAqRD1aMAAGtTC.jpg 1648365254395703297-FuAqzLUaUAI1-x3.jpg 1648365254395703297-FuArBI6acAAH6Nx.jpg

技术

  • dd磁盘A 拷贝成 文件Amount 成目录后,如果再尝试以 mount UUID=xxx 的方式 mount 原来的真实磁盘 磁盘A,会发现结果是 bind mount 刚刚前面那个文件 文件A ,而真实的磁盘 磁盘A 不会 mount 成功!差点儿删错文件。改用 mount /dev/sdX 的方式后成功。所以 dd 后是要改一下 UUID 吗?

技术

  • 应该有八年没玩硬件了, 今天花了一天时间看文档、写代码,终于用 #树莓派 PICO 把 DS18B20 温度传感器能正确驱动起来。 推特
    • C++ 居然可以“很方便地”返回多值了。1
    • 没想到我可以用最新的 C++ 语法写 90 年代的传感器,感觉有点儿神奇!

这应该是我目前见过的最大的镜像了吧?🤔 #Matter

1647580716006526977-Ft1h0FJaMAEEXu7.jpg

数码

  • 买的硬盘柜到了,风扇在卧室的声音有点大得离谱了,最主要是不能根据温度开启,就一直转。有点接受不了。

说说后续吧:我已经用上了 IPv6,家里内网的服务/设备可直接从公网访问,并且手机在使用数据流量时也翻回家。已经使用一个月左右,体验很好。 以下是我目前的家庭网络结构(单间儿):

1646488085360951296-FtmAB5faUAIZTee.jpg

生活

  • 今天科三第一次上路,挺刺激的,但是也挺害怕的, 感觉车身总是不太正。害怕压线到别的车道上去撞车。 #学车
  • 今天自己首次交了社保。但是不是按最低工资交的,又好几大千没有了。

生活

  • 今天从昆明回深圳,飞到广州再坐高铁。

04.05

  • 重庆北站酒店 159 杨

04.07

  • 海底捞火锅🍲 1617 杨(自付)
  • 酒店 155 杨(自付)
  • 酒店 160 杨

04.08

  • 早餐 26 毛

证件

  • 身份证🪪

数码产品

  • 电脑💻
    • 充电器/线

生活

  • 今天坐飞机✈️的时候从候机大厅带了一瓶脉动🫙到飞机内,中途拧开瓶盖喝的时候才发现机舱的气压是大于瓶内,也就是候机厅室内,的气压的。难怪耳朵👂会耳鸣。 #TIL

工作

  • 今天离职赔偿到账了。这三个月年终奖➕离职补贴真的有点多呢。

回个微信消息不到15秒钟再切回来,连续使用20分钟的推就已经被杀后台了,你果是真的有病。💊

了解了一下原理。 #OrbStack

下载了 Apple 官方的例子(几行代码),试着跑了一下 Fedora Linux,确实可以成功跑起来。

示例代码:

https://developer.apple.com/documentation/virtualization/running_linux_in_a_virtual_machine

示例 kernel(记得解压) 和 initrd:

https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/37/Everything/aarch64/os/images/pxeboot/

等一会儿就能进入 shell。

1640834889506525185-FsVqbs8aYAUUURM.jpg 1640834889506525185-FsVqnwpaUAAnqvu.jpg

技术

  • 第一次使用手动生成的随机数密码(uuidgen),用于嘉立创。 (最近关于对通过“编程随想”的邮箱查到其密码(“rxh-temp”)跟名字有关有感。

国内的手机无法直接访问 OpenAI 的 API,可以在小鸡的 nginx 上加一个虚拟服务器就可以代理了,相当于自定义域名。但因为是反向代理技术,nginx 这边是可以看到 API Key 的,所以不要用别人提供的。 #OpenAI #ChatGPT

1639181975566319616-Fr-LHaGaQAEtU1S.png

TIL

  • MacOS 居然默认支持 7z 解压了。。。

TIL

  • 所谓的“蜂窝网络”,是因为基站信号的覆盖范围是一个正六边形,看起来像蜂窝。

技术

  • 折腾了半天 samba,没搞定权限问题。结果几行代码写了个 webdav 服务器搞定。

DJI Fly App

  • 标记已飞功能不好用
    • 不知道如何在 DJI Fly 上标记
    • 就算已真实飞过,也不会自动标记
    • 我上传了照片发了评论也没自动标记🥵

初体验

我的机型是 Mini 3 Pro,其它机型不一定和我的体验类似。

  • 刚拿到手时,开了机放在床上慢慢研究各项功能的使用,结果才几分钟就告诉我说“飞机发热过高需要自动关机”。离谱,就一个摄像头在工作,飞控电机都没启动你热个啥呢?
  • 起飞体验很好,“长按起飞”后自动飞到 1.2 米高度,不用担心开机后/起飞前/拾起时的误触操作。

拍摄

  • 录像的时候不能拍照
    • iPhone 手机是支持的
  • 48MP 的时候不能调焦

后续

  • 填写了反馈,赠送了小礼物🎁

控制/遥控器

  • 如果信号丢失,飞机可能进入“姿态模式”,会出现不受控、乱飞。
  • 官方文档描述 Mini 3 Pro 遥控距离最远可达 15KM,但是实测(山边、海边,建筑特不密集)只有 500~1500 米就信号骤减,不敢再飞。
  • 改进:遥控器其实可以增设外围天线的(比如 IPex),这样估计比内置天线信号会强很多。
  • 摇杆🕹️是拆卸式的(比较长、突出),每次都要组装、拆卸,麻烦不说,非常害怕掉地上、落桥下!
  • 遥控器系统屏幕反应迟钝、点击不灵,可能是因为 UI 面积太小。比如“起飞/返航按钮”🔘,经常发现点不到。

飞丢

  • 客服体验挺好的,非人为原因(包括飞机被干扰、打掉),上传飞行数据确认后是可以免费换新的。
  • 但是“找飞机”体验很差。一开始没连手机的时候,报告飞机丢失的点根本是不对的,我怎么靠近都发现靠不近,后来连上手机热点才找到飞机丢失点,却发现飞机早就不见了(不过应该无关)。
  • 没有“搜寻补救”措施,一旦失联,飞机就会关机📵,再也没有任何办法可以使买面发出主动求救信号。就算落在了身边的草丛,也不会知道。可能的补救措施很多,比如类似苹果的 AirTag,钮扣电池那么大小一个设备,可以待机一年,身边如果有苹果手机经过,就会自动上报地理位置给失主。另外,如果失主和它隔得近,还可以实时报告方向和距离,精度达 0.1 厘米级别。AirTag 成本很低,虽然部分是苹果自家专用芯片(UWB,超宽频带),但是可以有类似替代方案(比如蓝牙方向查找、蜂窝模块),最好是单独供电。
  • 若有别人拾得,如果可以允许失主向“新主人”发送信息就好了(在其尝试用新的遥控器配对时,有序列号可以识别出来)。苹果的“查找”是有此功能的。

生活

  • 下单了一双空军一号,675¥,应该是迄今买过最贵的鞋子👟了。
  • 很少红绿灯🚦
  • 喜欢吃酸的
  • 吃的很便宜
  • 大都说方言
  • 景点很远、很贵
  • 汽车站和高铁站在一起
  • 樱花🌸3⃣️月1⃣️5⃣️号左右开
  • 景点可以飞无人机(管控)
  • 人都很有礼
  • 出租车几乎不打表
  • 很少天桥,大都是地下通道(大部分已未营业)
  • 深圳通可以刷地铁

生活

  • 出去游玩了一周,又回到了深圳。第一次坐中间会停的飞机。贵阳-百色-深圳。
  • 在从机场到碧海湾的地铁看到一个名为夏紫宣的学生在做语文作业。看到其回答中有一个错字“一语双关, 赞美了毛主席的……,又……”。应该算是第一次主动搭讪?心跳得非常厉害。

行李

数码设备

  • 无人机、充电器、数据线、内存卡
  • 手机、充电器、数据线
  • 电脑、磁吸充电、充电器
  • 手表,充电线

证件

  • 身份证🪪

最终

  • 杨:
  • 毛:
  • 差价:

0312

  • 去机场打车 40.50 杨
  • 贵阳北到安顺西 93 毛
  • 安顺西到黄果树 44 毛
  • 到黄果树之前吃的酸辣粉 32 毛
  • 黄果树瀑布 210 各给各
  • 回安顺的大巴车 44 杨
  • 豆米火锅🍲 118 毛
  • 安顺站酒店 126 毛

0313

  • 夺夺粉 95 毛
  • 便利店 9 毛
  • 安顺到平坝的顺风车 60.5 杨
  • 景区到平坝的士 36 杨
  • 张家红发鹅肉火锅城 119 杨
  • 珍珠酒店 123 毛

0314

  • 豆花面 24 杨
  • 打车到高铁南站 10 毛
  • 南站到贵阳北 48 毛
  • 贵阳北到铜仁南站 245 毛
  • 铜仁南站到喜悦民宿 160 杨
  • 喜悦民宿 112 毛
  • 晚饭 80 杨
  • 零食 31 杨

0315

  • 午饭 74 毛
  • 梵净山门票 240 毛
  • 索道 280 毛
  • 客车 70 毛
  • 铜仁到贵阳 285 毛
  • 打车到吃饭 30 毛
  • 贵厨酸汤牛肉 208 毛
  • 荷庭悦色酒店 103 毛

0316

  • 土风豆米火锅🍲店 158 毛

行李

数码设备

  • 无人机
    • 充电器
    • 数据线
    • 内存卡
  • 手机、充电器、数据线

生活

  • 今天拿到了 #大疆 无人机,去了深圳人才公园。大疆的操作比较傻瓜化,新手非常友好。第一次飞行体验非常成功。

刚才打电话给中国电信申请公网 IPv4 地址,发现已经申请不到了。她说若确实需要,可以花 100 块/月 单独开一个公网 IP 资费包🥲🥲🥲

然而她说从 2022 年 12 月开始已经默认有 IPv6 了,我这就去验证一下。。。

地点深圳,1000M光纤用户。

生活

  • 下单了一台 #大疆 Mini 3 Pro 无人机 ✈️,¥6975,京东白条分期 12 期(没有等到招行)。

技术

  • 打电话给电信申请 IPv4,已经不给了。买可以,100 块/月。这也太贵了吧。然后她说从 2022 年 12 月起,都默认有 IPv6 地址了。刚刚试了一下打开了路由器的 IPv6 开关,好像真的有了。目前对 IPv6 还没有研究,我都不知道这是不是个公网 IP 地址。

生活

  • 去西乡户政中心拿到了新的身份证,有效期 20 年。

工作

  • 因为没有准备好,再次延期了到字节的面试。

生活

  • 考完了科二,得分8⃣️0⃣️。一把过,开心。
  • 妈妈今天生日🎂,若不是有科二考试,今天大抵是回家了。
  • 晚上和前日志组同事吃了晚餐(记忆串城),然后去 V8 唱了歌。非常开心。

工作

  • 正式办理了离职手续,从虾皮离职了。开始新的人生征程。

练车

侧方停车

  • 从门前经过,右车门后部对齐至杆处,向右打死
  • 倒车,左边看到两条线时回正
  • 后轮完全压线时向左打死
  • 车平行后停车(方向盘不动)
  • 打左方向灯,向前驶出,回正,对齐前面的砖头

曲线行驶

  • 沿着弧形向前,左侧后视镜压线时向左一圈小半,微调,直至左侧弧线消失,回正
  • 看右边,弧线出现时,向右打一圈小半,微调
  • 回正,对齐前方砖头

半坡起步

  • 对齐砖头上坡,行至左侧后视镜过线时停车,拉手刹,等待两秒
  • 松手刹,半离合至车抖动时松脚刹起步

刚刚 Nuc 风扇一直狂转,发现是 (micro)K8s 的某个 CronJob 一直没起来,疯狂(微秒级)向 syslog 刷日志,导致直接把我的 Nuc 根目录刷满了……这都啥玩意儿啊。。。

1629499746284101633-Fp0ktL5WYAUwfkv.png 1629499746284101633-Fp0kyDXWYAEYS_i.jpg 1629499746284101633-Fp0lTlFX0AMETNZ.jpg

  • Top 15 Window Managers for Linux
  • Embedded GUI Using Linux Frame Buffer Device with LVGL
    • 一篇非常简单的文章描述了如何使用 Linux 的 FrameBuffer。
  • How does the GUI interface in Linux work?
    • Windows 1-3.1 原来是直接跑在 DOS 上面的,所以 Windows 和 Linux 其实都一样,先跑命令模式,然后在命令模式下启动图形界面。
    • Shell 是内核与用户的交互层,分为:Command Shell,Graphic Shell。所以其实可以说 Linux 的 Shell 是类似 Bash 的这种命令解释器,而 Windows 的 Shell 则是 Explorer 桌面环境(shell32.dll 还记得吗?)。
  • FrameBuffer
    • 了解了很多关于图形显示/显卡方面的知识,非常值得一看。

硬件

  • 买的两个树莓派 Pico W 到货了,想点亮 LED,把 UF2 文件拖进去,磁盘就退出了,MacOS 报告说磁盘未正确弹出,LED 灯也一直不亮,以为是这里的问题。查了很久才知道 Pico W 的 LED 灯是连在 WiFi 芯片上的。气死我了! #树莓派

练车

倒车入库

  • 向前左转,然后倒回来
    • 肩膀对齐砖头🧱时,向左打方向盘一圈小半,直到前轮出线
    • 往回倒,左眼看到砖头时方向向左打死(小半)
    • 压线两条半时,方向盘回半圈,看右边
    • 后面的直角出现时,方向盘回正
    • 后退🔙至后视镜压线
  • 向前右转,向后倒,向前对齐砖头
    • 肩膀对齐砖头时,向右打方向盘一圈小半,车走直线时回正
    • 向后倒
    • 向前,方向盘对准砖头,后视镜出线
  • 向后倒入库
    • 向后,后视镜压线时,向右打死方向盘
    • 压线两条半时回半圈
    • 左边出现后面直角时,回正
    • 后退至后视镜压线

我应该相信谁… 🤔️

1627634642915581957-FpaFE9taAAADPt6.jpg 1627634642915581957-FpaFE9vaEAEFNFI.jpg

生活

  • #推特 的签名从“不要关注我。 / Don't follow me. / ♥️ is for marking only.”改掉了,用了多年。把头像那朵鲜花也换掉了。

GitHub 竟然有这种机器人自动修复安全问题,优秀。

1625887793196204032-FpBQKpyaQAAGp40.jpg

概念

苹果把 Profile 这个名词译为“描述文件”:iOS 支持的蓝牙描述文件

资源

生活

  • 妈妈寄来的90个土鸡蛋🥚到了,能吃很久!
  • 把旧 Macbook Pro 寄回去给姐姐了。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
var (
    httpFwd ...
    tlsFwd ...
    sshFwd ...
)

for {
    buf := conn.Read
    n, ok:=httpFwd.Feed(buf)
    if ok {
        buf = buf[:n]
        break
    }
    tls.Feed()...
    ssh.Feed()...
}

io.Copy ...

技术

射频

从百度百科的射频条目(比维基百科的中文射频条目详细)初次了解到射频的工作原理,知道得太晚了。

射频(RF)是Radio Frequency的缩写,表示可以辐射到空间的电磁频率,频率范围从300kHz~300GHz之间。射频就是射频电流,简称RF,它是一种高频交流变化电磁波的简称。每秒变化小于1000次的交流电称为低频电流,大于10000次的称为高频电流,而射频就是这样一种高频电流。射频(300K-300G)是高频(大于10K)的较高频段,微波频段(300M-300G)又是射频的较高频段。

电子学理论中,电流流过导体,导体周围会形成磁场;交变电流通过导体,导体周围会形成交变的电磁场,称为电磁波。在电磁波频率低于100kHz时,电磁波会被地表吸收,不能形成有效的传输,但电磁波频率高于100kHz时,电磁波可以在空气中传播,并经大气层外缘的电离层反射,形成远距离传输能力。我们把具有远距离传输能力的高频电磁波称为射频。射频技术在无线通信领域中被广泛使用有线电视系统就是采用射频传输方式。[1]

技术

  • 使用 HAP 包第一次成功地在苹果家庭 App 上面“安装”了一个白炽灯,体验了一把智能家居的感觉。

生活

  • 把 Apple Watch 添加到了出租屋的通通锁上面,没想到可以直接用手表控制门锁了。
  • 预约了明天的洗牙。
  • 身份证还没补办,估计学车驾照考试会被延期预约。

生活

  • 新买的 MacBook Pro (M2 Pro) 到了,并从旧款迁移了过来,用起来流畅了许多。加上 Apple Care+,总价大概在 25000 元。这是我迄今为止买过最贵的单件设备。希望它能给带我自由。 旧款应该会给姐姐(作为喜多的生日礼物),但是我先多使用一周,待新款无兼容问题再寄回去不迟。
  • 晚上去邓绍聪家里吃了晚饭,他们刚搬了新家🏠。远远比之前的好,也比我这里大得多。聊天很久,直接凌晨。他现在画 PCB 原理图已经达到了可怕的 28 层。画原理图基本不在话下。聊到工资,他已经 30K+ 了,大概率已经超过了我。太尴尬了。
  • 身份证今晚正式过期,还没有去预约补办。最近皮肤实在不太好,查了一下,可以自己提供照片,希望有一个好看的照片。

生活

  • 跟前日志组同事再次去了记忆烤串、唱了 KTV。玩得很开心。

生活

  • 新买的 AirPods Pro (2nd Gen) 到了(旧的给了妈妈👩)。初听效果相比上一代降噪好很多,特别是在地铁上的时候。

刚发现 iPad Pro 在旋转的时候,播放音乐的4⃣️个喇叭🔊的高音与中音会自动切换(高音在上,中音在下),蛮舒服的。

个人

  • 把 GitHub 的资料头像换了。(雪舞➡️动漫)

技术

  • 把在 Firefox 上用了多年的 Vimium 扩展给禁用了。现在越来越多的视频播放器支持 F 键作为全屏按键,上述扩展影响了这个功能的使用。
  • 门锁
    • 指纹锁/密码锁
    • 带传统开销开锁方式以解决停电/电池没电的情况
    • 可以根据不同的开锁人物/对象/方式触发不同的场景功能(比如灯)
    • 多次错误尝试需要有告警、通知能力

个人

用品

  • 雨伞☔️
  • 湿纸巾🧻

证件

  • 身份证🪪
  • 信用卡💳
名称 类型 周期 费用
twofei.com 域名 159

读书

  • 《人类简史:从动物到上帝》▶️ YouTube 1小时看透人类10万年,人类简史,从动物到上帝
    • 《人类简史:从动物到上帝》以演化生物学的角度介绍了人类的历史。赫拉利认为生物学限定了人类活动的极限,而文化则塑造了在极限以内所发生的事情,历史学科则是对文化变迁的记录。《人类简史:从动物到上帝》将从石器时代至今天智人的演化历史分为了四个阶段:
      • 认知革命(约公元前70000年,智人演化产生了想象力,出现能够描述故事的语言)
      • 农业革命(约公元前12000年,农业开始发展,智人开始驯化动植物)、人类的融合统一(人类政治组织逐渐融合统一为一个“全球帝国”)、
      • 科学革命(约公元1500年至今,出现了现代科学)。
      • 认知革命:“智人之所以得以统治地球,是因为智人是唯一可以大规模且灵活进行合作的物种。”是赫拉利在认知革命章节中的主要观点。赫拉利认为,史前智人的活动,是包括尼安德特人等其他人属物种以及大量其他的大型动物灭绝的重要原因。而智人之所以可以在大规模范围内进行灵活的合作的原因,是因为在“认知革命”之后,智人拥有了创造及相信虚构事物和故事的能力,这些虚构事物和故事包括了神、国家、民族、企业、钱、人权等。赫拉利在书中声称,人类所有大规模合作的系统,包括宗教、政治体制、贸易、法律制度等,都由于智人独特的对“虚构事物和故事”的认知能力而产生。同时,赫拉利将金钱视为一种相互信任的系统,并将政治和经济系统视为或多或少与宗教类似的系统。
      • 农业革命:赫拉利在本章节中的主要观点是:“尽管农业革命促进了智人人口数和小麦、牛等共同进化物种的数量的增长,但农业革命令智人及其驯化、豢养动物的生活方式及饮食变得更为单调无趣,使得绝大多数智人及豢养动物的生活质量,与智人狩猎采集社会时代相比,反而出现了恶化”。在本章及全书中,赫拉利也用了较大篇幅介绍了智人对待其他动物之冷酷。 人类的融合统一:这一章节的主题则是智人在历史进程中,在政治与经济上逐渐走向融合与统一。赫拉利认为,几个世纪以来人类逐渐融合统一的主要动力,包括了资本主义的自由贸易,帝国主义对领土的扩张要求,以及普世主义思想的发展。
      • 科学革命:赫拉利认为起源于欧洲的科学革命,基于当时的精英们一种创新的观点:愿意承认人类的无知,并希望通过以观察和数学为中心的科学研究,补救他们的无知、获得新的能力。这种观点同科学革命之前“世上所有重要的事情都已经为人或为神所知”的想法完全不同。承认人类的无知,成为了早期欧洲帝国主义发展和当前人类文化融合的重要驱动力。赫拉利在这一章节也论述了历史上对幸福研究的匮乏,并认为现代人不见得比过去的人更加幸福。

中文音节不多(以及为什么这很有趣) https://youtu.be/BMI6Mbx8lbw 来自 @YouTube

第一次通过英语学习汉语,竟然挺有趣。

另外,GNOME 的 g 不发音😅

生活

  • 打包好了过年回家的行囊,压得紧紧一书包🎒。

社交

  • 睡了一整天,醒来把微信号改了。旧:SXMYTXWTZ,新:xn--b2wa,来自于“涛涛”的IDN国际域名形式,也即 PunyCode,ACE prefix。 #微信

技术

  • 一直好奇 dd 命令到底干了啥,原来真的可以被 cat直接替代:The Cult of DD

学习

  • 国人大都不会欣赏别人,也不会赞美别人,也不会帮助别人,也不会感谢别人,然而,挖苦讽刺、教训恶心、落井下石、反咬一口、羡慕嫉妒恨……却很常见。 推特 #三观

生活

  • 买了回重庆的飞机✈️票和回老家的火车🚄票。因为疫情😷,感觉已经几年没有回过家了。但是,仍然是只身回家。

学习

  • 健康是一切幸福的基础,睡眠是健康的基础。摘抄一部分why we sleep的内容。推特 #早睡早起

技术

  • 今晚帮群友排查了一个相对冷门的问题,记录出来,希望能有帮助。简而言之,群友的代码(涉及大量的小文件写入),运行在 Docker 里面,走 --mount bind 挂载云盘,在创建文件的时候出现 no space left on device,确认过 inode 之类的都没问题,然后整体排查思路如下(1/N) 推特 #文件系统

购物

工作

  • 一到公司上班就有点头晕,有一种想要离职的冲动。

生活

  • 跟妈妈通了视频,说是要在别人家买一头猪🐖,问我能不能早点回家。今年看起来没有年终奖、没有升职、也没有加薪。没有工作的兴致。想提前很早请假,然后年后回来辞职,再休息几个🈷️。去它的 gap year。

生活

  • 刷了一晚上油管,又睡了一整天。
  • 今天是最后一天假期,准备准备明天就开始上班了。洗了很多衣服,希望明天能干吧。

生活

  • 今年的最后一天,待在家里没有出门。
  • 跨年,没有给任何人发祝福语。

工作

  • 没请假没去公司,旷工一天,在家躺了一天啥也没干。
  • 半夜爬起来迁移了3⃣️个小时的 nonlive 环境数据。白天又在家睡了一天。

生活

  • 深更半夜跑去社康看看是否还是阳性,结果社康已经关门了。明天要不要去公司呢?已经无故旷工两天了。

工作

  • 没请假没去公司,旷工一天,在家躺了一天啥也没干。

折腾

  • 因为尝鲜体验了 #MacOS 的新版 #QQ (Electron),在弹出截屏工具的瞬间,键盘与鼠标全部失灵,但是系统看起来却没有卡死。头天晚上折腾半天没解决,头痛睡去。早上醒来拿有线有插,可以用了。才发现是蓝牙莫名其妙被关掉了。

生活

  • 圣诞在家睡一天,啥也没吃。 #圣诞节
  • 袁教因阳性及月底放假,通知我取消了科二的考试。 #学车 人还是不能太偷懒,明明五月份报的名,大半年还没考科二。

疫情

早上起来精神状态还是不错,头有点小晕。

社交

  • 早上醒来就叫了 #通通 ,结果一天都没回应我。不知道是不是准备过平安夜去了。
  • #雪舞 晚上消失了几个小时后回来问我吃苹果🍎没有,让我去买。没买。睡了。

技术

生活

  • 今早起来感觉恢复得很好,但是仍然感觉全身乏力,继续请了一天假,睡了一天。 #新冠
    • 晚上去社康测了抗原,确认阳性。
    • 收到了 #通通 从北京寄来的布洛芬,唯一一个给我寄药的,感谢!

生活

  • 昨晚回来的时候一切正常,睡到半夜开始做恶梦、发高烧,整晚没睡好。早上醒来请了个假,继续睡了一天、一夜。 #新冠

英语字母顺序也不影响阅读:gRPC or RPC。

iOS 用 React Native 重写了(bushi 🥹

1580379356685537280-Fe6ipQSagAA_rdh.jpg

想法

  • 突然想写一个 App,用于加密通信:
    • 密友管理(公钥)
    • 文本/文件加密分享
    • 剪切板自动加解密

以为在执行命令前先 echo 一下就安全🔐了?🤔我傻了。

总有一坑等着你系列。

1530222859205103617-FTxxMc4aIAA71KR.jpg

生活

  • 罗兰电钢琴的左边喇叭也坏掉了,继续在淘宝上买了一个山寨喇叭换上了。还买了一副 AKG 的监听耳机🎧。(5.2)
  • 跟毛卫卫去爬了羊台山/阳台山,先骑了两个小时的车到山脚,到达山脚的时候腿已经软了,好在吃了个午饭,缓了个神。 下山时天色已晚,没有 72 小时绿码,无法上公交,白搭了一站后被轰下车,打车回去。(5.3)

技术

  • How Go Mitigates Supply Chain Attacks

    • 供应链攻击

      供应链攻击是一种传播间谍软件的方式,一般通过产品软件官网或软件包存储库进行传播。 通常来说,黑客会瞄准部署知名软件官网的服务器,篡改服务器上供普通用户下载的软件源代码,将间谍软件传播给前往官网下载软件的用户。[1] 此外,黑客还会向一些软件开发者常用的软件包存储库如npm、PyPI和RubyGems等注入带有恶意代码的软件包。 这些软件包在用户下载后安装时会触发恶意行为[2][3]。比较知名的供应链攻击事有XcodeGhost风波。

    • 一点点的复制比一点点的依赖好

      A little copying is better than a little dependency.

    • Go 相关的一些谚语

      • Don't communicate by sharing memory, share memory by communicating.
      • Concurrency is not parallelism.
      • Channels orchestrate; mutexes serialize.
      • The bigger the interface, the weaker the abstraction.
      • Make the zero value useful.
      • interface{} says nothing.
      • Gofmt's style is no one's favorite, yet gofmt is everyone's favorite.
      • A little copying is better than a little dependency.
      • Syscall must always be guarded with build tags.
      • Cgo must always be guarded with build tags.
      • Cgo is not Go.
      • With the unsafe package there are no guarantees.
      • Clear is better than clever.
      • Reflection is never clear.
      • Errors are values.
      • Don't just check errors, handle them gracefully.
      • Design the architecture, name the components, document the details.
      • Documentation is for users.
      • Don't panic.

RT @VitalikButerin: @ioveamg1 说一个国家的人必须支持自己国家的政府并不是爱国,而是一种奴隶制。真正的爱国有时候需要对抗自己国家发出的邪恶,因为这样才能帮自己国家变得更美

工作

  • 明天开始 AB 班去公司。我工号是偶数,周一、三、五去公司;

生活

生活

  • 去宝立方吃了年夜饭:椰子鸡;
  • 一家人看了春晚;

生活

  • 再一次去了南油服装市场,妈妈和姐姐买了几件衣服;
  • 去了蛇口海鲜市场买了海鲜到旁边的店里加工吃,头一次见到未剥开的鲍鱼竟然有那么的大;

生活

  • 去了南油服装市场,买了 4 个包包;
  • 去了南油的“金光鸽王凯德广场店”吃了鸽子,充了个会员;

生活

  • 带家人去同学家看了房子,准备住下;

个人

  • 个人了年度体检报告:大致正常心电图、尿蛋白阳性(肾有问题),挺害怕的;

#CSDN 好家伙,为什么 11 年没有登录你不自知吗?

1484439223700963330-FJnJmgRaUAIPWfU.jpg

好像无事记录。

生活

  • 去西乡超越羽毛球🏸️馆打了羽毛球。很久没有运动了!

学习

  • 狒狒,这个字念 fèi。

读书 《乔布斯传》 第十四章

  • “我希望你来和我一起工作。我能在你身上学到很多东西。”乔布斯曾结识过一些忘年交,知道怎样利用斯卡利的自负和不安全感。
  • 乔布斯喜欢学习在大学从未学过的这些历史典故,因此他似乎沉浸其中了。 “我感觉自己真的像个老师,在教一个聪颖的学生。” 斯卡利回忆说。 斯卡利又一次沉溺在幻想里,他认为他们俩很相像。 “我在他身上看到了自己年轻时 候的影子。我那时也没有耐心,固执傲慢、冲动。 我的脑子里总是充满了新鲜的想法,装不下任何其他的事情。 我也不能容忍那些做事达不到我要求的人。

阅读

  • 科技爱好者周刊(第 190 期):产品化思维

    • BYOD,Bring Your Own Device,员工自带设备。 公司在禁用私人设备接入 VPN 的时候也提到过这个词语,当时没留意到是一个术语。

    • 重要的书都应该连着读两遍,因为第二遍读的时候,你已经知道结局了,这样才能真正理解开头。另一个原因是第二遍阅读时,你有不一样的心情,可能会从另一种角度看待问题。

  • 字节跳动不需要总部大楼

    • 组织架构参考了Facebook,永远 Day1的说法来自亚马逊、双月会承袭于谷歌。
  • 贝索斯的第一个非共识:永远保持在DAY 1

    • 我小时候看过一本书叫《熵 一种新的世界观》,让我感到很震撼。 熵是热力学第二定律,简单的来说就是宇宙是从热变冷,从秩序变成混乱,从有序变成无序。 任何组织随着时间的推移,一定会变得涣散、官僚、低效并最终走向死亡。这中间最大的原因就是因为组织的熵增。

    • 做企业都希望把企业从起步一路做大做强,招更多的人,做更多的项目,在自己所处的领域占据领先地位。 企业刚开始的时候往往是团结一心,创意无穷,高效执行,可是一旦到了几千人,就会开始变得涣散,守旧。 然后看见一个一个新公司崛起,你感觉束手无策,在互联网企业尤其如此。

    • 贝索斯是这么看待这个问题的,首先他使用了定义了两个词Day one和Day two。

      • Day one:就是事业开始的第一天,创业启动状态,充满迷茫和压力,但是充满创造力和颠覆思想。
      • Day two:就是事业的功成名就状态,拥有稳定的份额,较大的团队,企业目标是要保持地位维护稳定。
    • 贝索斯的“两个披萨🍕”小团队理论

      如果一个团队的人两个披萨吃不饱,那这个团队就太大了。

读书 《乔布斯传》 第十、十一、十二章

没有摘要。

个人

  • 帮雪舞下网课的账号不能用了,据说买视频要药 6 千。还是挺愧疚的。话说,我上大学一学期的学费才 5 千。
  • 收到了不知道是谁打赏给博客的 0.5 元。

读书《乔布斯传》第九章

从剪贴板粘贴出来的效果,发现排版好舒服:

我从来没有为钱担心过。我成长在一个 中产阶级家庭,所以我从没担心过会挨 饿;我在雅达利公司的时候,意识到白 己是个还不错的工程师,所以我知道自 己肯定可以维持生计;我读大学和在印 度的时候,自己选择了过苦日子,后来 尽管我开始工作了,但我还是过着十分 简单的生活。我经历过极度贫穷,那种 感觉很美好,因为我不用为钱担忧,后 来我变得特别有钱了,还是不用为钱担 我看到苹果公司的一些人,大赚一笔后 就觉得自己要过不同的生活。他们买下 劳斯莱斯汽车和许多房子,每所房子都 有管家,然后再雇一个人管理所有的管 家。他们的妻子去做整形手术,把自己 变得稀奇古怪。这不是我想要的生活方 式。这太疯狂了。我答应过自己,不会 让钱毁了我的生活。

  • 我从来没有为钱担心过。我成长在一个中产阶级家庭,所以我从没担心过会挨饿; 我在雅达利公司的时候,意识到白己是个还不错的工程师,所以我知道自己肯定可以维持生计; 我读大学和在印度的时候,自己选择了过苦日子,后来尽管我开始工作了,但我还是过着十分简单的生活。 我经历过极度贫穷,那种感觉很美好,因为我不用为钱担忧,后来我变得特别有钱了,还是不用为钱担心。 我看到苹果公司的一些人,大赚一笔后就觉得自己要过不同的生活。 他们买下劳斯莱斯汽车和许多房子,每所房子都有管家,然后再雇一个人管理所有的管家。 他们的妻子去做整形手术,把自己变得稀奇古怪。 这不是我想要的生活方式,这太疯狂了。 我答应过自己,不会让钱毁了我的生活。

那么喜欢圆角,为什么不把桌面的四角也给裁了?🙄 #macOS

1480191995561709570-FIqygzJVQAAzluv.png

生活

  • 深圳来了疫情,去做了核酸检查;
  • 去龙岗拿了太哥从土耳其买的三袋吃的;
  • 买的戴尔 U2720Q 显示器到货了,显示效果非常好。感觉熬夜时间会变长。

工作

  • 跟毛宝宝吃了木屋🛖烧烤;

娱乐

  • 今天安装了《天天象棋》,想学习一下。链接

工作

  • 今天开始上班,但是几乎没有与任何人聊元旦的事情。

技术

  • 因为要帮雪舞下载网课视频,破解了空格教育的视频加密方式:FLV 的前 100 字节按位反转。

生活

  • 今天在长沙,吃了文和友,然后告别,坐高铁回深圳。
  • 在深圳下了高铁排了一个小时的队做核酸检测,希望大家都没事。

工作

  • 明天就要上班,然而一点上班的想法都没有。

生活

  • 在张家界天门山玩了一天,坐索道到山顶、赏雪景,景色非常好看,索道非常刺激。不虚此行。
  • 游罢,坐高铁去长沙,虽然只有 4 个多小时,感觉是有史以来最漫长的一次高铁之旅。

生活

  • 去张家界玩了一天,请了导游,略贵,是 01 号、最美的土家族 92 年姑娘。
  • 在张家界并没有可能跟妹子一起跨年。

个人

  • 雪舞不承认今天是她父亲的生日。

工作

  • 把 nonlive 环境容器化了,还算比较好用。争取在周四收工,周五元旦出行。

技术

  • BASH 的重定向居然有四种写法,还能写在中间!推特

    1
    2
    3
    4
    5
    
    $ # These four are equivalent:
    § echo hello world file
    $ echo hello >file world
    $ echo >file hello world
    $ >file echo hello world
    

生活

  • 购买了周五去张家界游玩的票🎫 ,希望完全不受疫情影响。

思考

效率工具/笔记管理用啥?我的日志目前是纯文本的。推特

重要的是你的 routine,而非工具。

今天无事记录。

生活

今天去买衣服。 但是,没买到合适的衣服。针对男性的衣服可真是太少了。

技术

  • 林纳斯定律 / Linus' Law

    Given enough eyeballs, all bugs are shallow. —— 《大教堂和市集》

    足够多的眼睛,就可让所有问题浮现。

    只要有足够的单元测试员及共同开发者,所有问题都会在很短时间内被发现,而且能够很容易被解决。

  • 草台班子理论

    “我工作以后才发现,大家都是草台班子。 政府草台,企业草台,我也草台,大家都草台,凑合赚钱过日子。 一个企业,看着像一台奔驰在高速公路上的豪华轿车,里面其实是几个人蹬着自行车顶个壳。 路上的车都是这样,大家谁都不戳破。”

    对于大多数开发团体来说,都是草台班子构成的。 你几乎不要指望他们不犯错误。 这就是为什么我认为软件基础设施必须开源的原因: 我们需要为那些最优秀的人提供机会,让他们能分出一些精力来对草台班子搭出来的草台修修补补。

    云风的 BLOG: 难产的 Lua 5.4.4

工作

  • 今天下午团建了,学会了大富翁游戏,但是一把游戏玩到晚上7点结束也没有玩完。 妹子过来看了几次,我应该让她来帮我玩一下的,多些互动,可惜。 前端竟然不属于我们 Infra 团队了,没有跟我们一起。

个人

  • 今天跟雪舞打了麻将,有整整三个月没有打过了。

概念

  • 煤气灯效应(gaslighting) 是一种心理操纵的形式,其方法是一个人或一个团体隐秘地让受害人逐渐开始怀疑自己, 使他们质疑自己的记忆力,感知力或判断力,其结果是导致受害者的认知失调和其他变化,例如低下的自我尊重。 因为其使用否定,误导,矛盾和错误资讯,煤气灯效应使受害者心理上去稳定化以及使受害者不再相信她/他们原来的的信仰。 在现实案例中的范围,可以从虐待者否认先前发生过虐待事件,到虐待者意图使受害者迷失方向的怪异事件的发生。 煤气灯效应 - 维基百科,自由的百科全书 你要跟女人說她身上臭,她就會一直離不開你。

读书 《乔布斯传》 第二、三章

概念

  • 知识产权(Intellectual Property,IP),是人类智慧创造出来的无形的财产,主要涉及版权、专利、商标等领域。什么是IP? - 知乎

读书 《乔布斯传》 第一章

  • 那些疯狂到以为自己能够改变世界的人,才能真正改变世界。(The people who are crazy enough to think, they can change the world, are the ones who do.) —— 苹果“非同凡想”广告,1997

  • 我发现人们对于乔布斯有着十分强烈的肯定或否定的情感,罗生门效应十分明显。

    • 罗生门效应(英语:Rashomon effect)是一个讲述目击者们在提及一事件时的证词并不可靠,且给出自相矛盾的解释或描述的心理学术语,在犯罪学、社会学和社会科学中亦有使用。罗生门效应 - 维基百科,自由的百科全书
    • 罗生门效应是指,不同个体对于同一场景给出的不同的可以想象的解释。主要发生在两种情况下,用来表示目击者的不可靠性。 第一种情况是没有人可以证明发生了什么,第二种是来自权威人士的压力,他们试图确认最终的真相,迫使结束这一切。什么是罗生门效应? - 知乎

工作

我感觉我的容器化在年底之前要做不完了,半个月假期也没有时间休了。

读书 《小狗钱钱》第十五、十六、十七、十八、终章

什么是基金?

  • 基金就像一口大锅,许多没有时间、没有相关的知识或者没有兴趣亲自去买股票的投资人都会把钱投进这口锅里, 这些钱由金融界的专家——也就是所谓的基金经理人——去投资买股票。 国家对此进行严格的监督,基金经理人必须遵守一定的规定。比如,他们至少必须购买20种不同的股票。
  • 基金符合投资的一切要求。由于它的这些特点,它也非常适合儿童和青少年。如果能够在5~10年内不动用这些钱,基金投资是很保险的,它会带来丰厚的利润。
  • 基金也符合第三条原则,它很容易操作,几乎就像在银行开一个普通的账户一样简单。

挑选基金时的注意事项

  1. 基金应该至少有10年历史。假如它在这么长时间内一直有丰厚的利润,那我们可以认为,未来它也会运作良好。
  2. 应该选择大型的跨国股票基金。这种基金在世界各地购买股票,以此分散风险,所以十分安全。
  3. 对基金的走势图进行比较。我们应该观察在过去10年间哪些基金的年终利润最好。

72 公式

  1. 72÷收益率=资金翻倍年数
  2. 72÷通货膨胀率=贬值一半年数
  3. 72小时法则:如果你想去做一件事,72小时内不去做,以后大概率也不会去做了。

“我的帮手们对0.5马克的报酬完全满意”

这也向公司支付给工作者的薪酬一样,供需对应,就没什么好抱怨的和内疚的。 如果大家觉得不对等不匹配,你可以提出更高薪酬或者公司招性价比更优的人替换你。 所以不要一味的抱怨自己薪酬低,要明确了解市场行情,自身能力,公司发展潜力和岗位晋升通道, 当这其中有一方天平失衡,请迅速做出反应与调整。 公司也好,人物也罢,都是过客。

不为要失去的东西而忧伤,而要对拥有它的时光心存感激

  • 不要为失去的东西而忧伤,而要对拥有它的时光心存感激。
  • 不要让过去的悲伤来浪费今天的眼泪。
  • 人生最亏本的两件事:一件是对过去的自责;一件是对未来的担忧。
  • 泰戈尔的一句诗: 如果你为错过太阳而哭泣,你也将会错过满天繁星。
  • 《千与千寻》: 我只能送你到这里了,剩下的路,你要自己走,不要回头。
  • 人生就是一列开往坟墓的列车,路途上会有很多站,很难有人可以自始至终陪着走完。当陪你的人要下车时,即使不舍也该心存感激,然后挥手道别。

杂记

后我会变得很有钱,对这一点我不再怀疑,并且这个过程很可能比别人所能想到的要快得多。我还知道,有了这些钱之后,我仍然会很幸福。

认知

你永远赚不到超出你认知范围的钱,除非你靠运气。但是靠运气赚到的钱,最后往往又会靠实力亏掉。这是一种必然。

你所赚的每一分钱,都是你对这个世界认知的变现。你所亏的每一分钱,都是因为你对这个世界认知有缺陷。

这个世界最大的公平在于:当一个人的财富大于自己认知的时候,这个社会有 100 种方法收割你,直到你的认知和财富相匹配为止。

职场

  • 不要和同事做朋友——不要和朋友在同一个团队,同一个部门;不要和同一个团队同一个部门的同事,成为朋友。 但跨部门社交,把公司不同部门的人都变成友善的熟人,拿情报拿信息,挖掘公司的社交宝库,这个更重要。—— 章工@推特

    好像一直以来我就是对自己部门的同事特别好,忘了和其他部门的其他同事处理好关系。坐在我对面的监控部门的同事,快半年了,我甚至不知道他的名字。我似乎意识到这是一个非常严重的错误。

读书 《小狗钱钱》第十四章

我们的咒语:

  • 确定自己希望获得财务上的成功;
  • 自信,有想法,做自己喜欢做的事;
  • 把钱分成日常开销,梦想目标和金鹅账户三部分;
  • 进行明知的投资;
  • 享受生活。

阅读

  • 开放式关系:开放式关系(英语:open relationship)是人际关系的一种,处在这种关系中的双方有保持伴侣关系的意愿,但又不受主流的单配偶制的限制。开放式关系 - 维基百科,自由的百科全书
  • 《Systems Performance》这本书里有一个 USE 方法论,其中提到了一个 Saturation (饱和度)的概念,这个和 Utilization 有啥区别?实际工作中有把 Saturation 监控起来的么? Utilization 一般指的是繁忙程度,Saturation 一般指的是饱和程度。繁忙程度指的是你的资源有多少正在被利用,而饱和度则指的是等待利用这些资源的队列有多长。 —— 《是什么影响了我的接口延迟
  • 爆发了 log4j 的漏洞(关键词:${jndi:ldap})。本来睡得早,凌晨两点起来支持漏洞检修,直到早晨 5 点才休息。
  • 中午起来去值班,直到次日凌晨。头晕了一整天。排查 Log4J 的问题也排查了整整一下午,结果确认是安全部门带来的安全问题。无语。

从今天开始写日记!

这两天正好开始看《小狗🐶钱钱》,书中讲述每天需要写成功日记。

我并不打算只写成功日记,而是想把每天比较重要的、有意义的事都记录于此。

以此来对抗我越来越不好的记忆。

Fri Dec 10 01:47:16 CST 2021
桃子

读书《小狗钱钱》第八、九章

我第一次希望陶穆太太能继续说下去,但是她可能以为我对这个话题不感兴趣。

“有时候自己希望的并没有表面出来,反而导致了别人会错误理解自己的想法,所以想要的别掩饰,别躲避,也别光等待别人猜测,说出来,告诉对方吧。”

“如果你愿意的话,我明天过来帮你去银行开户。”马塞尔说。

“如果你知道去哪里,全世界都会给你让路。”——贵人鸟

“等候是世界上最愚蠢的事情,”堂兄宣布说,“我们应该想一想如何利用这段时间。”

墨菲定律(Murphy's Law):如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导致灾难,则必定有人会做出这种选择。维斯百科 - 墨菲定律

4321 定律:家庭资产合理配置比例:家庭收入的 40% 用于供房及其他方面投资,30% 用于家庭生活开支,20% 用于银行存款以备应急之需,10% 用于保险。

72 定律:不拿回利息利滚利存款,本金增值一倍所需要的时间等于 72 除以年收益率。比如,如果在银行存 10 万元,年利率是 2% ,每年利滚利,多少年能变 20 万元?答案是 36 年。

80 定律:股票占总资产的合理比重等于 80 减去年龄的得数添上一个百分号(%)。比如,30 岁时股票可占总资产 50%,50岁时则占 30% 为宜。

家庭保险双十定律:家庭保险设定的恰当额度应为家庭年收入的 10 倍,保费支出的恰当比重应为家庭年收入的 10%。

72公式

  • 72 个小时内没去做事情,可能以后你都不会想做了;
  • 72➗ 收益率 = 现有资金翻倍需要的年数;
  • 72➗ 通货膨胀率 =现有资金亏损一半需要年数。

“假如我总是花光我的钱,那我就永远也得不到我的‘鹅’,所以我就总得为了赚钱而工作。而一旦我有了一只‘鹅’,我的钱就会自动为我工作了。”

没想到 #git 默认并不是按 #semver 排序的,一堆“无序”的版本号看起来就挺难受。😌 这样搞一下吧:git config --global tag.sort -version:refname

1465955262699696129-FFgeFo6UUAcS0FO.jpg

RT @Piglei: 讲编程的文章很多很多,但能让我每隔一段时间重读一遍的没几篇。John Resig 的 “Write Code Every Day” 是其中之一。大约每隔一两年,我就会把它翻出来,读一遍。每次都感觉深受启发,有时甚至能起到心理治疗的作用……

如果你没读过…

火狐再也不像以前的火狐,内存占用又少又快。现在是怎么了?像隔壁 Chrome 一样。@firefox

1456146187409518593-FDVFCYHaUAEAl7h.jpg

Hi, I'm interested in @github 's default identicons. I would like to know how you generate your identicons and what the hash algorithm is, if it's no trouble.😬

西餐厅

第一次校歌词,来自嘟嘟女王的「夏」。

写个iocp测试程序,直接把指针作为完成键或void*传递,导致一堆错误。。。原来我指针用得这么不熟。。。

妈蛋,原来 SQLite 完全忽略创建表时字段后面括号内的内容。比如:VARCHAR(256) 并没有什么用,它并不会限制插入数据的长度。

Mac下的QQ竟然可以按option+左右正确地按中文词组来移动光标,厉害了。

世界之窗,我和邓总。

恸哭,学习了。

看完了『深入浅出Node.js』。

明白了钢琴中间踏板的作用。多亏了橙子。

战狼2

kcptun走起,速度要上天。

巴西烤肉走起!

雪舞这周开始了瑜珈,早上估计不能练琴了。提醒练琴的时间由早上九点半改成早上提醒起床时间七点半,八点半到九点半练琴。

雪舞竟然用五笔!

烧烤走起

我的琴送教授拿走了

第一次听说把投影仪当电视,芽美就是这样干。

电钢琴到啦

362真的改成电动的了,昨天邓总给我说我还不太相信。坐起来还是稳定安逸安静得多。

哈哈,第一次给百度知道点了赞:点我

雪舞在群里发的一张图,她竟然也用粉色QQ主题了……

回顾了国产凌凌漆。

今天睡着了,迟到了,没有按时叫雪舞练琴。

绿茶餐厅

Mac 竟然没有剪切……得按 Opt + Cmd + V。

hr让梅子周五过来面试。

下单买了第一本 Objective-C 开发的书:『Objective-C 基础教程(第2版)』

终于可以调试页面在 Safari 下的表现了。安装了三个浏览器:Safari、Chrome、Firefox。

嗯,今天 5 月 1 号,我正式学琴刚好一年了。

雪舞发了一个 3.65 的红包给我,啊哈哈……

梅子送公司同事杯子,顺便送了一个给我,她自己在公司有一个粉色的,我选了一个蓝色的。

mbp已拆开,里面就一个主机,一个电源,一本说明书。

唐吉诃德,那个字念“hē” 。

收到我的 MacBookPro 了,回到家再拆开。

雪舞不叫我小桃子了:“桃子又可以放纵了”。

又下单了,买了 MacBookPro,寄到了公司。

擦,招商银行信用卡改手机号不能到柜台,需要拨打电话修改……

海上田园

厨嫂当家。

应该说“I couldn't agree more.”,而不是“I can't agree more.”。

第一次在网易云中赞赏个人音乐创作者,给了小周的《Love home》,一首钢琴曲。加上我的赞赏,总共 220 次,我的生日。

刚才下单买了 MacBookPro,本来想明天就收货的,结果超过了 3 点,导致得 25 号才能收货,果断取消。

督促雪舞练琴已经一周了:

  • “不知道你这几天还适应不,我天天催着你练。”
  • “适应啊,我需要这样的你[可爱][可爱]”

很高兴她说的是“这样的你” ,而不是“你这样的” 。

邓总的妹子刚来深圳,陪着他们上午逛街,下午唱歌,晚上看电影“速度与激情8”,电影还不错的,不过感觉没前几部好看呢。

雪舞今天待公司不能练琴,随便聊了聊。得知,她有自己的公司,才21岁。真的厉害。她师傅也是某大公司的项目经理……我什么时候勾搭上了这么多老板,他们都好厉害…… 她出去放纵了,泡温泉,按摩,陪她聊天到4点20……

去教授家玩,梅子又给我准备了一袋护肤用品,真的太好了!

最终我还是拒绝了即构科技的职位,老实说,很纠结,很不甘心。

更新了iOS到10.3.2beta2,终于又能继续用shadowrocket了……

嗯,从今天晚上起,我就要天天督促雪舞弹琴了。 “哇,你这签名酷毙了” “哪句?” “你应该静心地学习了,小桃子。” 实际上,“小桃子”是只有她这样叫我的,于是这句话像是她说的。

QQ天气预报说未来一周有大雨持续,雪舞说她有男朋友了,嗯……天有不测风云。

啊,为什么我一发言雪舞就出来了,是不是她也特别关注我了[坏笑]? 我说出来放纵,结果她竟然冒出一句“我男朋友不在”……

我的智商是真不够用,时常被嘲讽:“真假性这种东西你都分不清,以你的智商,还需要多磨练磨练。”。

六点半,到即构科技面试了。 有三个技术面 + 一个HR + Boss。 老板出去谈事事,故多等了一会儿,吃了点饼干。 一直到十点十分钟才面试结束,崩溃。 面试当时就得知结果被录用了,老板说马上就发ofr,不过hr已经下班了。 非常郁闷的是,我接受了新工作,但是没有加工资加工资啊啊啊,哪有一分不涨就被挖走的?哭。

今晚发生一些奇怪的事:大海竟然知道我的真名;雪舞说我们是老乡,然后泗草竟然加我为好友。没搞懂是为什么。

injoe 把我推荐给了前腾讯同事的一家创业公司,打算周五过去聊聊。

删除了一堆的娱乐软件,像是斗鱼,虎牙,内涵段子。。。感觉管不住自己,要崩溃了,再看直播,浪费了太多时间。

雪舞啊雪舞,你不该跟我说“我爱你”的,搞得我心生涟漪,都没心情做事情了。

“好吧,你们单身,我要谈恋爱。”,雪舞。

本来是来看花的,结果因为门票比较贵(35),在门外看也没几朵花,而且网上评论非常不好,所以照了个像就准备撤了。

第一次在海边露营,面朝大海……吃了最贵的晚餐,上了最贵的洗手间。

到达目的地。

“师傅,大海兄,爱哥哥,小桃子,我爱你们” 愚人节的晚上,雪舞说了这句话。 一个是她的师傅,一个是她的师兄,一个是她的爱哥哥,只有我小桃子对她来说是最……的,而我自私地认为这句话是对我说的。她说她不过愚人节,她说她是真爱。她师傅和爱哥哥都回复了同样的话,除去大海,就我没有回应,我是不是认真了。 愚人节当天凌晨我俩随便聊聊人生聊了两个小时,我觉得挺好的,她好像也懂得一个人说晚,另一个人说安是什么意思似的。我挺喜欢她这样的女孩子,不知道有没有缘份。嗯,顺其自然吧,对了,现在正在去玩的车上。

没带伞,借公司一女生的伞,发现这伞,这伞,好小好小,圆圆的。,,

买了一套四件套,准备舒舒服服地睡个好觉。嗯。。。特别的是还有一人说晚,对方说安。

烤肉走起。

Uganda,发音为 ju,但中文去翻译为乌。 见皇家特工秘密服务9分48秒。

和几个好朋友聊天喝酒的感觉真好。

办完了入职手续,正式加入QH公司。 需要学习 C#/WPF。 公司管理好严,竟然限制使用部分外网,不能看视频,有限地使用QQ/微信。非常好奇的是竟然无法翻墙,我的 SS 不能用,怎么做到的?后来通过 ssh -D 突破了。 新公司制度严了好多,除了上班没什么其它事做,所以几乎在直坐在座位上,无聊。

去新公司报道了,好久好久没有这么早起床上班,表示好多人。

混了几年 StackOverflow,终于有 16 声望值了(至少 15 才能发起评论,赞同别人的回答)。[尴尬]

正式离职了,迅雷再见了。

在公司的最后一顿午餐,由老员工杨竟请的,巴陵会馆。

傻逼一样的 Windows 控制面板,不能同时卸载多个程序。结果因为其中一个程序不知道为何没有退出,导致本次会话都无法再卸载了。

看周董的MV,浏览到了他的facebook,想关注下,于是注册了个帐号:https://www.facebook.com/urtaome,我记得之前FB是不让大陆用户注册的(手机也验证不过),不过这次竟然顺利注册成功了。

10分钟做完了入职体检报告,内科只用了5秒钟。

提交了正式离职申请。

突然有了学习 iOS 开发的想法。

新公司要求我在下周四就要入职,不然可能就没了。我靠,但我至少要一周才能完成交接的啊,不要这么搞我嘛,找个工作不容易唉。

早上刚起来,就接到了 HR 姐姐的电话,说我被录用了,很开心,终于可以跟迅雷说拜拜了。

生化危机:终章(3D)

塘朗山一日游。

能完整地弹梦中的婚礼了,八度那里练了很久,终于克服这个问题了。

创建了我的第一条 gist:https://gist.github.com/movsb/d76ca744a7328dac61b4ccaf947a5a5b

公司的员工开始用页面写桌面了,不过你们竟然还在讨论 DreamWeaver!!!我的天!

最近在七的引导下,又开始了研究FC,给 fceux 增加了外部端口映射,大大增强了原有 FC硬件的功能。

第一次使用 zlib, libzip,折腾了一下午,没编译成功。后来一气之下,重建项目,添加所有源代码文件,解决无数错误,最后直接编译成了一个 exe 文件,经测试,工作正常。

会弹梦中的婚礼跨八度前面的部分了,第一次能左右手结合得这么流畅,值得记念。另外,段老板竟然偷偷地在上周天买了一个电子琴!

他们问我多少岁了,我说 25,结果他们都羡慕我好年轻。

南澳杨梅坑一日自驾游。

第一次在肯德基吃早餐。

突然想到一个不错的域名,在 Godaddy 上查了一下可用,然后马上买下来了:http://urtao.me/

真的开始投递简历了,再拖要死了。。。

从 blessing studio 那里了解到了 stackedit.io,准备试用一下,毕竟可以导出到 github,比较方便同步编辑。虽然很早之前就了解到作业部落,但是功能偏少,不支持同步,就一直没有打算使用,还是一直手写的 HTML。另外一点就是有些不放心。

电脑和在学校的时候比起来速度慢了不少,不知道为什么。于是整理了一下硬盘,删除了收藏多年的近百部大片,腾出了100多G的空间。

看过的第一篇关于函数式编程的文章:http://www.ruanyifeng.com/blog/2017/02/fp-tutorial.html

西门剑姬1-20大翻盘,33/3/9,实在佩服。

第一次知道 CreateWindowEx 的窗口类名可以是 GUID,https://www.codeproject.com/Articles/18417/Use-an-ActiveX-control-in-your-Win-Project-witho

QQ为了版权不再支持保存自带的QQ表情保存到本地gif,可以保存,但格式成了png,不会动了。

但我偶然发现,把图片拖动到火狐浏览器中打开时,图片竟然动起来了!png竟然动起来了!我貌似发现了什么!!!拖动到谷歌浏览器以及IE/EDGE中都不会动。

我以为只是简单地把扩展名改变了,但是查看了下十六进制内容,格式是PNG没错,但火狐是怎么动起来的呢。。。我得仔细研究研究。。。

研究发现,使用的是 APNG(Animated PNG graphics)

某些人呢,就是这么娇情,人家全部都在等他,他却不慌不忙地一边玩手机一边吃饭。

时过境迁,物是人非。最近有几个个星期没有进钢琴群聊天了,突然发现鸟尾在上周六的时候竟然被妖狐给随意踢出群了。还好有一个小号在里面,翻了好久的聊天记录才找到线索。突然有点怀念之前的时光,毕竟少有的几个有共同语言的人。

新历26周岁生日,好快。

东莞松山湖自驾游。,。

由于各种原因,钢琴练习卡在拜厄第58首那里卡了两个月,最近又开始练习了。

dy同事办完离职手续走了,去杭州了。

在PCQQ部门面了3面,整体来说不算差。结果由于名额没有了,简历就被转到了某游戏安全部门,面到第2面的时候挂了。于是,去腾讯无望了。 回家的公交车上竟然遇到前同事zyy,话说她什么时候离职的我都不知道。。。

没能得到期望的公司的工作,差不多是时候回家了,该对深圳说拜拜了。

还是应该每天都至少写一点代码(看了阮一峰的Github,发现只有一天没有提交),好好学习。

一不小心坐过站了了了了了。。。。

第1次接触字典树(Trie)这种数据结构。

竟然是第1个来公司的……新年好。

新版的 iOS 10.x 系统在系统语言为英文的状态下终于也可以显示农历等特定于中国的信息了,真好!我一直认为,语言跟区域是两个不同的东西,不应相互受到影响。然后不巧的是,系统的电话薄功能仍然不能识别中文来排序,中文姓名全部归属于“#”分类,这是个坑(因为在系统为中文时显示正常)!

第1次编译64位版本程序。。。

终于能完整地弹《夜的钢琴曲五》了。

生日快乐!🎂

Clover今天的更新已经在最下方持续展示广告,感觉差不多到卸载的时候了。。

开启《拜厄》之旅~~~😀

国庆整整10天没有练琴,没有写代码。。蓝瘦,香菇,,,

昨晚把“贝加尔湖畔”左右手同时弹学会了,第1次能达到这么好的效果。可是,今早起来却发现,手好生。。。🙄

会弹“小幸运” 了。,。

公交车上,对面坐着几个美女妹子,然后一大叔一上车“见势不对”就问几位妹子:这是 M209 吗?这一扯就扯到了他下车。。。这位大叔,好样的,我应该多向你学习学习。

会弹“梦中的婚礼”的主旋律了。

我手机屏幕背光调得很暗,同事说那样容易近视。还是第1次有人跟我这样提起,我相信了。因为我近视了,他没有。

工作环境的 Visual Studio 已全部切换到 Visual Studio 2015 Community,2013 已卸载,所以,我的所有项目都会跟着更新。

最近好忙,超过半个月没有写文章了。其实这不是一个好的理由:如果你没有时间去做一件事,那么当你有时间了,你也不会去做。

心,是要受了多大的委屈,才会,闹点小情绪。

Git for Windows 的终端已经不再使用 CMD 了,换成了 Mintty。终于丢弃了 shit 一样的 cmd。改个字体比登天还难。就说你有何用。

接下来一个月搞COM,估计得搞趴。。。

被一个脏矩形折腾了3个小时,擦。。。。。。。。。

有一股去掉文章分类功能的冲动,只保留标签!

QQ域名邮箱出问题了,博客评论得不到回复通知。

学习 SVN 简直就是浪费生命。

早上8点出发,晚上8点到家,骑了整整一天的车,爬了两次山,600米高度,累得不要不要的。

给笔记本除了一次尘后,多出了 15 颗螺丝钉。

启用新的二级域名:https://repo.twofei.com,是一个 GIT 仓库,用于存放我自己的一些小的代码库。

今天是猴年马月天,那些年许下的愿望都实现了吗?

换位置了,好开心。从八楼南搬到七楼南,拿早餐方便了,睡午觉方便了,拿晚饭方便了。最主要的是……那啥……也方便了。。。

腾讯电脑管家你就一SB,我在用你自家的QQ五笔输入法,你特么却推荐我说98%的人都在用搜狗输入法。

一个8度相隔真大,我差点就要够不着。

经常玩键盘的话,手指是不是会变得又细又长? 我特地量了一下我右手的中指长度: 8.5cm。 哦不对,左手弹和弦,跨度应该更大,不过左手中指长度也一样长:8.5cm。

这几年来,一次次地装 vsftpd,一次次地失败,真被这个鬼搞死了。因为每次都是帮别人装(我自己从来不用 FTP),所以不想仔细去研究,没有仔细去看文档,最终就导致一次次地尝试,然后是一次次地失败。艸,再也不想装FTP。

第一次会弹和弦。

妈蛋,公司一妹子刚才问我是不是坐地铁,可以一起回去(她刚入职的时候一起坐过一次,隔得不是很远,人还不错)。结果正忙着写代码的我突然吐了一句:不用了,我待会儿坐公车回去。。。 顿时傻逼了。。。 这么晚让一个妹子独自回去这样真的好吗。。。活该你没女朋友。

装逼过度:R"((\w+)\s+([^\?\s]+(\?(\w+(=(\w+)?)?)?(&(\w+(=\w+)?))*))\s+(.*)\r?\n(([-\w]+\s*:\s*.*?\s*\r?\n)+)\r?\n)"。

坑了,要把安装包 2600 行的 NSIS 脚本代码改成 C++ 实现。就不该接这活。。。

深圳的暴雨会给人一种世界末日的感觉。

拒绝拖延症。

谷歌跟必应搜索网站标题“陪她去流浪”都排名第一,可百度上连上第1页的名分都没有,你就是个渣,是不是也需要来点竞价排名就能前排了?

程序员不开心了。

《万物死 - 云母逼乐队》

标题:万物死 8-bit

专辑:万物死 8-bit

作者:云母逼乐队

年代:2015

00:00

第一次拍戏,而且还是在公司拍,好紧张的感觉。

Win10预览版有时候会遇到无法打开输入法,你可能需要执行一下“ctfmon”,虽然我一直没能明白它是谁的缩写。

时隔6年,我又重新操起了VB6.0,只为了为RTX写一个插件。

浏览器已经收藏了太多的书签了,准备把它们整理发表成文章并删除一些。

三个同事去研究blink了,而我还在跟新同事一起做业务,悲催。。。

生日礼物大雷鸟没拿到,就因为生日在过年期间,好球坑。另外,今天拿到两个毛都没长的小家伙。。。

为了体验Bash on Ubuntu on Windows, 我tm点了不下10次“检测更新”才收到更新通知,艸,M$你这样真的好吗?

加入公司半年,RTX增加了300+。

一流公司做标准,二流公司做服务,三流公司做产品,四流公司做项目。

QQ终于能区分开农历生日与阳历生日了。另外,星座原来是按照阳历来算的,这样一来,我应该是白羊座,而不是双鱼座,一直搞错了。

深圳回南天屋里墙上湿透了,连显示器上面都有一层水。我差一点就去问房东这是怎么了,囧,原来这是自然现象。

真是美好的一天。

死宅了整整两天。

换了个看起来更加简单的主题。

快20天没向GitHub提交代码了,浑身不自在。。。

回深圳准备上班~~~

祝姐姐、姐夫新婚快乐!

爆竹声中辞旧岁,祝大家新年快乐!

回家家咯~ 深圳明年再见。

居然说错了下车站点,可恶,这可不能爱屋及乌。

《梁静茹 - 情歌》

下午4点才到公司上班……

十三年了,家乡的雪,终究还是下了下来。希望我赶回去的时候还能见着。

恭喜某某飞在工作期间考取了研究生~

真是太堕落了。。。。。。。。。。。。。。

说说现在可以接受评论了。

没想到微软也有五笔输入法,Win10上有,然而可配置率几乎为零,所以几乎没什么用。

新年快乐!

【我的少女时代】

能有幸跟美嘉并肩一起漫步到公司算是今年圣诞最好的礼物了。

第二版如期封包,周五又有饭局了~ :-)

深夜下班,第一次跟网友见面,在腾讯大厦楼下麦当劳请吃了个汉堡。。。[笑抽][笑抽][害羞][害羞]

在重庆生活了这么多年,现在终于算是在重庆安家了。谢谢我远在深圳时在重庆的姐姐、爸妈、三姨等所做的一切,感谢你们。

深圳的天气变化未免也太大了,前几天还穿短袖,现在却要盖厚厚的被子。可怜初来到深圳的我。。。
今晚终于跑到沃尔玛去买了床宽宽的被子,再也不用一个人蜷缩在薄薄的毯子中了。
这一度让我想起高中时我们调侃巴K时的情形:“巴K,昨晚睡得怎么样?”“冷神了”。我差点没笑出声。。。

没想到你竟把我给删了,没想到,没想到,没想到。。。

妈蛋,天天加班,害得我都没时间撸自己的项目了。加这么多班送女朋友么。。。

小雪啊小雪,你什么时候才能真正下下来,你可知道我已经有至少13年没见过你了,来场狂欢吧~~~

你说我是不是又闲了,几句话整了这么个东西出来~~~~~~