#831 转载:心理否认

2023-01-07

以下内容摘自《崩溃:社会如何选择成败兴旺》(上海译文出版社,2008年),作者是美国生物学家贾雷德·戴蒙德,他也是名著《枪炮、病菌与钢铁》的作者。

一个狭窄的河谷建造了一座巨型水坝,有人对下游居民进行问卷调查,询问他们是否担心水坝倒塌。

让人意外的是,住在水坝下游几英里的居民竟然是最担心水坝倒塌的人群,而住在水坝正下方的居民却一点都不担心。

原因是正下方的居民产生了"心理否认"。

这些居民每天一抬头就看到水坝,如果担心它会倒塌,从早到晚提心吊胆,那简直没办法过日子。保持镇定的惟一方法,就是从心底里否认水坝可能会倒塌这一事实。

非理性地拒绝解决已经察觉的问题,这在心理学上叫做"心理否认"。 这个名词原本用于个人心理学,现在也扩展到社会文化。

如果有件事情让你深感痛苦,你可能就会潜意识地压制或否认这种感觉,以免引起痛苦,尽管这实际上可能带来灾难性的后果。

#830 移动通信技术

2023-01-05
  • 0G 大概是那种内部无线通信网络,对讲机?
  • 60 年代出现。
  • 1G 蜂窝技术,模拟信号。
  • 80 年代出现,2000 年左右被淘汰。
  • 2G
  • 主要的第二代手机通信技术规格标准有:
    • GSM:以 TDMA 为基础所发展、源于欧洲、目前已全球化。
    • IDEN:以TDMA为基础所发展、美国独有的系统。被美国电信系统商Nextell使用。
    • IS-136﹙也叫做D-AMPS﹚:基于TDMA所发展,是美国最简单的TDMA系统,用于美洲。
    • IS-95﹙也叫做cdmaOne﹚:基于CDMA所发展、是美国最简单的CDMA系统、用于美洲和亚洲一些国家。
    • PDC﹙Personal Digital Cellular﹚:基于TDMA所发展,仅在日本普及。
  • 3G 国际电信联盟(ITU)所制定的 IMT-2000 规范
  • 支持六种无线电接口,可能就是子标准。在我们国内,三大运营商分别采用的是:
    • 中国电信 CDMA2000
    • 中国联通 WCDMA
    • 中国移动 TD-SCDMA (这套标准仅中国使用)
  • 4G
  • 技术标准:
    • LTE-Advanced(长期演进技术升级版)(三大运营商都有这两种标准的经营许可牌照):
    • LTE FDD(频分双工长期演进技术)
    • LTE TDD(时分双工长期演进技术),又称 TD-LTE,不少中国公司参与研发。
    • WirelessMAN-Advanced(无线城域网升级版):又称 WiMAX-Advanced、WiMAX 2,即IEEE 802.16m,是 WiMAX 的升级演进,由 IEEE 所主导制定。Intel 2010 年退出之后,已经抛弃。
  • 5G
  • 目前,提供5G解决方案给电信运营商的公司有:诺基亚、爱立信、三星、高通、思科、华为、中兴、大唐电信。
  • 美国及其附属国对华为的 5G 产品进行打压,可能华为真的在这方面比较领先。
  • 中国 5G 商用时间不算早,但是推进速度快,现在已经是最大规模的 5G 网络。
  • 根据网上的科普,可以实现更高的带宽,更低的延迟(重点)。
  • 问题:1. 需求不足;2. 高频导致抗干扰能力差;3. 高频导致信号覆盖范围小,需要更大密度架设基站。
  • 6G 研发中
  • 据说能够实现微妙级的延迟

经常看到的 ITU 和 3GPP 不知道是个什么关系,这些通信技术一会儿说是 ITU 标准,一会儿说是 3GPP 标准。

GSM

GSM,Global System for Mobile Communications,全球移动通讯系统。
第二代(2G)移动电话系统。
GSM 标准当前由 3GPP 组织负责制定和维护。

  • 3G(CDMA2000, WCDMA, TD-SCDMA)
  • 4G(LTE FDD, TD-LTE)
  • 5G

3GPP

http://www.3gpp.org

相关技术文档分成 TR(技术报告)和 TS(技术规范)
技术规范有版本号:Vx.y.z,其中 x 表示 release,y 表示技术版本,z 表示修订版本。
每个 release 都有一个冻结日期,一般 3GPP 协议在冻结以后就不再修改。一般冻结日期为 1 年。
文档由分成 Stage 1 ~ 3,分别从服务使用者角度阐述服务,分析问题,描述技术实现。

参考资料与拓展阅读

#829 GSM-7 编码

2023-01-05

https://en.wikipedia.org/wiki/GSM_03.38

GSM 引入短信服务的时候,规范了相关的字符编码。

其中,定义了一个 7bit 的字符编码,支持英语和一些西欧语言,这套标准就是 GSM 03.38,也被称之为 3GPP 23.038,在移动通信技术领域之外,更广泛的称呼是 GSM-7 编码(gsm7bit)。

  • PS:短信中如果要包含其他语言,必须使用 16 位 UCS-2 字符编码进行传输。
  • PS:按照 GSM 03.40 标准(TP-Data-Coding-Scheme),一共支持三种编码(00 GSM7bit,01 8bit,02 UCS2)
  • PS:3GPP 23.038 中还又定义一个 national language shift table,
    可以通过相关代码在 GSM-7 的技术框架内支持一些语言,比如葡萄牙语、西班牙语、土耳其语等。
    中文这种字符这么多的就别想了。

字符集

分析

  1. 算是可变长度编码,拓展区域字符需要用 ESC (0x1B) 开头,算两位长度。

  2. ASCII 可打印字符中(Python string.printable),有四个不支持:

`
\t      # TAB   水平制表符
\x0b    # VT    垂直制表符
\x0c    # FF    换页
  1. GSM-7 基本兼容同为七位编码的 ASCII:

  2. ASCII 可打印字符中,有 8 个符号放在拓展区,

  3. 其他的和 GSM-7 编码完全相同。
^ ~ \ | { } [ ]
  1. 图中标黄色的 7 个字符说明:

  2. BCS:

    1. LF \r 换行
    2. CR \n 回车
    3. ESC
    4. SP
  3. EXT:

    1. FF 1B0A 对应 ASCII 0C 位置的换页符
    2. CR2 1B0D
    3. SS2 1B1B 保留
  4. GSM-7 用控制字符换了以下 40 个字符:

'£', '¥', 'è', 'é', 'ù', 'ì', 'ò', 'Ç', 'Ø', 'ø',
'Å', 'å', 'Δ', 'Φ', 'Γ', 'Λ', 'Ω', 'Π', 'Ψ', 'Σ',
'Θ', 'Ξ', 'Æ', 'æ', 'ß', 'É', '¤', '¡', 'Ä', 'Ö',
'Ñ', 'Ü', '§', '¿', 'ä', 'ö', 'ñ', 'ü', 'à', '€',

对短信长度计算的影响

和 8bit 的 ASCII 编码方案相比:

  1. 利用那些没有用的控制位,支持更多语言(同时,牺牲了 8 个标点符号,需要两个字节表示)
  2. 140 * 8 / 7 = 160,也就是一条短信支持的字符数,从 140 提升到 160。

如果超出就按照 153 个字符切割,比如:

500 个 GSM-7 字符的短信,在通信过程中需要切割成 153 + 153 + 153 + 41 四条短信发出。
每条短信带一个头(附加信息),包含这批短信的总条数和当前这条短信的序号。
收信方根据短信的头信息来把这一批短信组装成一条,展示给用户。

参考:2018/06/08,短信长度到底是怎么规定的

填充位

根据协议:
如果剩余长度 1 ~ 6,最后的几位应该用 0 填充。
如果剩余长度位 7,为了避免和 0x00 @ 混淆,应该用 0x0D 填充,也就是 \r(回车)。

stat = {}

for i in range(1, 161):
    stat.setdefault(8 - (i * 7 % 8), []).append(i)

pprint.pp(stat, width=160)
{1: [1, 9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97, 105, 113, 121, 129, 137, 145, 153],
 2: [2, 10, 18, 26, 34, 42, 50, 58, 66, 74, 82, 90, 98, 106, 114, 122, 130, 138, 146, 154],
 3: [3, 11, 19, 27, 35, 43, 51, 59, 67, 75, 83, 91, 99, 107, 115, 123, 131, 139, 147, 155],
 4: [4, 12, 20, 28, 36, 44, 52, 60, 68, 76, 84, 92, 100, 108, 116, 124, 132, 140, 148, 156],
 5: [5, 13, 21, 29, 37, 45, 53, 61, 69, 77, 85, 93, 101, 109, 117, 125, 133, 141, 149, 157],
 6: [6, 14, 22, 30, 38, 46, 54, 62, 70, 78, 86, 94, 102, 110, 118, 126, 134, 142, 150, 158],
 7: [7, 15, 23, 31, 39, 47, 55, 63, 71, 79, 87, 95, 103, 111, 119, 127, 135, 143, 151, 159],
 8: [8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 160]}

参考资料与拓展阅读

#828 我的工作日志

2023-01-04

之前的工作日志

  1. 按年按月归档的,每周一个文件,然后专门的事情可能会有一个专门的文件来记录。
work
    2022
        README.md
        01
        02
        ...
        12
            202212-05-11.md
            202212-12-18.md
            202212-19-25.md
            202212-26-01.md
            20221201-speedlimit-review.md
            20221203-new-from-test.md
            ...
            20221229-q4-report.md
  1. 每周的事情又分成:

  2. 值班报告

  3. 工作事项(按天记录)
  4. 周会汇报

    • 上周工作总结
    • 本周工作安排
    • 接下来的计划
  5. 每年的文件中有每个季度重要工作的总结,Q1 ~ Q4

今后的调整

  1. 在年度目录中增加 q1.md ~ q4.md 做季度计划和总结
  2. 在月度目录中增加 README.md 做月度计划和总结
  3. 年度计划和季度计划中,用二级标题记录相关事项,和每周工作实施情况相关联。
  4. 工作事项要区分产品线,区分事项类型(客户问题,功能开发,Bug修复,协助,其他)
  5. 工作计划中要区分主线任务,支线任务
  6. 主线任务是列在年度计划、季度计划中的重点事项,以及其他重点事项
  7. 支线任务是平时的开发任务和其他事项
  8. 工作安排中要关注重点数据(包括大客户的信息)
  9. 周末总结留到当前周的文件中(由于每周一有周会汇报,很多时候都是周一上午编辑整理,所以之前是放到下一周)
  10. 本周工作总结
  11. 下周工作安排
  12. 接下来的计划

#827 dd 替代品

2022-12-25
dd if=image.iso of=/dev/sdb bs=4M

# 用 cat 就行:
cat image.iso >/dev/sdb
# 如果想要进度信息:
cat image.iso | pv >/dev/sdb

dd if=/dev/zero of=image.iso bs=4MB count=25
# 用 head:
head -c 100MB /dev/zero >image.iso

参考:https://eklitzke.org/the-cult-of-dd

#826 Python 2.7 Json 字符串类型的问题

2022-12-19

今日发现一个 Python 2.7 的一个大坑:部分版本下 JSON 解析字符串为 str 类型,部分版本解析成 unicode 类型。

Python 2.7 (r27:82500, Apr 12 2016, 21:09:36)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json; print(repr(json.loads('"a"')));
'a'

Python 2.7.15 (default, Jul 22 2019, 17:38:55)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json; json.loads('"s"'); exit();
's'

Python 2.7.15 (default, Jun 26 2018, 11:17:18)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json; json.loads('"s"'); exit();
u's'

Python 2.7.18 (default, Mar 23 2022, 15:07:54)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json; json.loads('"s"'); exit();
u's'

找到一个相关的 Issue:json.loads() on str should return unicode, not str
对应 GitHub 上的 Issue#54247

根据相关内容,这个问题影响了 Python 2.7 的一些版本。


还有:json.loads() returns str instead of unicode for empty strings
对应 GitHub 上的 Issue#56191

#825 bash 上下键搜索历史记录

2022-12-16

我一直用 zsh + omz,但是毕竟 bash 才是大多数情况下的默认 Shell。

zsh 和 bash 都是用上下键来搜索历史记录,但是不同的是,zsh 会利用已经输入部分做前缀匹配,而 bash 不会,只是简单的上一条、下一条。

今天学会一个方法(Bash history search, partial + up-arrow):

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'

凑活凑活吧。

已经加到我个人的 bash 配置中。

#824 Golang 变量初始化顺序问题

2022-12-15

f1.go

package main

var A int = 3
var B int = A + 1
var C int = A

f2.go

package main

import "fmt"

var D = f()

func f() int {
    A = 1
    return 1
}

func main() {
    fmt.Println(A, B, C)
}

执行

markjour@victus ~/test02
$ go version
go version go1.18.6 windows/amd64

markjour@victus ~/test02
$ go run f1.go f2.go
1 4 3

markjour@victus ~/test02
$ go run f2.go f1.go
1 2 3

分析

f1f2 的情况下:变量初始化的顺序应该为 A B C D,所以输出 1 4 3 是没有问题的。
f2f1 的情况下:变量初始化的顺序应该为 A D B C,所以按理应该输出 1 2 1,实际确实输出 1 2 3。

f1 中 A C 中只要一个的初始化改成这样就可以符合预期:

func initA() int {
    return 3
}

func initC() int {
    return A
}

这是 Go 的一个 BUG,即将在 Go 1.20 修复。
知道就行了。

参考资料与拓展阅读

#823 疫情的影响

2022-12-13

封控

由于疫情的封控措施导致官民矛盾非常激烈,到处都是对抗。
我自己小区就有暴力冲突,社区工作人员和物业保安群殴 “闯岗” 租户。我所知道的周边小区也是差不多。其他的某些地方甚至是聚集性的大事件(抖音删帖非常严重)。
这些 “小浪花” 单独拿出来,可能觉得是和物业在斗争、和大白在斗争、和社区工作人员在斗争,实际上背后是对镇府不作为,不敢担当的不满。

市镇府肯定知道下面的情况,可是没有做任何干涉。在一定程度上我能理解,一方面上面有这 m 条、那 n 条,要求 “精准防控”,尽可能开放,一方面又对防疫不力的地方杀鸡儆猴(就没见到几个因为过度防控而收到严厉处分的)。

但是:

第一,居委会作为居民自治组织,没有执法权,将居委会推到一线,给大家封路、封门、钉板子,凭什么。

第二,没有人能够出具有法律效力的(带公章)文件要求封控,经常就是群里发个消息,可能再带一张居委会的 A4 扫描件,也没有公章。问就是上级单位。

第三,小区封控起来之后,物质的供应方面,镇府没有任何作为。
本来我们都在小区铁门内买,门外门店老板递过来,结果工商(?)的一天查几次,要求他们关门,所以经常要到处找哪里有卖菜的地方。
我在买菜的时候,还听到一起买菜的人在说,工商要我们在家吃几天面条挺过去。
本来大部分人都不用和镇府打交道,因为疫情防控的关系,大家直接面对面了。

还有,大家在传核酸企业的一些传闻,这个我不了解情况,就不评论了,但是证监会给他们上市割韭菜的机会是为什么?

注:如果要出小区,需要社区出具的一个小纸条,注明原因,承诺两点一线,物业的检查方面也非常松,基本上是看到拿出来一个纸条就放行,并且没有时间限制。

解封

上面是之前的情况,最近这两天风向来了个 180° 的大转弯。之前是应检尽检,一天几次的在小区群里催大家下楼做核酸。突然一声不吭,

  1. 做不做核酸都是绿码了,同样没有见到官方的任何说法。
  2. 一天之内开始拆除所有路障。
  3. 减少撤销小区周边的便民检测点,残存的几个检测点还在大喇叭喊话,如果没有必要尽量不要做核酸(混管),不要连累家人邻居被封。
  4. 又两三天之后,所有地方都开始强调不检查核酸绿码了。

感染

再就是身边慢慢星星点点听说有人发烧、有人自测阳性。
药店基本上感冒发烧消毒的东西,啥都没有,只能靠自己挺了。镇府在这方面(医药供应)还是啥都没作为。服了。

之前新闻联播里面天天说美国新冠的情况,现在也不提了。
之前说新冠好像非常严重,现在说是和感冒差不多,可以自己挺过去。
之前强调防控是保障人民的生命权,现在说放开是精准调研之后选择的最好时机。

现在这种从上到下都紧跟 ZZ 形势说话的氛围,做没有脑子的咽喉,让人挺没有信任感的。
虽然表面上看不太出来,但是从长远来讲,这都是信心的流失。

最重要的还是期间各级镇府的不作为。在不违反规定的情况下,其实有好多事情可以做,那样的话,也不会是现在这个局面。

#822 街道,社区,居委会?

2022-12-01
  • 街道,街道办事处,相当于乡政府,镇政府

  • 工作人员是事业编制,少部分是公务员

法律依据:

  • 《地方各级人民代表大会和地方各级人民政府组织法》第六十八条规定:
    > 市辖区、不设区的市人民政府,经上一级人民政府批准,可以设立若干个街道,管理机构为街道办事处,作为市辖区、不设区的市的派出机关。

  • 居委会,居民委员会,相当于村委会(村民委员会)

  • 又叫社区居民委员会,简称社区。(?)

  • 在街道和更高级别政府的指导下工作。
  • 理论上,居委会应该是居民自治组织,其领导班子应该由辖区居民选举产生。

法律依据:

  • 《中华人民共和国城市居民委员会组织法》

  • 业委会,业主委员会,小区自行选举代表业主利益的组织。管理小区公共利益,监督物业公司的工作。

  • 选举需要经过街道和社区批准。

法律依据:

  • 《中华人民共和国民法典》
  • 《业主大会和业主委员会指导规则》(建房[2009]274号)

参考资料与拓展阅读

  1. 网易,未经批准擅自组织业委会选举,临沂2人被刑拘!

...,在未经街道办事处和社区组织批准的情况下,...

  1. 北京市人民政府,社区和居委会的区别是什么?
    IMG