本周(07/01 ~ 07/07)是七月份的第一周,梅雨季结束之后直接进入酷暑,每天气温都是30℃以上,白天大部分甚至都在35℃以上…

Life

#1

因为周一还在下雨,所以周二上午定着太阳把电驴推到了店里修电瓶。

老板一顿操作猛如虎,发现没啥效果,最后直接给我换了一个“看起来像新的”的电瓶,然后一直强调给我说不要用到电量低于20%,二十多的电就要冲,低电量使用容易引发电瓶的电路保护。

然后店里这个电路保护不太好 override 只能寄回去。

另外有个插曲,周三晚上把电瓶充满后,周四上午发现启动后仪表盘居然不现实电池容量了…

本来想晚上再去店里修一下结果等到下班之后这问题有自己好了…就很离谱

#2

周二的时候物业管家姐姐问我有没有意向领养小猫咪,她在小区捡到了一直蓝白英短,好几天了也没人上门报失,问了业务也没人说丢了。

我说媳妇儿不让养 Orz 但是可以帮忙问一下公司同事;再得知小猫不怎么吃猫粮之后我说家里还有猫罐头,我给你几个看看小猫是不是有点挑食。

花了十分钟从办公室回到家后拿上罐头到物业办公楼,发现这小猫确实有点憨…开了一个罐头这猫立马蹭过来吃了起来,看来确实是挑食

周三晚上的时候管家姐姐说找到领养了,她同事的男朋友要收养,猫包猫砂盆都准备好了;我一听这好呀,小家伙也不用流浪了直接有家咯

#3

周日不明原因发烧了,非常难受,但是又比之前新冠和甲流好一些。

测了两个试剂板,发现都不是…

#4

本周观影

  • 克莱门蒂娜 Clementina 3/5 感觉是近年来看过比较独特的一类电影,生活化慢节奏叙事,没有故事主线,就像那种日常DV摄影的作品,BGM 有点意思

Work

#1

本周学习

C++ Templates 2nd | 6. Move Semantics and enable_if<>

  • 标准移动 + 完美转发,以及使用 SFINAE(enable_if)来限制模板参数类型
  • 最后提了一嘴 concepts

C++ Templates 2nd | 7. By Value or by Reference?

  • 这个问题确实值得一章
  • 没有特殊情况其实建议 pass by value,因为可以自动 decay 来适应 string literal 和 raw array
  • 真有性能要求再考虑 pass by reference,但是要注意不会自动 decay 的问题
  • forward reference 的时候要小心 T 被推导为 reference 如果恰好返回类型又是 T 就有可能有坑,可以手动 remove_reference trait 或者干脆直接用 auto 作为返回类型来 always decay

CppCon 2021 | How Can Package Managers Handle ABI (In)compatibility in C++? - Todd Gamblin

  • C++ 包管理会面临的问题(ABI兼容性,多语言混编,依赖间接依赖的冲突)
  • conan 的一些做法
  • spack 的一些做法,以及 SAT 和 ASP 两种作为 solver 算法的优缺点(作者是 spack 的开发人员之一)

CppCon 2021 | Units Libraries and Autonomous Vehicles: Lessons from the Trenches - Chip Hogg

  • 基于类型的 units library 对业务代码的促进作用(例子又是各种长度的量纲计算…)

CppCon 2021 | The Unit Tests Strike Back: Testing the Hard Parts - Dave Steffen

  • 如何处理 flaky test, non-hermetic tests
  • 处理 legacy code,举例某个 vector 没有暴露出 capacity 函数,如何尽量减少影响下增加对 capacity 的测试(一堆骚操作)
  • code is hard to test because of its interface and general non-testable-ness

Markus Klemm “C++20 Coroutines, with Boost ASIO in production: Frightening but awesome” https://www.youtube.com/watch?v=RBldGKfLb9I

  • 类似之前讲 asio + coroutine 网络编程的 talk,不过那个 talk 讲的更加具体一些,例子也基本都是 tcp server programming 部分的

Create a future with coroutine in C++ https://cpp-rendering.io/create-a-future-using-coroutine/

  • 这篇 post 比 moderncpp 那个 resume work on another thread 更完善一点,尤其在 awaiter 的展示手法上
  • future(awaitable) → co_await on future → awaiter(提供 await_ 三件套函数)

All C++20 core language features with examples https://oleksandrkvl.github.io/2021/04/02/cpp-20-overview.html

  • feature 一览,写的比较 overview

Rounding floating point numbers and constexpr https://vorbrodt.blog/2021/04/04/rounding-floating-point-numbers-and-constexpr/

  • 给定一个浮点数和需要保留的精度位数,将浮点数 round 到这个精度
  • 文末有个打表法,吊炸天

#2

最近在给公司的项目写一个通用的 http rpc client,但是对于某些对应 HTTP GET 请求的 request struct 没法序列化成 JSON,相反需要转换为 query string 完成请求。

所以就想着参照之前给 nlohmann json 做的 JSON SERDE 宏,做一套类似的生成 cpr::Parameters 的宏

代码不复杂,并且因为字段类型强制都是 string,所以需要做的 trick 少了一些 https://github.com/kingsamchen/Eureka/pull/24

PS:如果你的项目用 fmtlib 的话,stringify 直接用 fmt::to_string() 就行了

PPS:这次又一次遇到了 MSVC 下 __VA_ARGS__ 展开不正确的问题,这次 mark 一下免得以后忘了


好了这周就这样,下周见