#114 Python 设置系统默认编码
Python 字符编码 2016-01-23关于 sys.setdefaultencoding
的一些问题。
coding in a complicated world
关于 sys.setdefaultencoding
的一些问题。
.gitignore 常见的 *.py[cod]
。
参考 gitignore.io。
.py
.pyc
编译过后生成的字节码文件.pyo
经过优化的字节码文件。Python2 时代常见,Python3 不再使用。现在是 .opt-1.pyc
, opt-2.pyc
.pyd
.pyi
Python Stub 文件,IDE 中为了提供更好的提示会带一些这样的文件,只是所有方法都是空的。py
后缀了。.pyw
Windows 专供,py 文件由 python.exe 解析,pyw 文件由 pythonw.exe 执行.pth
自定义路径导入规则的文件,参考:.pth 文件和 site 模块可能这是 Linux 命令行使用频率最高的一个计算器工具了。
其语法可以说比较复杂,可以定义变量,有各种逻辑控制语句,甚至可以定义函数,简直可以拿来做程序设计了。但是我们一般可能用不了这么多功能,就用来做一些简单计算就行。
PS:奇怪的是,有这么多复杂的功能,竟然没有包含位运算。
bc <<< "1 + 3 + 5 + 7 + 9"
26
bc <<< "scale=3; 1 / 3"
.333
bc <<< "obase=2; 14"
1110
bc <<< "ibase=16;obase=2; FF - 1A"
11100101
long_string="line 1
line 2
line 3"
# bash ========
# readarray -t lines <<< "$long_string"
# IFS=$'\n' lines=($long_string)
# zsh =========
# lines=("${(@f)long_string}")
setopt sh_word_split
for line in "${lines[@]}"
do
echo "$line =="
done
这里的上帝叫做一如 Eru,或者伊露维塔 Ilúvitar。
一如在虚空中创建了时空(一亚),又在这个时空中创建了一个平面的世界阿尔达(天如穹庐,笼盖四野)。
帮助一如创世的是埃努,一如的意识,他们通过音乐(埃努的大乐章)来创造世界。
有一个是例外,一如独立创造了精灵和人类,给精灵的礼物是真善美,给人类的礼物是死亡。
为了继续完善这个世界,照顾好神的孩子,部分埃努离开一如,进入了阿尔达,其中力量强大的叫做维拉 (女性维拉也被称为维丽 Valier),有 15 位,普通的叫迈雅,数量比较多(包括神犬胡安和巨鹰)。
部分埃努黑化,其中包括维拉米尔寇 Melkor(后来叫做魔苟斯 Morgoth(黑暗暴君)),迈雅索伦。
霍比特人,魔戒,精灵宝钻发生的时间都比较晚,主要发生在中土大陆。
第二纪元,阿门洲被剥离出来,剩下的阿尔达被卷曲成了一个球形。无法直接从中洲走到阿门洲。
魔王一直给埃努捣乱,破坏了给整个世界带来光明的两盏巨灯。
埃努就囚禁了魔王,又在阿门洲创造了两棵巨树,能照亮阿门洲的部分区域。
等精灵苏醒过来之后,带绝大部分精灵穿越大海,从中土来到阿门洲。
结果后来部分精灵被魔王蛊惑,对埃努心生不满,甚至产生内乱,离开阿门洲,返回中州。
埃努就开始不再干涉中洲的事情。
中土世界的五个迈雅,有两位去了东方,在故事中没有出现,剩下三个:白袍巫师萨鲁曼,灰袍巫师甘道夫,褐袍巫师。
除了精灵和人类,其他的智慧生物:
https://en.wikipedia.org/wiki/Middle-earth
https://en.wikipedia.org/wiki/File_Transfer_Protocol
B/S 模式,一个连接两个通道,命令通道传输控制指令以及响应,数据通道传输数据。
S: 220 Welcome to markjour.cn FTP service.
C: USER admin
S: 331 Please specify the password.
C: PASS ****************
S: 230 Login successful.
IPv6 引入之后,有了两个新的指令(RFC#2428):
EPRT |<网络协议>|<IP>|<端口>|
EPSV 1
,EPSV 2
,EPSV ALL
https://en.wikipedia.org/wiki/List_of_FTP_commands
FTP Secure,FTP over SSL
FTP + TLS
Secure File Transfer Protocol,安全文件传送协议,SSH 的一部分。
需要借助 sshd 充当服务器端。
https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol
SFTP 和 FTPS 的区别就是分别使用 SSH 协议和 TLS 协议实现网络加密。
https://en.wikipedia.org/wiki/Comparison_of_file_transfer_protocols
符号 | ||||||||
---|---|---|---|---|---|---|---|---|
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 127 |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 2 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | −1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | −2 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | −127 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | −128 |
CPU 可以很快的计算加法,但是减法、乘法、除法就复杂得多。
减法的计算:1 - 1 = 1 + (-1)
如果带上符号,CPU 需要区分符号位,计算起来就复杂了。
1 + (-1) = [0001]原 + [1001]原 = [1010]原 = -2
所以发明反码,解决了符号位的问题。
1 + (-1) = [0001]反 + [1110]反 = [1111]反 = [1000]原 = -0
其背后肯定有计算机科学专家的严密论证。
原码和反码的问题:+0,-0
所以发明补码,将数据表示范围从 [-7, 7]
-> [-8, 7]
。
为了方便,还是以四位二进制为例说明:
数字 | 原码 | 反码 | 补码 |
---|---|---|---|
0 | 0000 | 0000 | 0000 |
1 | 0001 | 0001 | 0001 |
2 | 0010 | 0010 | 0010 |
3 | 0011 | 0011 | 0011 |
4 | 0100 | 0100 | 0100 |
5 | 0101 | 0101 | 0101 |
6 | 0110 | 0110 | 0110 |
7 | 0111 | 0111 | 0111 |
-1 | 1001 | 1110 | 1111 |
-2 | 1010 | 1101 | 1110 |
-3 | 1011 | 1100 | 1101 |
-4 | 1100 | 1011 | 1100 |
-5 | 1101 | 1010 | 1011 |
-6 | 1110 | 1001 | 1010 |
-7 | 1111 | 1000 | 1001 |
原码还剩最后一种组合:-0,也就是 1000
,对应反码 1111
。补码还剩 1000
。
但是补码 1000
在我们的 CPU 加法器中可以起到 -8 的作用:
(-1) + (-7) = [1111]补 + [1001]补 = [1000]补
(-2) + (-6) = [1110]补 + [1010]补 = [1000]补
补码的计算:
1 + (-1) = [0001]补 + [1111]补 = [0000]补 = [0000]原 = 0
背后肯定也是有严密论证的。
所以,现在,计算机内部的计算都是以补码形式进行。
逻辑运算 | 数学表示 | 编程 |
---|---|---|
与 | $a \land b$ | & |
或 | $a \lor b$ | | |
非 | $\neg a$ | ! |
异或 | $a \oplus b$ | ^ |
左移位 | $a \ll 4$ | << |
右移位 | $a \gg 4$ | >> |
蓝牙(英语:Bluetooth),一种无线通讯技术标准,用来让固定与移动设备,在短距离间交换资料,以形成个人局域网(PAN)。其使用短波特高频(UHF)无线电波,经由 2.4 至 2.485 GHz 的 ISM 频段来进行通信。1994 年由电信商爱立信(Ericsson)发展出这个技术。它最初的设计,是希望创建一个 RS-232 数据线的无线通信替代版本。它能够链接多个设备,克服同步的问题。
蓝牙技术目前由蓝牙技术联盟(SIG)来负责维护其技术标准,其成员已超过三万,分布在电信、电脑、网络与消费性电子产品等领域。IEEE 曾经将蓝牙技术标准化为 IEEE 802.15.1,但是这个标准已经不再继续使用。
蓝牙版本 | 发布时间 | 最大传输速度 | 传输距离 |
---|---|---|---|
蓝牙 5.3 | 2021 | 2 Mbit/s | 300 米 |
蓝牙 5.2 | 2020 | 2 Mbit/s | 300 米 |
蓝牙 5.1 | 2019 | 2 Mbit/s | 300 米 |
蓝牙 5.0 | 2016 | 2 Mbit/s | 300 米 |
蓝牙 4.2 | 2014 | 24 Mbit/s | 50 米 |
蓝牙 4.1 | 2013 | 24 Mbit/s | 50 米 |
蓝牙 4.0 | 2010 | 24 Mbit/s | 50 米 |
蓝牙 3.0+HS | 2009 | 24 Mbit/s | 10 米 |
蓝牙 2.1+EDR | 2007 | 3 Mbit/s | 10 米 |
蓝牙 2.0+EDR | 2004 | 2.1 Mbit/s | 10 米 |
蓝牙 1.2 | 2003 | 1 Mbit/s | 10 米 |
蓝牙 1.1 | 2002 | 810 Kbit/s | 10 米 |
蓝牙 1.0 | 1998 | 723.1 Kbit/s | 10 米 |
根据上面这个表提供的数据,现在主流的蓝牙 4 和 5,传输速率均低于 2 Mbit/s,距离均低于 300 米。
蓝牙的高速传输需要借助 WiFi,非常鸡肋。
EDR(Enhanced Data Rate)
HS(High Speed)
您的所有设备都需要最新的蓝牙版本吗?
由卡尔文·万赫德
10 月 6, 2024
https://www.androidauthority.com/bluetooth-versions-3488170/
在短短几十年的时间里,蓝牙已经从一个小众的无线协议发展成为一种无处不在的技术,我们每天都依赖它来连接从耳机到智能家居设备的所有设备。它现在是短距离无线通信的首选标准,也许只有 Wi-Fi 能超越它的实用性和普及性。
但是,虽然蓝牙表面上看起来是一项相当稳定且平淡无奇的技术,但多年来该协议实际上已经发生了几次重大变化。事实上,一些较旧的蓝牙版本的好处仍然没有进入我们的设备。
幸运的是,我们的设备支持多个蓝牙版本,并根据可用性和用例自动选择最佳版本。但是每个主要和次要蓝牙版本有什么区别,哪个是最新的呢?以下是您需要了解的一切。
无需深入研究蓝牙的历史,该技术最初是为了将蜂窝连接集成到笔记本电脑中而发明的。在 1990 年代后期,IBM 和 Ericsson 的工程师意识到,由于高功率要求,将手机直接集成到笔记本电脑中是不可行的。因此,他们决定依靠 Ericsson 自 1994 年以来一直在开发的低功耗通信协议。他们从理论上推测,这项技术将允许手机和笔记本电脑进行短距离通信。
IBM 和 Ericsson 向其他公司开放了这项技术,这导致了蓝牙特别兴趣小组 (SIG) 的诞生。SIG 于 1999 年推出了第一个蓝牙版本,随后推出了展示该技术的免提手机。然而,目前市场上没有手机支持该技术。第一款配备蓝牙的手机仅在两年后的 2001 年发布。
蓝牙 1.0 是作为串行电缆的无线替代品而开发的。
尽管如此,爱立信开发蓝牙 1.0 主要是作为 RS-232 标准的无线替代品,RS-232 标准是当时计算机的常见功能。RS-232 串行电缆用于鼠标和键盘等外围设备以及用于拨号互联网的调制解调器连接。然而,这些端口又大又笨重。
所有这些都表明,1999 年的蓝牙与今天的蓝牙相差不远——一种用于无线连接设备的多功能、低功耗解决方案。主要动机是便利,即使在今天,无线耳塞取代了智能手机上古老的耳机插孔,情况仍然如此。
第一个版本的蓝牙存在一些缺陷,例如传输速度有限和最大范围仅为 10 米。
蓝牙的第二个版本于 2004 年发布,带来了一些急需的升级,其中最主要的功能是增强数据速率 (EDR)。后者使该技术能够实现高达 3 Mbps 的速度,从而支持无线音频等新用例。它还使一台计算机能够同时连接到多个设备,这意味着您可以同时使用蓝牙键盘、鼠标和打印机。
蓝牙 2.0 还能够比第一个版本传输更远的距离。它的最大射程为 30m,是原始标准的三倍。
2007 年,蓝牙 2.1 引入了一种称为安全简单配对 (SSP) 的新配对机制,极大地改善了用户体验和连接安全性。如果您曾经在配对两个蓝牙设备时比较并确认过 PIN,您可能已经熟悉 SSP。这为不安全的固定 PIN (如 0000)提供了一种更安全的替代方案,在蓝牙 2.1 发布之前,这些 PIN 通常用于配对。
蓝牙 3.0 于 2009 年推出,由于一项称为高速 (HS) 的可选功能,引入了显着的速度提升。这使得蓝牙设备能够实现高达 24 Mbps 的数据传输速率,但有一个很大的警告:快速的实际数据传输不会通过蓝牙链接本身进行。相反,蓝牙仅用于配对和通信,而实际的数据传输是通过 Wi-Fi 进行的。
当然,高速数据传输要求设备同时包含蓝牙和 Wi-Fi 硬件。虽然此类设备确实已经存在,但很少有制造商采用该功能。蓝牙规范将蓝牙 3.0 的 HS 部分设为可选部分也无济于事。
蓝牙 3.0 最终比其他版本鲜为人知,尽管它为技术带来了有意义的升级。例如,当设备处于不同范围时,增强的功率控制为改进电源管理铺平了道路,并减少了不必要的电池消耗。
Galaxy Watch 4 与 Galaxy A51 手机配对。
当蓝牙 4.0 宣布并被 Bluetooth SIG 接受时,该技术已在便携式设备上变得司空见惯。然而,随着该技术开始用于在设备之间长时间传输数据,电池寿命是一个大问题。那时,始终连接的可穿戴设备和蓝牙耳塞的概念刚刚出现。
为了支持这些应用,Bluetooth SIG 决定将该技术的开发分为两条不同的路径。第一个被称为 Classic Bluetooth,从以前的版本继续,没有对协议进行重大更改。但是,4.0 版本还引入了低功耗蓝牙 (BLE),专为低功耗设备设计,可在保持连接的同时消耗尽可能少的功率。
低功耗蓝牙为现代可穿戴设备和无线音频产品铺平了道路。
低功耗蓝牙适用于需要短时间传输数据的设备,例如当您的可穿戴设备与手机同步步数数据时。蓝牙 4.2 等后来的修订版还针对智能家居行业带来了隐私和安全增强功能,允许传感器传达运动检测等触发器。然而,后者从未真正起飞——当今绝大多数消费类智能家居产品都使用 Zigbee 等竞争性无线标准,而不是 BLE。
尽管如此,低功耗蓝牙仍然改变了游戏规则。该技术旨在在纽扣电池上运行数月甚至数年,从而将具有外形尺寸的新设备推向市场。更好的是,设备可以同时支持 Bluetooth Classic 和 LE 变体,并根据需要在它们之间切换。
蓝牙 5 于 2016 年发布,占据主导地位。SIG 继续分别开发 Bluetooth Classic 和 LE,每个分支都获得了有用的功能。
例如,通过蓝牙 5 低功耗链路的传输速度是上一代的两倍,最高可达 2 Mbps。设备还可以牺牲数据速度来获得四倍的距离,在理想条件下最高可达 240 米。蓝牙 5 率先提供带宽灵活性 — 设备可以选择优先考虑更远的距离、低能耗使用或高传输速度。这意味着可以开发新的蓝牙编解码器来提高音频质量,同时仍受益于 BLE 的低功耗。
2019 年,蓝牙 5.1 引入了测向功能,可以精确追踪到几厘米。虽然超宽带 (UWB) 技术已成为智能追踪器的行业标准,但蓝牙现在可用于粒度较小的跟踪应用。
仅仅一年后,我们就看到了蓝牙 5.2 和 LE Audio 标准的发布。后者包括一个新的低复杂度通信编解码器 (LC3)。LC3 以较低的比特率提供卓越的音频质量,同时还利用了蓝牙 LE 的低功耗。
到 2020 年,像 Apple AirPods 这样的真无线耳塞已经获得了巨大的发展势头。然而,Bluetooth Classic 老化的 SBC 编解码器在音频质量方面还有很多不足之处。LC3 以较低的比特率提供更好的质量,同时在此过程中延长电池寿命。
蓝牙 5.2 引入了 LE Audio 和用于高质量无线音频的新编解码器。
蓝牙 5.2 还引入了对音频广播或 Auracast 的支持。该功能允许一个蓝牙源将音频流式传输到多个接收器。这意味着您可以同时将手机的音频输出到朋友的耳塞和您自己的耳塞。该版本还增加了对助听器的支持——想象一下使用 Auracast 将音频从单个来源输出到分布在剧院或体育场的多个助听器。
蓝牙 5.3 和 5.4 分别于 2021 年和 2023 年发布,带来了稳定性和连接性的改进。虽然这些版本没有为该技术带来任何华丽的新功能,但蓝牙 5.4 引入了对带响应的定期广告 (PAwR) 的支持。该功能允许单个蓝牙信标同时向多达 7,000 台设备广播消息。这在哪些方面有用?在采用电子货架标签(通常是电子墨水)的大型商店中。以前的蓝牙版本需要每个标签的往返通信,这会导致大型商店的更新延迟。
智能手机上 AirTag Stock 照片 1 旁边的 Apple Find My 徽标
经过近十年的小版本更新,Bluetooth SIG 终于在 2024 年 8 月 27 日宣布了下一代主要蓝牙。这使得蓝牙 6.0 成为当今可用的最新版本,尽管您必须等待一段时间才能让消费设备采用它。
蓝牙 6.0 的亮点新功能是蓝牙信道探测,它允许设备准确测量彼此之间的物理距离。前几代人依靠信号强度来估计距离,这对于智能锁和车钥匙来说不够准确。蓝牙信道探测使用往返时间 (RTT) 和基于相位的测距 (PBR) 进行精确的距离测量,类似于 UWB。
在其他地方,蓝牙 6.0 为音频应用带来了更多的安全性和效率改进以及更低的延迟。第一批支持蓝牙 6.0 的设备应该会在 2025 年出现。
CentOS 下的安装:
sudo yum install -y httpd-utils
Debian/Ubuntu 下的安装:
sudo apt install -y apache2-utils
ab -n 请求数 -c 并发书 URL
常用参数:
-n
请求数-c
并发数-t
持续测试时间-k
启用 HTTP KeepAlive-H
设置请求头-m
请求方式-T
设置 Content-Type-p
设置 POST 数据文件如果 POST 请求:
echo 'key1=value1&key2=value2' > /tmp/postdata
-T 'application/x-www-form-urlencoded' -p postdata
echo '{"key1":"value1","key2":"value2"}' > /tmp/postdata
-T 'application/json' -p postdata
执行 ab -n100 -c10 https://www.baidu.com/
可以得到以下结果:
需要重要关注的数据做了标记,分别是:
测试持续时间 / 请求数
并发数 / 吞吐量
Update @ 2021-12-29
url="https://www.baidu.com/"
rm -rf /tmp/httpbench-*.log
for c in {1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,150,200,250,300,350,400,450,500,600,700,800,900,1000};
do echo "==== Concurrency Level: $c ===="; let n=$((c * 100)); ab -n $n -c $c $url > /tmp/httpbench-$c.log; sleep 10; done;
然后用 Python 脚本解析 ab 输出生成报告。
Python 代码就不贴了, 如果感兴趣可以打开看看: abReport.py
如果觉得我的方案不妥当,非常欢迎提出意见或建议。
Update @ 2021-12-30:
又对 abReport.py
做了调整 (abReport2.py),现在可以输出一个 ECharts 图表了(尽整些花里胡哨的东西)。
时间是客观存在的,但我们对时间的认识却是主观的。
我们的计时方法深受我们的语言和文化的影响。