12.23 - 想说说为什么活着

现在是周六的凌晨四点半,不是刚醒,也不是熬,可能是因为昨天很晚吃的炸鸡和可乐。我是过了一点睡不着,就很难睡着了,不过早就熟悉了四点睡不着这件事情。躺在床上睡不着的时候,我的大脑会异常活跃,会有很多不着调的想法。这是第一次记录下来。

这次想的是为什么活着,或者说,是什么让我还活着,又是什么可以让我继续活下去。很早就知道哲学三问, “我是谁?我从哪里来?我将到哪里?” 只不过从未认真思考过,今天有那么几小时好好想了下。

讨好自己。而立之年,回想过去三十年,自己并未活得明白,几乎是处于愚昧、没有独立思考能力的状态,一路糊糊涂涂、惶惶恐恐走过来。在最有创造力的年纪却又唯唯诺诺,心智不够成熟却又完全暴露在外。既然活着,就应该让自己处于一种自在、愉悦的状态,保护好自己的心智,于纷纷扰扰设立一个保护区,避免来自生活中烦恼的直接冲击。尽可能的给自己一些空间,做些自己喜欢的事情,我把这称作讨好自己。

变得美好。有些事情,让我明白,只有学会爱自己,才能真的做到爱别人。爱是一种能力,而喜欢是一种意愿,这是爱和喜欢的区别。想爱和会爱又完全是两回事,很多时候我们冠以爱之名,却又做着伤害那个你在乎的人的事。如果不知道如何正确地爱,又怎么能爱好一个人。学会如何去爱,从爱好自己开始,这也是爱你的人所期望的。所以,爱是什么呢?爱,是你希望某些事物能变得更美好,可以是自己、可以是至亲、可以是那些打个照面的陌生人,也可以一猫一狗、一草一木。一个有能力去爱的自己,就是美好的。爱自己,就是让自己自在、愉悦、健康,我把这称作变得美好。

像花儿一样绽放。当我们学会让自己保持自在、愉悦的状态,学会如何去爱之后,就有了能力去承担属于自己的那份责任。如果仍有盈余,就像花儿一样,绽放。

最后,但愿社会的进步可以让更多人能停一下思考如何更好地活着,但愿自己能活得如愿。

CUDA - 版本及环境搭建

CUDA (Compute Unified Device Architecture)是英伟达开发的并行计算平台,为使用 GPU 加速的程序提供开发环境(当前仅针对英伟达设备)。

API

CUDA 提供两层 API,驱动(Driver) API 及运行时(Runtime) API。Runtime API 是基于 Driver API 编写的、使用更为简便的 API。

Compute Capability

英伟达每款 GPU 会有一个叫做 Compute Capability 的版本号,用于标识设备的计算平台兼容性。其直译 计算能力 略有歧义,并非代表设备的计算性能。

12.11 - 看到一个关于房地产的视频

刷到一个关于房地产的 视频,由政治局会议里面的 先立后破 得出中央定调、明年房地产稳了,在评论区说了下我的看法。

评论

先立后破这个大家都说了。不过不管是先立后破还是先破后立,问题的关键是破的是什么,立的又是什么,up 主的破理解成打破常规去干,和前八个字相违背,大放水紧跟适度通胀也自相矛盾。

首先提一下,房地产占 GDP 的比重在 7% 左右,广义占比 13%,大家可以看下中央人民政府关于政治局会议的文章 https://www.gov.cn/yaowen/liebiao/202312/content_6919152.htm,里面只字未提房地产。

再来看下 “先立后破” 这一段。

会议指出,明年要坚持稳中求进、以进促稳、先立后破 … 积极的财政政策要 … 提质增效 … 要以科技创新引领现代化产业体系建设 … 要着力扩大国内需求 … 形成消费和投资相互促进的良性循环 … 要深化重点领域改革 … 巩固外贸外资基本盘 … 防范化解重点领域风险…

再看下上一段。

完整、准确、全面贯彻新发展理念 … 新发展格局 … 高质量发展 … 推动高水平科技自立自强 … 新型城镇化和乡村全面振兴 … 推动经济实现质的有效提升和量的合理增长 …

再说下我的看法,先立后破是要转变发展理念和经济格局,立的是新发展理念和格局。立的是科技创新、扩大内需、新型城镇化、乡村振兴,破的是重点领域的风险,这个终点领域不用我说是啥了吧。至于积极的财政政策,要加力且提质增效,是要盘活银行里的钱,提质不会是让风险再大点吧。

如果 up 主真的觉得 “先立后破” 是给房地产解套、大放水,那为啥不信政治局一直说的房住不炒,以及房地产的供需关系已经发生转变,还要刻舟求剑拿 14 年来做对比呢。

再说下我对房地产的看法,房住不炒、供需转变、保障性住房解决大城市突出的低收入群体和新市民的住房问题,化解重点领域风险,还能大放水往里面灌?崩盘可能性不大,再提炒房我无法理解。

最后

房地产崩盘的可能性不大,跌、平、微涨说不好,如果真的再大涨,那就涨吧。

rapidjson - usage

加载

从字符串加载

1
2
3
4
5
6
7
8
9
10
11
#include "rapidjson/document.h"

// 加载 Object
rapidjson::Document doc;
doc.SetObject();
doc.Parse(data.c_str()); // data: std::string

// 加载 Array
rapidjson::Document arr;
arr.SetArray();
arr.Parse(data.c_str()); // data: std::string

Type

1
2
3
4
5
6
7
kNullType = 0,      //!< null
kFalseType = 1, //!< false
kTrueType = 2, //!< true
kObjectType = 3, //!< object
kArrayType = 4, //!< array
kStringType = 5, //!< string
kNumberType = 6 //!< number

Object

1
2
3
4
5
// 查找元素
auto it = doc.FindMember("field");
if (it == doc.MemberEnd()) ... // 判断是否存在
// 遍历元素
for (auto it = doc.MemberBegin(); it != doc.MemberEnd(); ++it) ...

Array

1
2
3
4
5
6
7
8
9
10
// 判断是否为空
arr.Empty();

// 遍历
for (auto it = arr.Begin(); it != arr.End(); ++it)

// 取第一个
auto e = arr.Begin();
e.GetObject(); // 作为 Object, e.GetObject().FindMember("field") 查找元素
e.GetString(); // 作为 String

Value

创建

1
2
3
4
5
6
7
8
9
// Object Value
rapidjson::Value v(rapidjson::kObjectType);
// Array Value
rapidjson::Value v(rapidjson::kArrayType);
// String Value
rapidjson::Value v("string_value");
// Number Value
rapidjson::Value v(1);
rapidjson::Value v(1.1);

c++ style guide

风格指南

Google C++ Style Guide

工程中使用统一代码风格

.clang-format

安装工具

1
brew install clang-format

导出指定格式的 .clang-format 配置文件

1
2
clang-format -style=Google -dump-config > .clang-format
clang-format -style=llvm -dump-config > .clang-format

格式化文件

1
2
3
4
5
6
7
8
$ cat t.cpp
#include "iostream"
int main() {
return 0;
}
$ clang-format -style=Google t.cpp
#include "iostream"
int main() { return 0; }

Inplace 格式化文件

1
$ clang-format -style=Google -i t.cpp

在 IDE 中使用 .clang-format

  • CLion 可以识别并应用项目根目录下的 .clang-format 文件,如果没有的话,可以点击右下角的 spaces 信息框,再点击 Enable ClangFormat

image-20231110182136072

c++ 各标准版本特性

版本说明

WG21(The ISO C++ committee)有严格的时间限制,每 3 年推出一版新的标准。最新的版本信息参考 WG21 官网。每个正式标准确定前,会使用草案名(draft),比如 c++1zc++2a

各版本特性

C++ 20(C++2a)

语言特性

库特性

C++ 17(C++1z)

语言特性

库特性

C++ 14(C++1y)

语言特性

库特性

C++ 11(C++0x / C++1x)

语言特性

库特性

参考

小狗钱钱

当利息降到零,我们的投资回报甚至会更丰厚。你要知道:唯一不变的就是变化。

前言

有了足够的金钱,我们能更有尊严地生活,更好地对待自己和他人。

个人化的经验很难效仿,但最基本的真理却能被普遍运用。

追问我们自己到底想要什么样的人生,这需要勇气。

不是因为困难重重,所以我们心生畏惧,而是因为我们心生畏惧,所以事情变得困难重重。

第一章 一只白色的拉布拉多犬

我也认为金钱不是生命中最重要的东西。可如果时时处处都缺钱,那么钱就变得举足轻重了。

只有你自己真正渴望学习,我才能帮得了你。

第二章 梦想存储罐和梦想相册

不是试一试,而是去行动。所谓尝试,只不过是在为失败提前找借口、为自己找退路。

在行动之前,不要评判。不去想象成功的美好,就不能达成目标。精力集中在哪,哪就会开花结果。只不过,大部分人总是把功夫花在并不喜欢的事情上,而不去想自己真正渴望拥有的东西。

注意到了吗?你往往先找各种理由来证明一件事做不成。

钱的多少并不是最关键的,更重要的是,我们拿钱来做什么。

在你展翅飞翔之前,你就必须相信自己一定能到达目的地。你想象得越多,你的愿望就会变得越发强烈。然后,你就会开始寻找机会去实现愿望。吉雅,机会到处都是,但只有去寻找,才能发现。只有拥有强烈的渴望,才会去寻找。而只有不断地去想象,才会拥有强烈的渴望。

第三章 能挣很多钱的男孩达瑞

你都没试过,却总是先想着行不通,这样肯定不会成功啊。

是否自信决定着你是否敢去做某些事情,如果没有这份自信,你就不会开始去做。而如果不动手去做,就什么也不会发生。

要始终去帮助别人解决问题,才能挣到钱。要把精力始终集中在你知道的、能做到的和拥有的东西上。

第四章 堂哥的致富经

不要总是想那些做不成的事情嘛,你得多想想什么能做成。

不能光指望着一份工作,因为它可能比你预想中更快结束,你得抓紧时间接着去寻找下一个工作机会。

第五章 钱钱以前的主人

这正是很多不富裕的人会犯的错误。他们总是有很多十万火急的事情要做,却没有时间考虑真正重要的问题。

第一,即使遇到了困难和问题,也得实施你的计划。如果事情一切顺利,谁都能完成任务,只有在出现真正的问题时,谁强谁弱才能见分晓。只有少部分人能继续坚定不移地贯彻执行他们的计划。而那些特别富有的人,更是擅长在最困难的时候做出最漂亮的成绩。第二,当一切进展顺利时,你也应当坚持做下去。

苦难和问题总是层出不穷,尽管如此,你仍然要每天坚持下去,坚持去做对你的未来意义重大的事情。它们最多花掉你十分钟的时间,能给你带来真正的改变。大部分人总是日复一日地停留在原地。他们总是期待周围环境会为自己发生改变,却忘记了首先应该改变的就是他们自己。

总有千百种事情可能分散你的注意力。

72小时法则。当你决定做一件事情时,必须在 72 小时之内开始行动,否则就很有可能再也不会做了。

第六章 债务-爸爸妈妈犯过的错误

大部分人都认为工作是很艰苦的,是一种负担。其实,只有做自己真正喜欢的事情,才可能真正获得成功。

在我看来,所有的消费贷款都是不明智的。聪明的人只是把以前积攒的财富用于支出。

(针对债务危机)把扣除生活费用后所剩的一半存下来,剩下的一半用于支付消费贷款。最好不要去申请消费贷款。每个月应该尽可能少地偿还贷款。

第七章 拜访金先生

金先生不是个寻常人,做事也总是不同寻常。他不在会别人做什么,他只做自己认为正确的事情。

我也有自己的秘密,所以和我说话的人当然也可以有自己的秘密。

疯狂的目标也不见得就比普通的、微小的目标更难实现。如果你树立了远大的目标,那毫无疑问,你就必须为此付出极大的努力。

为什么你做了喜欢的事情,就不应当获得金钱上的回报呢?正因为你真心付出了,你的工作才有价值。

我自己的习惯是,不论挣到多少钱,都为我的鹅存下收入的 50%,为梦想储蓄罐存下 40%,剩下的 10% 用于开销。

我越是关注自己身上的伤痛,疼痛就会越剧烈。谈论伤痛,就像在伤口上再撒上一把盐。所以,从很多年以前,我就不再抱怨了。

第八章 特伦夫太太的邀请

用最少的还款额度偿还贷款,才是最明智的做法。

第九章 冒险开始了

等待是世界上最愚蠢的事情。

第十一章 爸爸妈妈不明白的事情

仔细观察,幸运只不过是充分准备加上努力工作的结果。

勇敢不是毫不畏惧。勇敢的意思是,一个人尽管心怀恐惧,但仍能克服恐惧向前走

工作本身往往最多只值报酬的一半,另一半价值来源于你的想法和实施这个想法的勇气。

爸爸是个好人,可惜他有个坏毛病,就是总将自己的境况归咎于别人和外部环境,仿佛只有他自己是个牺牲品,而别人都是幸运儿。

笨人只有一次好运,聪明人永远都有好运。

你们总是想着怎么才能暂时应付过去,而更聪明的做法是要找到长期又有效的解决办法啊。

第十二章 特伦夫太太归来

金钱只会留在那些为之做好了准备的人身边,用非法手段得到不义之财的人,反而会过得比没钱时更糟糕。

想要过得幸福而充实,就得先改变自己,钱可不能为他们代劳。

金钱会暴露一个人的品行。金钱就像放大镜一样,它会让你把自己看得更清楚。

以前,我喜欢首先关注自己做不成的事情,现在回更专注于我能做成的事情。这样一来,我就能更多地去寻找解决问题的办法,而不是寻找逃避问题的借口。

也许金钱不是生活中最重要的东西,但如果处处缺钱的话,它就变得无比重要了,生活会为钱所累,人会变得很不正常,会跟身边的人吵架,会觉得挫败沮丧,觉得自己一无是处。

没有人能强迫你做自己不愿做的事情,只有你自己能强迫自己去做。

我生命中最美好的事情之所以发生,都是因为我做了原本不敢做的事情。

最珍贵的礼物都是自己送给自己的。一旦克服了丢面子的恐惧,世界就会对你敞开大门。

能够阻挡你做自己喜欢的事情的,只有恐惧。但是,战胜了恐惧后,你就会成长。

第十三章 严峻的危机

你可以成为这样一个人,有能力帮助别人,也能够让别人信任你,愿意向你求助。

成功会使人骄傲,如果你骄傲自大,就会停止学习,不学习,人就不会成长和进步。

不能在困难面前退缩。对苦难、错误和羞耻的恐惧,毁掉了无数人的生活。

我们的恐惧总是源于对那些不确定的事情的想象,我们越是设想失败的可能性,就会越害怕。一旦你把精力集中在积极的目标上,就不会心生畏惧了。

第十四章 投资俱乐部

我们一致认为,只要学会我们的咒语,就能像变魔法一样从无到有地变出钱来:热爱并渴望金钱;自信,有想法,敢于做自己喜欢的事情;把钱分成三部分,分别用于日常开销、梦想目标和养鹅账户;之后,进行明智的投资;以及享受生活。

投资需要注意三点:应当把钱投资在安全的地方;我们的钱应该生出很多金蛋;我们的投资必须简单易懂。

决定一件东西的价值的唯一要素是,人们愿意支付多少钱来购买它。

不要急着投资,在投资之前,必须先弄清楚自己究竟在做什么。

第十五章 演讲

如果你没有强迫自己,你就永远都不知道自己的能力究竟怎么样。别忘了,最让我们感到骄傲的事情,往往就是那些最难做到的事情。

第十六章 投资俱乐部在行动

一旦计划投资基金,就说明我们打算将一笔钱放在里面至少 10 年。对那些能等待这么长时间的人来说,基金几乎是一种零风险的投资。

筛选优质基金的注意事项:基金应当至少有 10 年的历史;应当是大型的跨国股票基金;找到过去最近 10 年里收益表现最好的基金。

第十七章 爷爷奶奶害怕风险

只有当我们把它卖出的时候,才会有亏损。

当我第一次遇到行情大跌时,反应和你们一模一样。经历过好几次这种所谓的危机,一两年后,市场总会恢复的。每次都是如此。

存折就是个金钱粉碎机。

怎么可以这样随便就下结论呢?下结论之前,至少也看一看我们的投资是怎么回事啊。你们不能因为自己不熟悉,就说这事儿危险哪。

你应该把一部分钱放在绝对无风险的投资中。也得留着备用的资金,这样才能达到分散风险的最佳效果。

第十八章 大冒险的终结

以前他总是怀疑自己能不能独当一面,现在他却知道,只要将自己不喜欢也不擅长的事情交给其他人就行了。

挣来的钱一分为三,其中的 50% 用于养鹅,40% 用于实现我的中短期目标,10% 用于零花。

最重要的是,他始终把钱视为一种再正常和自然不过的事物,在他的影响下,我对金钱的态度也发生了翻天覆地的变化。

重要的是,你是否能够听到并理解我说的话。就像你现在正在写的那本书一样,有些人读到了它,却可能根本听不见它传达的意思,也不会做出任何改变,而另一些人读过后开始学习如何更聪明地和金钱打交道,从而拥有更幸福、更富有的人生。

不要为已失去的东西悲叹,而要对你曾经有由它的时光心存感激。

后记

墙一旦倒塌,视野便会更开阔。

读书 - 信息流广告入门

自从开始工作,一致在做推荐相关的事情,做程序化广告交易平台之后,买了《信息流广告入门》这本书。读完有一段时间了,再简单说下,有必要的话再补充。

这本书从产品、投放角度来阐述信息流广告相关的事情,没有聊技术。多是一些广告相关的概念和基础,投放相关的知识。

对于想从事广告投放相关的工作,可以作为入门书籍来读。对于从事广告交易平台相关的技术工作,也可以读下,从产品和投放视角了解广告,里面的一些基础概念,对理解业务还是有帮助的。

整体来说,内容还是比较浅显易懂,适合入门。

操作系统 - 协程

我们常说的协程是在用户态实现的一种编程范式,严格意义上来说,协程并不属于操作系统的范畴。本质上来说,协程是被协程调度器处理的一段内存数据,他包含协程本身的 Context 信息及我们任务代码的地址信息。

协程和线程的区别

直观上,可以把协程和线程做对比。都有任务调度机制,不过线程是内核级别(抢占式),而协程是用户级别(协作式),所以基于协程的任务切换开销要由于线程。都可以被执行、挂起、恢复,在 IO 密集型的任务中,通常伴随大量的挂起和恢复操作,如果使用协程来实现,可以节省大量内核/用户态切换、线程上下文切换开销。

但是需要注意的是,线程是完全并行的,而协程则不一定,要看协程调度器的实现是如何和线程绑定的,可以做到并发,但不一定能做到并行。对于计算密集型行任务,要充分考虑使用协程是否符合预期。

协程切换同样需要保存协程的运行时上下文信息(栈和寄存器信息)。

协程和函数的区别

  • 协程有自己的上下文(状态、运行指令位置、寄存器信息等)
  • 协程可以被打断,可以主动暂停
  • 协程具备更好的并行、协作能力
  • 协程可以实现 lazy 计算

协程切换过程

参考