Wen Wu's notes

technical record


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

我们的时间都花在哪里了

发表于 2020-09-27 分类于 经济学 阅读次数: 评论数:

看完下面这张图,你会发现你真正投入到工作上的时间在一辈子看来很少,所以你努力不了多少年,努力跟选择相比较,是选择更重要。

瑞·达利欧(Ray Dalio)对中国经济的评价

发表于 2020-09-26 分类于 经济学 阅读次数: 评论数:

《中国大周期及其货币》(The Big Cycle of China and Its Currency)
中国重回巅峰时期,是新一轮的牛市。

在过去的1400多年的大部分时间里,大多数朝代都非常强大,文明且繁荣。
  唐朝以后,中国扩大了疆界,并经历了文化的繁荣。在南北朝时期(从900年代到1200年代),中国是世界上最具创新和活力的经济体。在明朝(1300到1600年代),中国是一个强大的大国,享有一段既富裕又和平的美好时期。在清朝初期(1600到1700年代),中国拥有最大的领土扩张范围,统治着世界三分之一的人口,同时拥有极其强大的经济实力。
  然后在1800年代初期到1900年代上半年,中国实力衰落,而欧洲国家(尤其是大英帝国)实力增强。从1800年左右到最近,亚洲的财富和权力逐步转移到了欧洲,这是世界历史上最大一次的财富和权力转移,主要是由于中国的衰弱,这种权力和财富的转移应该认为这是一种反常现象,而不是常态。

命运这东西

发表于 2020-08-31 更新于 2021-01-02 分类于 阅读 阅读次数: 评论数:

现在开始粉村上春树了,《海边的卡夫卡》中的一段关于命运的说辞:

某种情况下,命运这东西类似不断改变前进方向的局部沙尘暴。你变换脚步力图避开它,不料沙尘暴就像配合你似的同样变换脚步。你再次变换脚步,沙尘暴也变换脚步——如此无数次周而复始,恰如黎明前同死神一起跳的不吉利的舞。这是因为,沙尘暴不是来自远处什么地方的两不相关的什么。这是说,那家伙是你本身,是你本身中的什么。所以你能做的,不外乎乖乖地径直跨入那篇沙尘暴之中,紧紧捂住眼睛耳朵以免沙尘进入,一步一步从中穿过。那里面没有太阳,没有月亮,没有方向,有时甚至没有时间,唯有碎骨一样细细白白的沙尘在高空盘旋。
而沙尘暴偃旗息鼓之时,你恐怕还不能完全明白自己是如何从中穿过而得以逃生的,甚至它是否已经远去你大概都无从判断。不过有一点是清楚的:从沙尘暴中逃出来的你已经不再是跨入沙尘暴时的你。这就是所谓沙尘暴的含义。

斯文牙(SweynTooth)是什么牙?

发表于 2020-06-21 更新于 2020-06-26 分类于 蓝牙 阅读次数: 评论数:


SweynTooth是新加坡科技设计大学(SUTD)的一个嵌入式设备安全研究机构在今年2月释放出的10个针对BLE的攻击方法,这些攻击方法很常见,就是通过传输不符合规范的数据包,看被测设备会不会出现死锁或死机,相关的攻击程序也有开放。第二波的攻击方法将在7月13号发布。

关于为什么叫SweynTooth,很好玩,请参考下面一段。

5 Why SweynTooth ?

The insight behind the name SweynTooth arrives from Sweyn Forkbeard, the son of King Harald Bluetooth (after whom the Bluetooth Technology was originally named). Sweyn revolted against Harald Bluetooth and this forced King Harald to his exile. The exile lead to the death of King Harald shortly. We envision that if SweynTooth style vulnerabilities are not appropriately handled by BLE vendors, then the technology can become a breeding ground for attackers. This may, in turn, lead the Bluetooth technology to be obsolete.

斯文牙是蓝牙的儿子,斯文牙一点不斯文,他反叛父亲,并将父亲流放。鉴于此,SUTD发布这些无聊攻击也算是师出有名:为了不让蓝牙技术落到蓝牙的境地。原本的目的也许就是导师为了让学生有课题做作,好写毕业论文,你懂得。正常情况下谁有闲空去搞这些损人不利己的事儿呢?

比如其中的第二个攻击方法,就是将链路层数据包的LLID给写成0,而0在spec中规定是个没有意义的数字,在收到这样的数据包时应该直接丢弃。

Nimble Controller在处理RX Data PDU的时候已经考虑到这个了,code如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void
ble_ll_conn_rx_data_pdu(struct os_mbuf *rxpdu, struct ble_mbuf_hdr *hdr)
{
/* Validate rx data pdu */
rxbuf = rxpdu->om_data;
hdr_byte = rxbuf[0];
acl_len = rxbuf[1];
llid = hdr_byte & BLE_LL_DATA_HDR_LLID_MASK;

/*
* Check that the LLID and payload length are reasonable.
* Empty payload is only allowed for LLID == 01b.
* */
if ((llid == 0) || ((acl_len == 0) && (llid != BLE_LL_LLID_DATA_FRAG))) {
STATS_INC(ble_ll_conn_stats, rx_bad_llid);
goto conn_rx_data_pdu_end;
}

QBQ, 问题背后的问题

发表于 2020-06-19 分类于 阅读 阅读次数: 评论数:

QBQ,一本小书,不到150页,一个小时读完。
一句话:这是一本老板喜欢的书,教员工要当责。
看书名,我被她深深的吸引了,这本书难道是关于逻辑学的?教你识别一个问题是不是一个问题,避免自己做无用功?然而我错了。
翻译下书名:提出带有负面情绪的问题,是有问题的。
全书的重点是在讲作为一个员工应该有的心态:做事当责,不抱怨,以正面心态拥抱当前的问题。当你改变到了这个心态,自己工作成效也大,进步也快。

关于BLE的好文

发表于 2020-05-28 分类于 蓝牙 阅读次数: 评论数:

一系列介绍BLE 规范的好文,对于了解BLE的整体概念非常有帮助。当然要想深入理解,还是要读原汁原味的Spec,让你苦思冥想,在谜团中寻找自己需要的东西,才更有收获。

我跑,故我在

发表于 2020-05-04 分类于 阅读 阅读次数: 评论数:

村上春树是一个多产的作家,我只看过一本《当我谈跑步时,我谈些什么》。
村上也是个跑步专家,每年夏天参加铁人三项,冬天参加马拉松。
谈到为啥选择跑步时,他认为就是自己喜欢,自己没有兄弟姐妹,对于对抗性的以及与人合作的运动项目不喜欢,所以他选择了跑步,跑步是与自己对话的过程,小说的很多写作方法也是跑步的时候想出来的。

他写的跑一百公里超级马拉松时候的感觉,特别的细腻。

  • 就这样,我坚持又坚持,总算跑了下来。当我跑到七十五公里处,感觉似乎又什么东西攸地出窍了。除了“出窍”一词,我想不出还有什么好的表达。简直就像穿透了石壁一般,身体一下子钻了过去,来到了另外一面。
  • 如此长时间地不停奔跑,不可能感觉不到肉体上的苦楚。但到了这个时候,疲劳已不是什么重大问题。这也许意味着疲劳作为一种常态,被身体自然而然地接纳了。一度沸沸扬扬的肌肉革命议会似乎也灰心丧气,不再逐一倾诉不满。已经无人敲桌子,无人扔杯子了。它们将这疲劳作为历史的必然,作为革命的成果,默默无言地接受下来。我便自动地、只管有规律地前后甩动手臂,将双腿一步一步向前递出去。什么都不思,什么都不想。待回过神来,连肉体的苦楚都似乎销声匿迹,或像因故无法处理的难看家具,被扔到了毫不起眼的角落。
  • 我陷入了类似自动驾驶的状态。这么继续跑下去,只怕过了一百公里我还能跑。听上去颇有些怪异:跑到最后,不仅是肉体的苦痛,甚至连自己到底是谁、此刻在干什么之类,都已经从脑海中消失殆尽。这理当是十分可笑的心情,可是我连这份可笑都无法感受到了。这这里,跑步几乎达到了形而上学的领域。仿佛先有了行为,然后附带性地才有了我的存在。我跑,故我在。
  • 在我的周遭,许多人只是默默向着终点奔去。身处其中,我拥抱着异常静谧的幸福感。吸气,再吐气,听不出呼吸中攸丝毫紊乱。空气非常平静地进入身体,再走出体外。我那寡言的心脏按照一定的速度重复着舒张与收缩,我的肺好像好似勤劳的风箱,规规矩矩将新鲜氧气摄入体内。我能够目睹它们工作的身影,听见它们发出的声响。一切都顺畅无误地运站着。沿途的人们对这我们大声呼唤“加油啊,马上就到终点站了“声音像透明的风,穿透我的身体逝去。我感觉人们的声音就这般穿透而过,直达身体的另一面。
  • 我是我,又不是我。这是一种异常沉稳而寂静的心情

如何聪明的睡觉

发表于 2020-04-12 更新于 2023-02-12 分类于 睡眠 阅读次数: 评论数:

本文要点摘自 《斯坦福睡眠法》《如何聪明的睡觉》。

睡眠占据了我们人生的1/3,而这1/3又决定了另外的2/3,所以睡个好觉是非常重要的。睡不好会导致一大堆心理和生理上的问题:焦虑、抑郁、长不高、肥胖等等。
入睡后,整个睡眠过程会经过好几个周期,每个周期大约90分钟,尽量不要打断这些周期。这些周期分为非REM和REM,REM时快速眼动的意思,顾名思义就是眼球在运动的睡眠。

  • 非REM是深睡眠,这个时候如果被迫醒来的话,人会很懵,所以尽量避免这个时候醒来。这个时候做的梦多是抽象的,不符合逻辑的。
  • REM 是浅睡眠,这个时候大脑时在活跃状态。这个时候的梦多是故事性的,接近于真实体验。
    • 睡梦是人白天的情感的流露。
    • 睡梦中大脑会整理记忆,把海马体的东西整理后搬到皮质层永久记忆。
    • 梦中大脑可以把不好的记忆消除掉,前提是在梦中梦到这个不好的事情。
    • 梦中可以继续思考,甚至有的人真可以预测未来。


第一个深睡眠周期比较长是非常重要的,决定了整个睡眠的质量。如果要熬夜的话,最好先睡完这个周期再去熬夜。

如何提高睡觉的效率:

  • 卧室要黑,做到伸手不见五指。
  • 睡觉前1个半小时不要接触电子产品

    蓝光会影响褪黑激素的分泌

  • 10点到11点是身体分泌褪黑激素的时间,这个时候必须尽快睡觉。
  • 晚上大概有4~6个睡眠周期,每个周期是1个半小时,最好不要打断这些周期。
  • 平时多晒太阳
  • 用脚踩土地,吸收负电子。
  • 坚持每天同一时间入睡,同一时间起床。
  • 睡前一个小时沐浴或泡脚,利于身体降温

    真正主导能量释放的是表面积较大且毛细血管丰富的手脚部位。
    体温降下来才容易入睡,入睡时的体温比醒着时低2度,只有体温降下来了才容易入睡。
    午休最好不要超过30分钟。

如何清醒

  • 早上定两个相隔20分钟闹钟,闹钟时间最好在REM结束的时间,第一个闹钟声音轻柔些。
  • 使劲儿细嚼慢咽有助于清醒。
  • 开会时打瞌睡的话,就尽量主动发言提问。
  • 午饭少吃,少吃淀粉含量高的食物,比较容易保持清醒。

给新任软件工程师的建议

发表于 2020-04-06 分类于 阅读 阅读次数: 评论数:

给自己,一个新手软件工程师的建议

  • Run a marathon, not a sprint.

    工作是一场马拉松,不是短跑。

  • Be humble, not stupid.

    保持谦逊,但别笨(并不是所有其他人都比你好)。

  • Compare with yourself, not others.

    跟自己比,不是别人。

  • Respect people, not titles.

    尊重人,而不是尊重头衔。

  • Choose the challenge, not comfort.

    迎接挑战,而不是固守舒坦。

  • Jump on the whiteboard, not on the keyboard.

    工作从白板开始,不是键盘。

  • Deliver value, not code.

    产出价值,不是代码。

nimble on ESP32

发表于 2020-03-09 分类于 Nimble 阅读次数: 评论数:

从好友Yufeng那里得知Nimble有在ESP32上落地,刚好手头有一片ESP-WRCOM-32,手痒痒就download了一份ESP32的IDF 玩下。
Getting Start 写的真心不错,简单明了,照着操作步骤一步一步跑就能跑起来Nimble的example project。不过ESP32只用了Nimble的Host,没有用Controller的部分,毕竟ESP32是Combo chip,Nimble Controller Scheduler没有考虑过Wifi的部分。

  • ESP32文档很很赞,花了大力气做宣传,内容挺丰富,也很正规,YouTube也有很多教学视频。
  • 还挺开放,放了不少源码出来,包括ble mesh等。
  • 不知道为啥没有自己的Host,之前用bluedroid,footprint没啥优势。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
I (0) cpu_start: App cpu up.
I (386) heap_init: Initializing. RAM available for dynamic allocation:
I (393) heap_init: At 3FFAFF10 len 000000F0 (0 KiB): DRAM
I (399) heap_init: At 3FFB6388 len 00001C78 (7 KiB): DRAM
I (405) heap_init: At 3FFB9A20 len 00004108 (16 KiB): DRAM
I (411) heap_init: At 3FFBDB5C len 00000004 (0 KiB): DRAM
I (417) heap_init: At 3FFC3B68 len 0001C498 (113 KiB): DRAM
I (424) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (430) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (436) heap_init: At 40093CE0 len 0000C320 (48 KiB): IRAM
I (443) cpu_start: Pro cpu start user code
I (461) spi_flash: detected chip: gd
I (461) spi_flash: flash io: dio
W (462) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the size in the binary image header.
I (472) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (557) BTDM_INIT: BT controller compile version [fd2a63b]
I (557) system_api: Base MAC address is not set
I (557) system_api: read default base MAC address from EFUSE
I (657) phy: phy_version: 4180, cb3948e, Sep 12 2019, 16:39:13, 0, 0
I (887) NimBLE_BLE_PRPH: BLE Host Task Started
I (897) uart: queue free spaces: 8
Device Address: 80:7d:3a:d7:f1:56
GAP procedure initiated: advertise; disc_mode=2 adv_channel_map=0 own_addr_type=0 adv_filter_policy=0 adv_itvl_min=0 adv_itvl_max=0
1…345…10

Wen Wu

I'm a bluetooth Host and Controller developer
95 日志
25 分类
46 标签
© 2025 Wen Wu
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Gemini v7.2.0