一周杂记 in Week 2 Dec 2024
本周(12/09 ~ 12/15)是十二月的第二周,天气已经进入冬季的常规寒冷了。
Life
这周琐碎的事情比较多,所以有些内容会比较简短带过。
#1
周二选择 WFH,中午去健身房跑了个步,回来后上班到快4点然后开车去了红十字医院,打了第二针狂犬疫苗。
于是年度免疫结束,获得了至少6~12个月的免疫期。
再提一嘴,自从有了车之后,生活便利性真的明显提升了 🤣
#2
最近琢磨着给小蛋的窝加一块挡雨板,刚好马总说他装修之后还真剩下一块木板,量了一下尺寸发现配合那个外卖箱窝,真的是天作之合。
于是周二打完疫苗之后先开车到了马总工作的大楼楼下,等着他把木板拿给我;因为这个尺寸电驴真的不太合适,放在车后备箱反而是一点压力没有。
等到周六天气彻底放晴后,扛着木板到了小蛋窝,先把外卖箱顶部的积水给清理了,然后放上木板,再在另一侧放一块石头,防止小蛋哪天飞跃一脚踩在木板一端直接把木板踩飞了。
和前面预估的一样,尺寸非常匹配
除了木板之外,之前买的猫粮也到位了。
因为附近除了小蛋之外还有非常多的流浪猫,而附近的小姐姐们一般只偏爱小蛋(毕竟主动亲人),所以其他流浪猫只能靠阿姨投喂,饥一顿饱一顿。
我这边也增加了猫粮供应之后,预计上能有效缓解这群猫的吃饭问题。
不过饭不是白吃的,后面我会尽可能把这附近的流浪猫都给绝育了。只能说任重道远
#3
组里又有同事 transfer 去 us 了,这次是 Zack 和 Ricardo
周三请同事们一起吃了一顿川遇,给兄弟们践行。
不是说好的一起对抗老张吗,怎么转头都跑去US给老张当狗跟兄弟们做对手盘了 🤡
搞了半天原来就几个老螺丝是小丑
#4
周三时候软考成绩揭晓,Hogan 这次软考终于过了,以后大家就要改口叫王副高了。
于是 Hogan 请群里的几个兄弟们周四晚上吃余阿福火锅,趁着 Ricardo 还没去 US。
周四晚上下班后 Miracle 让我骑着电驴带着他一起去,我觉得也还行吧,就是觉得他有点胖会不会把电驴给弄爆胎了。
没想到真的一语成谶,Miracle 上车后踩错了脚撑,导致轮胎一侧受力有问题,还没骑出两米就爆胎了…
不过还好雅迪有上门支援服务,叫了支援之后等了大概半小时终于把轮胎给换好了,Miracle 为表歉意帮我把换胎的百来块给出了 🤡
赶到店里的时候还好没开吃多久
#5
又到了每月的例行孕检
媳妇儿说周五上午请好假了,那自然我也请假,周五一大早就开车去社区医院陪媳妇儿做孕检。
目前还是比较正常,早期唐筛也没发现异常。
这次媳妇儿开了一些补给和抽了几管血检测中期唐筛之后我们就回家了。
到家后还刚好赶上和组里的 weekly syncup,开完会之后刚好时间合适就送媳妇儿去她单位了。
#6
这周天气降温明显,在书房都感觉双手冰的不行,于是我和媳妇儿纷纷在卧室和书房开启了空调。
书房比较小,所以一开制热升温迅速,湿度也下降明显。于是我终于从柜子里掏出21年买的但是一直没拆封的 SOLEUS 无雾加湿器…
我真的是太懒了…
因为放得太久,遥控器自带的纽扣电池还没电了…还好家里一直备着纽扣电池。
经过半天研究,我发现所谓无雾加湿,就是把挥发机制从超声波雾化换成了内置风扇吹风…🤔
#7
这周把 Darksiders 1: Wrath of War Remastered(暗黑血统1 战神之怒重制版)的普通难度通关了,用 Apocalypse 难度级别开启了二周目
不过这个游戏没有所谓二周目的概念,而且新开存档只能继承深渊铠甲这一件装备,不过这也已经很不错了,因为这个铠甲附带攻击吸血,在这个难度级别下别提多有用了。
目前这个游戏很有希望全成就,估计打完这个难度就全成就了 🤣
#8
本周观影
- 二号陪审员 4/5 东木对于普通人拧巴自我折磨的内心戏真是一贯水准当然也离不开霍尔特这浑然天成的表演。整体下来故事水准在线,庭审戏差一些,但是对于东木自己的收官作来说感觉还是有点差强人意。另:大荧幕上能看到曾经的鲍小强对24粉来说也是个惊喜 XD
- Twisters 看了一半媳妇儿说没意思,看不下去了…等下周我自己找时间看完吧… Orz
Work
#1
CppCon 2022 | Fast C++ by using SIMD Types with Generic Lambdas and Filters - Andrew Drakeford https://www.youtube.com/watch?v=sQvlPHuE9KY&list=PLHTh1InhhwT6c2JNtUiJkaH8YRqzhU7Ag&index=65
- 核心是用他们的 DR3 那个 lib 配合 generic lambda
- 不是做数值计算这块的,太高端了没看懂
CppCon 2022 | New in Visual Studio Code! Clang-Tidy, makefile, CMake, GitHub, & More Marian Luparu, Sinem Akinci https://www.youtube.com/watch?v=iTaOCVzOenM&list=PLHTh1InhhwT6c2JNtUiJkaH8YRqzhU7Ag&index=69
- 介绍最新的 vscode 搭配插件如何提升 C++ 开发体验的
- 这个 talk 中有包含对 CMakePresets 的介绍
CppNow 2024 | Embedded Asynchronous Abstraction C++ - Implementing Senders & Receivers Without an OS - Ben Deane https://www.youtube.com/watch?v=eI5b-q4K9vo&list=PL_AKIMJc4roWVN3DOxmYZVLNaH0pFHts1&index=34
- 先介绍了一下 embeded system programming 有别于普通系统编程,然后讲了一些作者认为适用于 embeded system 的 S&R 实践
- 是话说我觉得 S&R 真的看起来太污染了,写起来看着都觉得麻烦….
CppNow 2024 | Developing Better C++ Code by Isolating Decisions - Michael Okyen https://www.youtube.com/watch?v=UTgxuT2hZY0&list=PL_AKIMJc4roWVN3DOxmYZVLNaH0pFHts1&index=46
- 主要讲 code design,主张将代码中 decision-making 的这部分代码抽离出来,因为这部分代码一般都是核心逻辑,抽离出来之后做 unit testing 就会变得容易的许多,因为涉及 IO 这些外部依赖都抽离掉了
- 而使用 decision-making 联结输入输出的这部分代码称之为 wiring code,这部分通常都可以做的比较简单,没有复杂的逻辑的情况下就可以不用为他们做 ut
- 一个核心事实是,涉及到大量外部依赖的时候想完全 ut 覆盖是很困难的,不管用 test double 还是 mock,如果你的系统是业务系统,这部分工作的收益就非常低
- 这个 talk 的主张还是很和我胃口的
C++ Weekly - Ep 457 - I Read C++ Magazines (So you don’t have to!) https://www.youtube.com/watch?v=TnsPaEmUSL0&t=701s
- 老杂志考古,没事干时随便看看
C++ Weekly - Ep 428 - C++23’s Coroutine Support: std::generator https://www.youtube.com/watch?v=7ZazVQB-RKc
- 介绍了一下 std::generator,写了一个 demo 示范了一下
C++ Weekly - Ep 427 - Simple Generators Without Coroutines https://www.youtube.com/watch?v=F37h3FuA8kM
- 用 ranges 实现的 generator,并且利用了一个 trick:
std::views::iota(0) | std::views::transform(func)
来实现指定函数的 lazy eval - 这个 trick 有点意思,感觉可以学习一下
C++ Weekly - Ep 426 - Lambdas As State Machines https://www.youtube.com/watch?v=fZe7gNgjV4A
- captured (mutable) lambda 可以当作一个带状态机的函数使用
- 这也比较容易理解,底层实现大多都是一个 function object
C++ Weekly - Ep 425 - Using string_view, span, and Pointers Safely! https://www.youtube.com/watch?v=cUvdtLTJeec
- 使用 string_view 需要注意生命周期,最好开 asan 或者用 constexpr 保证没有UB
In C++, is empty() faster than comparing the size with zero? https://lemire.me/blog/2021/10/26/in-c-is-empty-faster-than-comparing-the-size-with-zero/
- 标准库现在要求 size() 都要是常数时间了,所以 size() 和 empty() 在标准库容器实现中编译器产生的代码几乎是一致的没有性能差异
- 但是从语义角度上说,empty() 语义更加明确并且可以更容易地实现更高效
Moves in Returns https://artificial-mind.net/blog/2021/10/23/return-moves
- 探讨了什么时候会出发 guaranteed copy elision,RVO/NRVO,return-moves
- 感觉还是非常有价值的,拿不准的时候可以拿里面的 sample 放到对应的编译器里试一下
- 因为编译器升级之后有些 case 会有优化,之前不能 copy elision 的现在可以了
Stringy Templates https://vector-of-bool.github.io/2021/10/22/string-templates.html
- 这篇质量颇高
- C++ 20 放松 non-type template argument 限制后,搭配 deduction guides for non-type template argument 可以很直观的实现 fixed_string 这种字符串常量作为模板参数的类型
- 并且基于 fixed_string 可以实现出 named type,从 string literal → C++ type 转换,这一步是一些 compile-time reflection impl 的基础
Row Polymorphism in C++20 https://caddi.tech/archives/2846
- 行文写的不知道是啥玩意儿…你们日本人能不能好好说话
- 大体上就是用 concepts / relaxed non-type template arguments(fixed_string) 模拟了一个特性,然后做成了lib https://github.com/loliGothicK/Mitama
- 我连 TS 写的 demo 都没看懂,都不知道这个库到底解决了啥问题/痛点
Automatic Return Type (C++11/14/20) https://www.modernescpp.com/index.php/automatic-return-type-c-11-14-20/
- 这篇略水
- 上下文是函数模板参数都是模板,返回类型由参数决定,咋定呢,给的方案是 type traits + decltype + concept
#2
clang-tidy 新版本增加了对 enum value 的检查,导致 pistache 这种用 enum/enum class 做 bit-mask flags 的会被 tidy complain
并且因为相关的 flags 代码是 template 被 inline 了导致 header-filter 看起来似乎没有效果
Ref: https://github.com/llvm/llvm-project/issues/76208
周五的时候发现 absl/flat_hash_map 也会触发这个 tidy warning,最后没办法直接把这个 rule disable 了,不然太蛋疼了
#3
这周事情比较多,所以就写了一点点 http router 的相关代码(其实就一个还没有10行的函数,还不包含单元测试…)
下周继续吧
对了,我是不是连续两周没看书了? 😂
好了这周就这样,下周见