本周(02/03 ~ 02/09)是2月份第一周,舒服幸福的春节假期也马上结束了,又要回到惨无人道的工作中去 🤷‍♂️

Life

#1

本周第一天初六,中午在家附近吃了一碗我那份不怎么好吃的清真牛肉面之后就带着媳妇儿开着车跑到西湖文化广场看哪吒2.

PS:我那份牛肉面是真的不咋地,面估计放了一段时间了有点沱,最后一口西红柿还是馊的,还好咬了一口就直接给吐了

先说电影吧,哪吒1是好电影,但是剧本核心是个人成长和家庭,对我来说只能算是一般般符合口味;而2的剧本就成人向的多,差不多是黑神话-哪吒的方向了,非常符合我的口味。

而且2从动作设计,剧本流畅度到人物角色几乎没有什么缺点,绝对算是国产神作。这里也希望制作团队继续努力,带给大家更好的续作。

另外春节档其他电影实在太不能打了,哪吒2的票房直接接连创纪录,太猛了。

另外一个小插曲:在西湖文化广场停车时候找不到车位,转了半天发现还有个“内场”,结果在那个内场停车时候发现有部分区域的地面瓷砖特么是没有的,导致停车轮胎刮在瓷砖上把轮胎蹭破皮了,非常影响心情。

好在事后检查了一下感觉只是蹭了一点皮,没有伤到里面。先时刻监控着,等到4月份满一周年了再去检查看看是不是要换一个轮胎好了。

#2

初六看完电影后和媳妇儿到了西溪银泰的迪卡侬,因为我打算买一双新的运动鞋。

主要还是因为之前每天穿的那双李宁运动鞋已经臭到可以腌老坛酸菜了…

在迪卡侬调了一双尺寸合适的公路跑鞋,399,付完钱就回家了。第二天上午意外发现这鞋垫怎么不是贴合底部,反而有点中空鼓起的感觉。

以为是质量问题,遂开车又回到了迪卡侬。

一番交涉后发现这居然特么是这一款的 by design…确实穿进脚之后不会有任何不适,但是吧,就是给人一种莫名其妙的感觉。

不过发现黑色款的有货了,直接换了一双。免得早前白色款穿几天就脏了。

另外我还特意买了一双记忆海绵鞋垫,以备不时之需。

不得不说有车还是方便的,大冷天要是骑着电驴去退换货我还是觉得很艰难的,尤其家里到西溪银泰有差不多三站地铁好几公里…

#3

不知道是不是因为别人初八都要上班而我还在继续假期,老天觉得我太过份了,所以初八凌晨让我做了一个梦,梦见自己在飙车,然后快点撞到墙了脚往死里踩刹车。

接着就脚抽筋疼醒了,而且还是两条腿都抽筋了…

疼的我半夜迷迷糊糊醒来喊好痛啊,老婆快帮我…全然忘了媳妇儿在主卧睡觉

早上醒来摸一摸小腿还能感觉到抽筋的疼痛后遗症,赶紧吃了点早饭端了杯咖啡做到阳台晒太阳 🫠

晒了半小时都快出汗了然后想起今天该去理发了

于是别人上工第一天,我去理了个发,终于清理掉了耳朵两边的狗啃 style

#4

这周再次尝试了一把 darksiders: genesis 的 leviathan landing 不出意外的跳了好久第一关都没过。

于是一怒之下下了 fling trainer 开了无限二段跳,然后终于把这个鬼成就给拿了。

最蛋疼的都过了,剩下用 apocalyptic diffculty 打通所有关卡反而不是特别难了,所以就很顺利的把游戏全成就解锁了。

下一个游戏估计是 hades 或者 the walking dead,主要是休闲为主,该收收心到正事上了。

#5

这周历史性的跑了15KM,并且配速控制在 10.1kmh+

唯一不足之处是脚上跑出了三个水泡,感觉可能要研究一下是不是袜子不透气还是鞋子不透气

#6

周日开车带着媳妇儿去了家边上的印象城吃了一席地,终于又开始吃大餐了,好开心啊

这次一席地的水准终于恢复正常了,而且印象城停车出人意料的方便,让人开心。

并且知道了一个 trick,直接去沃尔玛买瓶水凭小票就可以停俩小时车 🫡

#7

本周观影

  • 哪吒之魔童闹海 5/5 这剧本冲着黑神话-哪吒就去了啊,叙事/人物/画面/音乐几乎没有短板,最后“成你个鸟仙”暴打老登也没有违和感。这回真的是伟大无需多言了
  • 铁血战士:狩猎 Prey 4/5 这不比那些只会哔哔哔的女权片好多了
  • 繁花 继续中,不愧是墨镜B王指导的,确实牛逼

Work

#1

C++ Templates 2nd | 26. Discriminated Unions

  • 展示了 std::variant 应该如何实现的一些内容,不明觉厉

CppCon 2022 | The Dark Corner of STL in Cpp: MinMax Algorithms - Šimon Tóth https://www.youtube.com/watch?v=jBeTvNgW25M&list=PLHTh1InhhwT6c2JNtUiJkaH8YRqzhU7Ag&index=80

  • 这个talk虽然短但是内容精华啊
  • 因为接口设计的问题,std::min/std::max/std::minmax 这些函数返回类型是 reference 或者 pair of reference,如果他们的参数有一个是 temporary,那么在用他们的引用返回值就是 dangling access 了…
  • min/max 稍好一些因为可以直接用 auto 来走值类型拷贝一下,minmax 这个除非手动 pair<T, T> 否则里面包含的就是 dangling reference
  • 这个坑之前真的没注意到,看了一下 cppreference 确实写了

CppCon 2022 | C++ Package Manager - C++ Dependencies Don’t Have To Be Painful! - Augustin Popa https://www.youtube.com/watch?v=Ae9EePOIouU&list=PLHTh1InhhwT6c2JNtUiJkaH8YRqzhU7Ag&index=85

  • 简单介绍了一下 C++ 目前可用的包管理方式,然后比较理论侧的介绍了 vcpkg 的理念和做法
  • 其实我觉得这个 talk 应该分成上下两个,再加一个下篇,走个实战

CppCon 2022 | Pragmatic Simplicity - Actionable Guidelines To Tame Cpp Complexity - Vittorio Romeo https://www.youtube.com/watch?v=3eH7JRgLnG8&list=PLHTh1InhhwT6c2JNtUiJkaH8YRqzhU7Ag&index=86

  • 这个 talk 质量不错
  • talk 主旨有两个:
    1. 如果实现同一个功能点有多个方式,选 most limited 的那个,不容易掉坑,因为越灵活的东西约束越少越容易踩坑,比如能用 lock_guard 就别用 scoped_lock;如果 push_back 比起 emplace_back 没有劣势就用前者 .etc
    2. 有些特性不是用得越多越好,比如各种 attributes,final,noexcept,auto, trailing return type 这个;用这个 feature 一定要有足够的 intention

CppNow 2024 | Implementing Ranges and Views in C++ - Roi Barkan https://www.youtube.com/watch?v=ngaty13aE9M&list=PL_AKIMJc4roWVN3DOxmYZVLNaH0pFHts1&index=53

  • 核心是如何利用并扩展 ranges 那坨;range adaptor 占比不少
  • 我目前对 ranges 用的较少,先走马观花的留个印象 😂

CppNow 2024 | C++ is a Metacompiler - Daniel Nikpayuk https://www.youtube.com/watch?v=IgNSBXypwrY&list=PL_AKIMJc4roWVN3DOxmYZVLNaH0pFHts1&index=56

  • 话题太高端了,作者做了一个 dsl interpreter library

C++ Weekly - Ep 398 - C++23’s zip_view https://www.youtube.com/watch?v=MVXGdwREo_E

  • zip_view 支持多个 ranges 的元素联结,返回的是一个 tuple,每个 element 对应一个 range 的 element 的 reference
  • 返回的长度取决于最短的那个 range

C++ Weekly - Ep 396 - emplace vs emplace_hint! What’s the difference? https://www.youtube.com/watch?v=hW4NJF4RLnE

  • 讲了各个容器的 emplace,这个函数能够从参数直接构造对象,避免创建再拷贝/移动的过程
  • 另外 emplace_hint 在 hint 有效的情况下,性能提升拔群;并且 libstdc++ 中普通 emplace 内部就是先找合适的 iterator,然后调用 emplace_hint

C++ Weekly Ep 465 - C++26’s std::span Over initializer_list https://www.youtube.com/watch?v=hWw_P6FUN_E

  • C++ 26 开始可以直接用 {} 初始化参数给 std::span 了
  • 在此之前需要手动构造一个 std::array 过渡一下

C++ Weekly - Ep 395 - How Much is 100,000 Subscribers Worth? https://www.youtube.com/watch?v=wLXnH0Z08EU

  • 做技术频道还是不太能挣钱啊,100K的订阅平均每个 video 大概500的 views,算下来一个月就200刀不到

C++ Weekly - Ep 393 - C++23’s std::unreachable https://www.youtube.com/watch?v=ohMyb4jPIAQ

  • 辅助编译器优化,但是判断不对的话就是UB
  • 最大作用是可以替代以前人肉 assert(false)

Please repeat yourself: The noexcept(noexcept(…)) idiom https://devblogs.microsoft.com/oldnewthing/20220408-00/?p=106438

  • 经典的 idiom noexcept(noexcept(T(std::forward<Args>(args)...)))
  • 第一个 noexcept 用作 specifier 第二个 noexcept 可以让编译器判定表达式是否是 no-throw,这个判定是编译期的,表达式不会真的被 evaluate

What’s up with std::piecewise_construct and std::forward_as_tuple? https://devblogs.microsoft.com/oldnewthing/20220428-00/?p=106540

  • std::forward_as_tuple 可以把不定/多个参数打包成一个 tuple 方便传递
  • std::piecewise_construct 表示构造时把这个 tuple unpack,从每个 element 构造

Shocking Examples of Undefined Behaviour https://mohitmv.github.io/blog/Shocking-Undefined-Behaviour-In-Action/

  • 讲了两个因为UB被编译器优化出奇葩行为的例子

Dangerous Usage of GTest’s EXPECT Macro https://mohitmv.github.io/blog/Dangerous_use_of_gtest_expect_macro/

  • 大致是说如果有几个 EXPECT_* 连着用,并且因为UB可能会导致某些 EXPECT_ 宏的条件被编译器直接优化调换掉,导致 always succeeds
  • 我有点好奇这有 PoC 吗?
  • 不过对于前置条件的测试判定,用 ASSERT_ 确实没错

#2

最近突然想把之前的 anvil CMake init 相关的东西整一整,顺带拿 esl 作为范例再 tweak 一下一些处理

节后估计可以开始动起来


好了这周就这样,下周见