编码 读书笔记

怎么知道的这一本书

之前在 Twitter 上看到一则帖子,有人求推荐书,如果要向一位学金融的朋友推荐一本计算机入门书籍,你会选择哪一本?在答复里面,我看到了有人推荐这一本《编码:隐匿在计算机软硬件背后的语言》。所以我把这一本书作为 [[20220627 21 天挑战计划]] 中要阅读的一本书。当时我没有想到的是,在豆瓣标记的时候我意外发现我早已经在 2018 年标记读过,但当时没有做笔记,也没有整理标记,4 年过去,就像没有读过一样。这更加坚定了我之后读书一定要整理书摘,用自己的语言撰写一下读书笔记的决心。

几句话总结书的内容

编码是一本由实体世界中信息传递,进而一步步带领读者进入计算机编码的通俗读物。作者会使用通俗易懂的语言,循序渐进地引领读者理解计算机是如何工作的。

什么是编码?

作者在本书的开头引用了《美国传统英语词典》对编码(code)的解释:

  • 3.1 a system of signals used to represent letters or numbers in transmitting messages
  • 3.2 a system of symbols, letters, or words given certain arbitrary meanings, used for transmitting messages requiring secrecy or brevity
    1. a system of symbols and rules used to represent instructions to a computer

这其中可以看到两层含义,一种是表达在信息传输过程中用来表述字母或数字的信号,可以是直接的信号,也可以是加密的,或简练的信息;另外一层含义是由字符和规则组成的系统用来向计算机传达指令。

同样在《牛津高阶英汉词典》中的解释更为直接:

    1. a system of computer programming instructions

也就是,计算机编程指令系统。

而在本书中,编码特指的是在机器和人之间传递信息的方式。我们所编写的代码,需要让计算机可以理解执行。

莫尔斯编码

我们都知道一个国际求救信号 SOS,但为什么是 SOS 呢,是什么的缩写吗?是比较好读吗?其实都不是,而原因是因为在莫尔斯编码中,S 是三个点,而 O 是三个划(-),SOS 是一个比较容易记忆的编码序列,并且不容易和其他序列搞混。于是这个编码就作为国际通用的求救信号留了下来。

莫尔斯编码通过对字母进行点和划的编码以实现信息的传递,但这个效率无疑是比较低的,如果在手动操作的情况下,每分钟也只能传递各位数字的单词,而通过口头交流可以达到每分钟 100 个单词左右的速度。

布莱叶盲文

布莱叶盲文通过凸起的点编码文字,使得盲人可以阅读。布莱叶盲文通过三行两列的六个凸起的点编码信息,布莱叶盲文也是一种二进制编码方式,每一个凸起的点可以表示两种状态,通过不同的组合,六位的编码可以表达出 2^6,也就是 64 种不同的编码。

除了 24 个字母,为了使用的简便,后续人们还引入了字母组合,常用单词,充分利用这 64 种不同的变化。

手电筒

作者在介绍了莫尔斯编码和布莱叶盲文之后用了整整一章的内容介绍了手电,以及基本的电路知识,也许你会感到奇怪为什么在这个时候介绍了这么多电流、电压、电阻、功率的知识。但电气化的开始才是之后计算机时代来临的前提。

欧姆定律:

I = E / R

电流(I)等于电压(电动势 E)除以电阻(R)。

瓦特:

P = E * I

瓦特等于电压(E)乘以电流(I)。

但作者真正要介绍的并不是这些物理知识,而是控制电灯的开关,这一个开关,又可以将一个最简单的电路(手电)变成一个二进制的编码,开和关分别是两个状态。

电报机和继电器 电报系统

电报系统的诞生正式开启了全球即时通信的时代,但是电报是怎么来的呢?想想一想如果将一个简单的控制电灯开关的电路系统分别放到你和朋友的家中,那你们就可以分别通过开关来控制对方家中的电灯,那么就可以信息的传递。电路系统使用的原理就是如此:在线路的一端通过一些措施,使得线路的另一端发生某种变化。

[[萨缪尔 莫尔斯]] 通过电磁现象在 1836 年通过专利局,成功发明电报机,但直到 1843 年,才说服国会为其创建公共基金。1844 年 5 月 24 日,华盛顿特区和马里兰州巴尔迪摩市电报线路架设完成,完成了人类历史上第一条信息的传递:「What hath God wrought!」

电报机的发明标志着现代通信的开始,人们第一次能够在视线或听力之外的距离开始实时交流,信息的传递速度比骏马还有快。

但是电报机最大的问题是长导线带来的电阻,电报线路使用高达 300 伏的电压使得有效距离可以超过 300 英里,但线路还是无法无限延长。

于是人们发明了中继系统,每隔 200 英里设定一个中继,接收信息,然后再转发出去。于是人们发明了继电器。通过电路的方式将信息转发出去。

阿拉伯数字 十进制

全球通用的数字系统通常被称为阿拉伯数字,起源于印度,被阿拉伯数学家带入欧洲。波斯数学家穆罕默德·伊本穆萨·奥瑞兹穆(根据这个人的名字衍生出英文单词 algorithm)在公元 825 年写了一本关于代数的书,使用了印度计数系统。

  • 阿拉伯数字系统和位置有关,一个数字的位置不同,表示计量不同
  • 没有专门用来表示数字 10 的符号
  • 比代表数字 10 的符号还有用得多嗯符号 0

这个 0,是数字和数学史上最重要的一个发明。0 的出现简化了乘法和除法。

十进制的代替

因为人类是有 10 个手指,所以适应了 10 进制,于是作者通过循序渐进的方式提问,如果是 4 指动物呢?于是进一步介绍了 8 进制,再如果是龙虾呢?两个大钳子,4 进制,再如果是海豚呢?两个鳍,2 进制。

当我们把数字系统减少到只有 0 和 1 的二进制系统时,我们无法找到比二进制系统更加简单的数字系统了。但是之前提到过的所有开关、电线、灯泡、继电器都可以用来表示二进制的 0 和 1。

二进制

1948 年,美国数学家约翰·威尔德·特克(John Wilder Turkey)意识到随着计算机的普及,二进制可能为发挥极大作用,所以发明了一个新的、更短的词语来替代不方便的 binary digital,选择了短小、简单、精巧的词 bit。

逻辑与开关

交换律:

A + B = B + A
A * B = B * A

结合律:

A + (B + C) = (A + B) + C
A*(B*C) = (A*B)*C

分配率:

A*(B+C) = A*B + A*C

传统代数是处理数字的,布尔的天才在于将代数从数的概念中抽离出来,更加抽象。在布尔代数中,操作数不是数字而是类(class),简单来说,一个类就是一个食物的群体(集合 Set)。

布尔代数中,符号 + 表示两个集合的并集,x 表示两个集合的交集。

但是布尔生活的那个时代,没有人把布尔代数用于电路。直到 20 世纪 30 年代的香农。

逻辑门

克洛德·艾尔伍德·香农在 1938 年,完成了《继电器和开关电路的符号分析》(A Symbolic Analysis of Relay and Switching Circuits)一篇著名的硕士论文,并在 10 年之后,发表《通信的数学原理》(The Mathematical Theory of Communication) 清晰尔严谨地阐述了,电子工程师可以运用布尔代数的所有工具去设计开关电路。如果简化了一个网络的布尔表达式,那么也可以简化相应的电路。

于是人们在简单的电路基础上抽象出了与门、或门、与非门、与或门等等。

字节与十六进制

8 比特表示一个字节(byte),8 比特在很多方面都比单独的比特更胜一筹。

全世界大部分书面语言(除了中日韩中使用的象形文字)的基本字符都少于 256 ,字节是一种理想的保存文本的手段。

当一个字节无法表示所有信息时,使用两个字节,也可以很好的表达。

从算盘到芯片

20 世纪 40 年代初期,真空管开始取代继电器,到 1945 年,真空管已经完全取代了继电器。

晶体管不再需要真空而是使用固体制造,体积比真空管更小,晶体管需要的电量更小,产生的热量更小,更持久耐用。

开发真空管的最初目的是为了放大电信号,但是同样可以应用于逻辑门的开关,作用和晶体管一样。

诺伊斯在 1957 年与其他 7 位科学家离开肖克利半导体创办仙童(Fairchild)半导体公司,并随后发明了集成电路。

1965 年摩尔(Moore)发现从 1959 年开始,同一块芯片上可以集成的晶体管数目每年番一倍。

到 20 世纪 70 年代,使用集成电路在一块电路板上制造一个完整的计算机处理器变得可能。

在比较微处理器时使用三个标准:

  • 多少位处理器,表示数据宽度,能够处理加减的比特位数
  • 最大时钟频率,单位 Hz,连接到微处理器并驱动运行的振荡器的最大频率,超过此时钟频率,微处理器将不能正常工作
  • 可寻址存储器的字节数

到 1972 年 4 月,英特尔发布 8008 芯片,一个时钟频率位 200KHz,可寻址空间为 16 KB 的 8 位微处理器。

启发或想法

虽然看到介绍已经大致了解了这绝不是一本晦涩难懂的书,但还是惊讶于作者可以将电路,布尔代数等等复杂的概念如此深入浅出地描述给作者,并且中间穿插非常多的物理学、数学发展历史,以及历史上这种对计算机硬件发展起决定性作用的部件,继电器,晶体管等等,让这一本书不但在了解计算机组成部分之外还了解到了大量有趣的历史决定时刻,让我感受到了那个天才,英雄辈出的时代精神。

在读书的过程中,不断地有各个时期学过的课程浮现在眼前,物理中的电磁学,到大学时期的,电路,代数,汇编等课程,在阅读的过程中非常享受所有知识融为一体的感觉。

曾经有一个问题总是困扰着我,[[人类为什么在近 200 年发展如此快]]?在这一本书中我更进一步的体会到了如下的几点:

  • 人类信息交换的速度变快了,这也就意味着[[波普尔]]所说的假设验证的速度变快了,在地球一端所提出的概念,可以在地球的另一端被验证。而这一过程恰恰是伴随着电路,电报,计算机,网络的发明而发生的
  • 社会的分工和合作,知识的交换创造了更高的价值,知识的自由分享产生了巨大的复利,[[布尔]]多年前的代数理论,[[冯诺伊曼]]构想的计算机结构,等等一系列思想的发展总是以超前的姿态引领着人类科技的发展

谁应该看这本书

  • 想要了解计算机是如何工作的人
  • 想要了解计算机发展历史的人

印象深刻的 Quotes

在作者对芯片的描述中,作者总结出三点去描述微处理器,时钟频率,可寻址字节数,以及位数,而这三者则是作者铺垫了非常多章节的内容,当我读到时顿时感受到了作者清晰的写作思路。


2022-07-03 reading , reading-2022 , code , computer , computer-language , encoding , computer-software , language

Plex Media Server 备份恢复和数据迁移

这些年来逐渐将我的音乐库迁移到了 Plex Media Server 上,因为之前部署的 Plex 是用了 Docker,迁移到独立主机之后想直接安装,所以想将之前的 Plex 数据迁移出来,直接恢复使用。

备份

备份是一定要做的事情,为了数据安全。

通常 Plex 中的媒体文件都会用 [[Syncthing]] 来做一份备份冗余,但是 Plex Media Server 生成的媒体文件,包括 viewstates, metadata, settings 等等就需要直接去备份 Plex Media Server 的内容了。

在 Debian/Fedora/CentOS/Ubuntu 中:

/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/

数据库地址

Plex 在本地使用 SQLite3 存储数据。

在 macOS 上:

~/Library/Application\ Support/Plex\ Media\ Server/Plug-in\ Support/Databases/com.plexapp.plugins.library.db

Windows 上:

"%LOCALAPPDATA%\Plex Media Server\Plug-in Support\Databases\com.plexapp.plugins.library.db"

在 Linux 上(包括 NAS):

$PLEX_HOME/Library/Application\ Support/Plex\ Media\ Server/Plug-in\ Support/Databases/com.plexapp.plugins.library.db

备份时不要对备份的数据进行任何修改,防止备份数据库出错。

如果修改了本地媒体文件的地址,需要更新数据库:

UPDATE `section_locations` 
   SET `root_path`=
       REPLACE(`root_path`, 
               '/Old_PATH/', 
               '/NEW_PATH/')
WHERE `root_path` like '%Old_PATH%';

如果确定需要修改数据库中的路径,那么确保所有表中的路径都要修改。

移动媒体文件到另外的位置

如果只是升级磁盘,文件的目录没有变化,那么只需要在迁移之前停掉 Plex Media Server,然后升级完成之后再启动即可。

如果更改了媒体文件的路径,那么就需要多出几步。

  • 首先停用 Emptying of Trash
    • 在管理后台禁用 Empty trash automatically after every scan
  • 停止 Plex Media Server
  • 将文件内容拷贝到新的位置
  • 启动 Plex Media Server
  • 启动 Plex Web App
  • 编辑 Libraries ,添加新的位置到库中,暂时保留之前的文件路径,需要对每一个移动的库都操作一遍
  • 更新库,在添加之后,执行一次 Scan Library Files,服务器会检查新位置的文件内容,然后和已经有的媒体文件做关联
  • 等待完成扫描之后移除老的文件路径。

reference


2022-07-02 plex , plex-media-server , backup , syncthing

使用 Owncast 搭建自己的在线视频串流直播间

Owncast 是一个开源,可自行架设的、去中心化的,单用户视频串流工具。Owncast 使用 Go 语言编写。支持简单的在线聊天,支持 HLS 和 S3 存储。

Owncast 可以很好的成为 Twitch,YouTube Live 等等在线直播平台的代替。用户可以完整地控制自己的内容以及服务器。

Prerequisite

  • Ubuntu 20.04
  • [[FFmpeg]] 4.2 以上版本,需带有 x264/var_stream_map

Docker 安装

Docker compose1 如下:

version: '3.3'

services:
  owncast:
    image: 'gabekangas/owncast:latest'
    restart: always
    volumes:
      - '${CONFIG_PATH}/data:/app/data'
    ports:
      - '8080:8080'
      - '1935:1935'

启动容器之后,进入 /admin 页面,默认的用户名和密码是,admin 和 abc123

手动安装

安装 FFmpeg

apt update
apt install ffmpeg

下载 owncast:

mkdir -p /opt/owncast && cd /opt/owncast
wget https://github.com/owncast/owncast/releases/download/v0.0.2/owncast-0.0.2-linux-64bit.zip
unzip owncast-0.0.2-linux-64bit.zip

修改配置文件:

vim config.yaml

修改自己的串流秘钥和信息,样例文件内容如下:

# See https://owncast.online/docs/configuration/ for more details

instanceDetails:
  name: EV   //名称
  title: EV Live Stream  //网站标题

  logo:
    small: /img/logo128.png
    large: /img/logo256.png

  tags:
    - music
    - software
    - streaming

  # https://owncast.online/docs/configuration/#external-links
  # for full list of supported social links.  All optional.
  socialHandles:
    - platform: github
      url: http://github.com/owncast/owncast
    - platform: mastodon
      url: http://mastodon.something/owncast

videoSettings:
  # Change this value and keep it secure.  Treat it like a password to your live stream.
  streamingKey: secret_key   //串流秘钥

启动 owncast

./owncast

启动后查看日志文件 transcoder.log 如果没有报错着运行成功,如报错无法正常串流播放

可以使用 screen 或者 [[tmux]] 等工具在使用后台运行 owncast:

screen -S live  //创建新的命令行
cd cd /opt/owncast  //进入目录
./owncast  //执行脚本

服务器需要开放端口 1935,8080

设置 OBS 串流

服务器 rtmp://127.0.0.1/live 串流秘钥 [secret]

播放地址 http://127.0.0.1:8080

成功运行之后,日志文件在 transcoder.log

自动安装

cd /your/own/path
curl -s https://owncast.online/install.sh | bash

执行成功之后会返回默认的端口和默认的 streaming key。

cd owncast
./owncast
# change port
./owncast -webserverport 8095

配置 Nginx 反向代理,如果熟悉 [[Nginx Proxy Manager]] 也可以直接使用这个反向代理。

添加配置文件 vi /etc/nginx/conf.d/owncast.conf:

server {
    listen 80;
    server_name     你的域名;

    location / {
        proxy_pass http://127.0.0.1:8080;    #8080改为Owncast对外开放的端口,默认为8080
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

测试:

nginx -t

使配置生效:

nginx -s reload
sudo systemctl start nginx
sudo systemctl enable nginx
# 获取证书
sudo certbot --nginx

配置 [[systemd]],修改文件 vi /etc/systemd/system/owncast.service:

[Unit]
Description=Owncast Service

[Service]
Type=simple
WorkingDirectory=/your/own/path/owncast  #注意替换位置
ExecStart=/your/own/path/owncast/owncast  #注意替换位置
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

生效:

systemctl daemon-reload
systemctl enable owncast
systemctl start owncast

设置 OBS

OBS 官网 安装 OBS,在设置>服务中选择自定义(Custom),在管理员页面获取 RTMP 服务器链接和流密钥并填入 OBS 中,点击 Start Streaming 测试链接,开始推流。

FFmpeg

也可以直接从命令行使用 [[FFmpeg]] 来推流到 Owncast 服务器。

ffmpeg -re -i /path/to/video.mp4 -c copy -f flv rtmp://localhost:1935/live/secret_key
# or
ffmpeg -i "http://IP_OF_HDHR:5004/auto/vCH.N" -c:v libx264 -c:a aac -b:v 512K -maxrate 512K -bufsize 1M -f flv rtmps://OWNCAST_URL:PORT/live/STREAM_KEY
# or
ffmpeg -video_size 1280x720 -i $1 \
  -c:v libx264 -b:v 512k -maxrate 1984k -bufsize 3968k \
  -c:a aac -b:a 128k -ar 44100 \
  -f flv rtmp://live.einvrne.info/live/KEY

或者:

ffmpeg -f alsa -ac 2 -i hw:1,0 -thread_queue_size 64 \
  -f v4l2 -framerate 60 -video_size 1280x720 -input_format yuyv422 -i /dev/video2 \
  -c:v libx264 -preset veryfast -b:v 1984k -maxrate 1984k -bufsize 3968k \
  -vf "format=yuv420p" -g 60 -c:a aac -b:a 128k -ar 44100 \
  -f flv rtmp://<ip-of-your-server>/live/<your-streaming-key>

如果串流 MP4 遇到:

Codec mpeg4 is not supported in the official FLV specification,

解决方案:

ffmpeg -re -nostdin -i "$file" \
    -vcodec libx264 -preset:v ultrafast \
    -acodec aac \
    -f flv rtmp://<your-server>/app/STREAM_KEY

说明:

  • -vcodec codec 设置视频编码器,是 -codec:v 的别名
  • -acodec codec 设置音频解码器,是 -codec:a 的别名
  • -nostdin 表示禁止交互输入
  • -preset:v 表示使用 FFmpeg 默认的编码,按速度降序 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo
  • -f fmt 强制指定输入或输出的文件格式
ffmpeg -re -i ~/INPUT_FILE -vcodec libx264 -profile:v main -preset:v medium -r 30 -g 60 -keyint_min 60 -sc_threshold 0 -b:v 2500k -maxrate 2500k -bufsize 2500k -filter:v scale="trunc(oha/2)2:720" -sws_flags lanczos+accurate_rnd -acodec libfdk_aac -b:a 96k -ar 48000 -ac 2 -f flv rtmp://live.twitch.tv/app/STREAM_KEY

reference


2022-06-29 owncast , docker-compose , docker , livesteam , streaming

修复突然断电后 git 仓库 corrupt

今天在 Ubuntu 下编译项目,突然负载飙升到 140 多,然后整个系统就卡住,所有 UI 卡死,无奈之下只能对系统强制重启,不过重启之后发生了一件更严重的问题,当我访问我的项目,执行 git status 之后,显示:

error: object file .git/objects/2b/ca69094c49050b232756d8d862c39be9d4fe55 is empty
error: object file .git/objects/2b/ca69094c49050b232756d8d862c39be9d4fe55 is empty
fatal: loose object 2bca69094c49050b232756d8d862c39be9d4fe55 (stored in .git/objects/2b/ca69094c49050b232756d8d862c39be9d4fe55) is corrupt

git 仓库损坏了!虽然之前把 git 仓库放到 Syncthing 中同步也曾经出现过一次 corrupt 的情况,但是之前修复的时候已经把全部代码 push 到了远端仓库,所以直接重新拉一下代码就可以。

但是这一次我本地的分支没有推送到远端所有的修改还在本地,但是这个时候已经无法访问本地的分支代码了!

这个时候立马去网上 Google 解决办法,大部分的回答都让我删除掉 .git 目录,然后重新去远端获取。但这个方法一定会丢掉本地的修改,所以没有尝试,等到最后实在没有办法的时候再试试吧。

rm -fr .git  
git init  
git remote add origin your-git-remote-url  
git fetch  
git reset --hard origin/master  
git branch --set-upstream-to=origin/master master   

然后继续查看解决办法的时候发现了,可以使用:

git repair
git repair --force

执行完成之后,发现分支回来了。然后赶紧拉一下代码 git pull

之后在切换分支的时候发现本地的分支还在,所以基本完成修复。

另外一个项目也出现了相同的问题,不过本地分支名丢失了,不过还好之前合并过其他分支,在 git log 中找到之前的分支最后一次提交 commit id,重新 checkout 一个新分支即可。

深入 .git 目录 refs

Git 中大部分行为都会有一个 hash 来存储,可以使用 git show 52611da62ae41498fa186ec8b4913b5c7173a896 ,但是这需要用户记住所有的 hash 值,但 hash 值是一个随机的字符串,非常难以记忆,所以 Git 提供了一个 references(引用),或者简称 refs

引用是存储在 .git/refs 目录下的文件,通常这个文件中包含一个 commit object 的 hash。

$ ls -F1 .git/refs 
heads/
master
remotes/
tags/
v0.3

heads 目录中包含了所有本地分支,每一个文件都对应着一个分支名字,文件内容就是该分支最新的 commit hash。

在 Git 中,分支其实就是一个引用,修改 master 分支,其实 Git 只需要做的事情就是改变 /refs/heads/master 文件内容。而类似的,创建一个分支,其实就是将 commit hash 写到一个新的文件中。

而同样 tags 目录也是一样的,这个目录中包含标签的信息。

Special Refs

Git 也有一个特殊的引用,HEAD,这个一个当前分支的引用,而非对 commit hash 的引用。

cat .git/HEAD
ref: refs/heads/dev

可以看到的是当前正在 dev 分支。当然也可以将 HEAD 直接指向一个真实的 commit id,这个时候 Git 会提示 detached HEAD state,意味着你当前不是在一个分支上。

除了 HEAD 这个特殊的 refs,还有一些其他的:

  • FETCH_HEAD: 从远端最近一次拉取的分支
  • ORIG_HEAD: A backup reference to HEAD before drastic changes to it
  • MERGE_HEAD: The commit(s) that you’re merging into the current branch with git merge.
  • CHERRY_PICK_HEAD: The commit that you’re cherry-picking.

Reflog

Reflog 是 Git 的安全网,他会记录在仓库中所有的操作。可以将其想象成一个本地仓库修改的时序历史记录.

Git reflog 是一个你对本地仓库所作的所有修改的记录。每一次提交,每一次切换分支,都会在 reflog 中留下记录。

在 Git 仓库中执行:

git reflog
ceb40ab HEAD@{0}: commit: messsage

reference


2022-06-27 git , linux , git-repair , ubuntu

金融的本质 读书笔记

《金融的本质》是美联储主席[[本 伯南克]]关于美联储历史,以及在 2008 年应对金融危机手段的一本科普读物。本伯南克以非常通俗的语言讲述了美联储的历史,以及央行的职能。每一章节后面都有一个答学生的提问,所以看起来就像是一本写给学生的科普读物,读完可以对美联储是做什么的?为什么要成立美联储?以及当危机来临时美联储能够做什么?有非常详细的介绍和解释。

怎么知道的这一本书

在和朋友聊天的时候,说到美联储,于是朋友给推荐了这一本。

几句话总结书的内容

  • 美联储的起源与历史,以及美联储调整经济的手段
  • 本 伯南克应对金融危机的应对措施和后续影响
  • 危机之后有什么弥补手段

启发或想法

美联储的作用

美联储作为美国的央行,其决定对全世界的经济都会产生一定的影响,这两天美联储加息,股市暴跌,成为了日常的新闻。而美联储为什么要这么做呢?很多报道都会提到为了压制美国的通货膨胀,而为什么美联储能够通过调整利率来影响通货膨胀呢?这一本书里面都有详细的说明。

中央银行的职能:

  • 维持金融稳定,保证金融体系正常运行,缓解或阻止金融危机或金融恐慌
  • 维持经济稳定,保持经济增长,保持低通胀,避免大幅波动

美联储的影响经济的手段

显然为了实现央行的职能,美联储能够使用一些工具来调整经济运行。

  • 维持金融稳定,央行的工具是成为最后贷款人角色,为金融机构提供短期流动性和资金支持。
  • 为了维持经济稳定,央行最重要的工具是货币政策,在正常时期,货币政策主要体现为短期利率的调整。在通常情况下美联储可以通过在公开市场买卖证券(通常是短期政府债券),来降低或提高短期利率。当经济增长过缓或通胀水平过低时,美联储可以通过降息来刺激经济发展。

这里提到的短期利率,主要是对隔夜拆借利率的管理。也就是调整各银行向美联储借钱的成本,隔夜利率又称联邦基金利率。通过提高或降低短期利率,美联储可以影响更大范围的利率。

在最极端的情况下,如果调整货币政策已经无法影响经济,美联储还可以实行大规模资产购买计划,即媒体和其他地方所说的量化宽松。

基本工具:

  • 货币政策,隔夜拆借利率
  • 流动性供给(最后贷款人)

金本位的问题

什么是金本位呢?相信大部分人在教科书上曾经学过,简单来说就是一个国家的货币发行和黄金储备挂钩,央行有多少黄金才能发行多少货币,金本位是一种货币体系,在这个体系中,货币的价值以黄金的重量来衡量。这也就意味着手上的货币可以到央行兑换黄金。

但是也相信大部分人都知道金本位在上世纪已经破产了,大部分的国家已经抛弃了金本位。

金本位的缺点:

  • 资源浪费,开采,运输成本
  • 限制了货币供给,央行不能灵活地调整利率(在经济不景气时下调利率,在通胀时上调利率)
  • 金本位的国家货币之间形成一个固定汇率体系,一个国家货币供应量出现问题,会传导到另一个国家,从而剥夺另一个国家独立管理其本国货币政策的权力
  • 投机,短期的投机行为,挤兑银行

金本位的优点:

  • 维持货币价值的稳定,让通胀维持在一定水平(长期如此),但是短期会经常发生通货膨胀或通货紧缩

通货膨胀的本质

通货膨胀无论在何时何地都是一个货币现象。通过货币政策来维持过底的失业率,最终会引发通货膨胀。 价格是经济的温控器,是经济赖以运行的机制。所以,管控工资和物价意味着整个经济体存在短缺及其他各种问题。 低通胀是一件非常好的事情,长时间低而稳定的通胀率会使经济更加稳定,有利于保持健康的增长率和生产率以维持经济活动。

大而不倒

[[大而不倒]],有一部同名的纪录片讲述的就是 08 年金融危机之后,美国财政部长,联合美联储,巴菲特等等在经济中扮演重要角色的人物拯救华尔街金融机构的故事。而大而不倒也成为了经济中一个潜在的问题,如果一家机构大到足够影响经济,那么就不会让其轻易地倒闭,显然长期来看对于整个宏观经济是不利的。如果一个体系中存在一些企业“大而不倒”(too big to fail),那么这个体系一定存在某些根本性缺陷。

想要确保金融体系有所变革,为的是以后再有类似美国国际集团这样的系统重要性机构面临此类压力时,能够以一种安全的方式倒闭。


2022-06-21 reading , reading-2022 , financial , financial-crisis

若为自由故 读书笔记

《若为自由故:自由软件之父理查德·斯托曼传》是 [[Richard Stallman]] 的个人传记,在读完 [[自由软件 自由社会]] 的时候就把这一本书加入了待看列表。《自由软件 自由社会》中只介绍了 Stallman 关于自由软件的哲学思考,没有涉及到 Stallman 是怎么形成自己的思想的原由。而这一本传记能够更清楚的看到 Stallman 如何争取一台打印机驱动,到对争取软件自由运动的全部过程。

虽然站在 2022 年再去回顾这位传奇黑客有一点晚,并且 Stallman 固执的性格也常常出现在新闻中,但是这一切都无法抹去他在自由软件运动,在 GNU 项目,在自由软件基金会的贡献。

Richard Stallman 是谁?

鉴于可能有人不认识 Stallman,那么就从他的作品,Emacs 说起,这是一款可以并肩 Vim 的编辑器,Stallman 就是 Emacs 的原始作者,Stallman 还凭借一己之力创造了 GCC 编译器,GNU 项目,并且在专业律师的帮助下制定了 [[GNU General Public License]] GNU 通用许可证。

自由软件运动

Stallman 发起的自由软件运动,无疑也蕴含着一定的哲学思考,软件代码不可能完美无缺,所以最好的办法就是通过共享代码,通过不断地修改来逐渐完善。

没有人可以写出没有错误的代码。通过共享软件代码,黑客们把不断改进程序作为终极的目标,甚至超越了个人野心。

「自由」是一个抽象的名词,多少哲学家通过不同的角度去讨论自由,社会学的自由,个人的自由,[[消极自由]],[[积极自由]],而随着计算机,软件工程的发展,在数字领域如何获得个人的自由?Stallman 无疑给了我们一种思考的路径。尤其是伴随着互联网成长的我们,见证了太多的互联网服务关闭,见证了太多的软件停止维护,最后我们自己产生的数据变得不再是属于我们自己,曾经试过的软件再也无法打开。Stallman 个人的经历告诉我们,即使互联网服务给予了我们更多的便利,即使某些软件可以让我们更快的实现目标,我们也要时刻警惕,因为我们随时会失去自由。就像哈耶克曾经说得那样,「愿意放弃自由来换取保障的人,他最终既得不到自由,也得不到保障。」

Stallman 发起的自由软件运动究竟是什么呢? 可以参考 Stallman 关于 [[自由软件]] 的四大自由定义:

  • 基于任何目的、按自己的意愿运行软件的自由
  • 学习软件如何工作的自由,按意愿修改软件以符合自己需求的自由
  • 分发软件副本的自由
  • 将修改过的软件版本再分发给其他人的自由,这样整个社区就有机会共享你对软件的修改

简单来说就是运行、复制、学习、分发、修改的自由。

大教堂与集市

之前在阅读 [[大教堂与集市]] 的时候一直以为作者 [[Eric Raymond]] 是以商业公司开发模式和开源社区开发模式作为对比才写下的[[大教堂与集市]],但看完这本书,才知道原来 Raymond 在书中所指的大教堂模式指的是在 Stallman 领导下的 GNU 项目。整个 GNU 项目就是“大教堂”的开发模式,有计划地修建而成的宏伟的黑客精神的纪念碑,经得起时间的考验。另一方面,Linux 则更像是一个“嘈杂的大集市”,它是在 Internet 去中心化的松散组织结构中开发出来的。[[Linus Torvalds]] 所创建的这种「集市」开发模式反映了 Linus 的个性,作者写到,「从 Linus 的观点来看,最好的管理工作不是要加强对事情的控制,而是要保持思维的活跃度。」

自由软件和开源

在此之前,我几乎把自由软件和开源混为一谈,但显然如果代指同一个东西,人类没有必要发明两个名字,自由软件(Free software)和开源 (Open Source),显然 Stallman 是自由软件运动的发起者,他当然更支持自由软件,他在描述二者的区别时说道,「开源软件的观念更偏向于实用主义;而自由软件的观念则更强调用户自由。」当然自由软件和开源两者有很多共性的地方,支持 Open Source 的一派,部分原因是为了避免使用 Free 一词,

谁应该看这本书

想要了解计算机,尤其是自由软件发展历程的人。

Quotes

我希望每个人都能珍视自由,也能拥有自由。 没有人可以写出没有错误的代码。通过共享软件代码,黑客们把不断改进程序作为终极的目标,甚至超越了个人野心。

书摘


2022-06-14 free-software , open-source , stallman , software

微软新一代 CEO 萨提亚 纳德拉自传《刷新》 读书笔记

《刷新:重新发现商业与未来》是微软第三任 CEO [[萨提亚 纳德拉]] 的传记,好朋友之前推荐过一次,后来在听《无人知晓》播客的时候又再一次被提到,所以就把这一本列在了 [[20220605 21 天挑战计划]] 中。

让我想要去了解萨提亚的是,我能在最近几年中明显感受到微软的变化,从股价上也能看到资本市场对微软的重新定价。读完,我才真正明白一位 CEO 对于一个公司未来方向的决定作用,寻求合作,拥抱开放,萨提亚的出现成为了微软近几年转型的重要角色。但是在书中不仅能看到萨提亚在微软的经历,也能看到他的成长过程,以及关于他关于「同理心」的认识和实践。

最近几年微软的收购案也是让我对这位 CEO 产生好奇的原因,甚至金额越来越大:

  • 对 Minecraft 的收购
  • 对 GitHub 的收购
  • 对 LinkedIn 的收购
  • 对动视暴雪的收购

三句话总结书的内容

  • 萨提亚如何从印度移民到美国,在微软的工作,以及一步一步迈上 CEO 的经历
  • 带领微软文化转型,开放合作,拥抱开源
  • 对未来科技的畅想,云计算,混合现实,人工智能,量子计算

成长型思维

和成长型思维(growth mindset)对立的是固定思维(fixed mindset)。

萨提亚认为,一个人无法去准确地预测未来科技变化,但是成长型思维模式可以使他更好地对不确定性做出反应,并且在技术快速变化的情况下,去纠正自己所犯的错误,因此需要不断“刷新”。

这个思想和我刚刚看过的[[波普尔的哲学思想]]有着非常相似的思考路径,他们都认为我们无法避免犯错,唯一知道的就是去验证自己的思考,不断的纠正自己的过错。这个是萨提亚所说的「刷新」,也是波普尔所说的[[批判理性主义]]。我想这也是这本书标题「刷新」的由来。

批判理性主义提倡多元,包容,通过理性讨论和诚实寻求真相来解决冲突,萨提亚也认为「辩论和争辩的绝对必要」,通过相互交换意见想法,畅所欲言最后才能达到一个文化上的统一。

如何练习成长型思维

站在微软角度,纳德拉提出了三种方式练习成长型思维:

  • 以客户为中心,保持好奇心,用技术满足客户未能表达和未被满足的需求
  • 多元化和包容性
  • 打破壁垒

同理心

看完全书就会发现萨提亚在书中的每一个地方到提到了「同理心」,原文是 「Empathy」

同理心一词贯穿在全书中,我们可以理解成共情,同感,可以理解成换位思考,去设身处地地理解对方的思维、感受、想法,在后文萨提亚提到,「对残疾人抱以同理心,对在城市贫民区和锈带谋生的人们抱以同理心,对亚非拉发展中国家的人们抱以同理心,对努力获取成功的小企业主们抱以同理心,对任何因肤色、信仰或恋爱对象而遭受暴力和仇恨攻击的人抱以同理心。」,还包括对薪资不平等而提出疑问的女性的同理心,对普通职员的同理心,对经理的同理心。更进一步萨提亚将同理心作为信任中必不可少的一部分:

信任=同理心+共同的价值观+安全可靠

萨提亚提及的同理心来自于自己的求职精力,来自于自己的家庭,萨提亚在书中提到了一个面试插曲,当接受了一整天的面试,最后一位面试官问萨提亚,「如果看到一个婴儿躺在马路上哭,会怎么做?」,萨提亚回答了,「拨打911」,面试官在送萨提亚走出办公室的时候,和萨提亚说,「小伙子,你需要更多同理心,如果一个婴儿躺在马路上,你应该把这个婴儿抱起来」。这个故事让我一下子联想到最近发生的「唐山打人案件」,让我想起了[[小悦悦事件]],当有人被打到在地,当有小孩被车碾过,只要抱有一点点道德良知就应该知道,要做的事情并不只有报警而已。之后,萨提亚的第一个孩子因为重度大脑性瘫痪,未来将需要依赖轮椅生活,但这样的打击让萨提亚更能去理解孩子的遭遇,去理解他的痛苦。最后才会发出感慨,「只有经历过人生起伏,才能培养起同理心,要想不受苦难,或者少受苦难,就必须接纳无常」。

数字时代永恒的价值观

隐私,安全,言论自由是数字时代永恒的价值观。纳德拉从索尼被黑色入侵勒索开始,一直讲述到斯诺登。

后门,会导致安全被削弱,加剧不信任。故意设计后门,为访问某人的私人数据提供便利是一件危险的事情

隐私和安全最终的解决办法是确保彼此的信任。只有保护个人自由的规则清楚明了并且得到一致的遵守,构建和维持这种信任,在个人和公共责任之间找到平衡,向来是制度进步的特征。这是一门艺术,而非科学。

科技公司必须把信任科技到一切,信任不仅取决于技术,还有赖于管理它的法律框架。纳德拉认为在数字世界,信任的天平被打破了,因为法律没有跟上技术的变革。

同样在书中能看到纳德拉认同美国[[宪法第一修正案]]中保证的言论自由,[[宪法第四修正案]]保护美国人不接受不合理搜查和拘押的权利。他以自身的经历去思考印度的历史,去回顾美国司法历程,他主张通过制定新时代的法律来保证个人隐私得到保护的同时为执法机关访问数据提供便利。

三个 Quotes

也许我们的产品会瞬间即逝,但我们的价值观是永恒的。

刷新 书摘


2022-06-10 reading , reading-2022 , microsoft , biography

利用 Shaarli 搭建个人的在线书签管理

Shaarli 是一个使用 PHP 编写的,开源的,可自行搭建的书签服务,无需数据库依赖。在很早几年曾经出现过一款叫做 Delicious 的在线书签收藏和分享的网站,但今天一查也早已经在 7 年前关闭了。这些年兜兜转转发现还是当只有自己掌握了软件、数据才是最安全的,不管是本地的应用还是在线的服务,越来越觉得 [[Richard Stallman]] 所提及的自由软件之珍贵。

这篇文章就简单的介绍一下 Shaarli 搭建的过程。

Installation

使用 Docker 安装

version: '3.3'

services:
  shaarli:
    image: shaarli/shaarli:latest
    container_name: shaarli
    restart: always
    ports:
      - '${PORT}:80'
    volumes:
      - '${SHAARLI_DATA}:/var/www/shaarli/data'
      - '${SHAARLI_CACHE}:/var/www/shaarli/cache'

后续的更新维护在 dockerfile

安装完成之后,因为我使用外部的文件夹挂载,可能存在问题,使用 docker-compose logs -f 查看日志,发现错误:

shaarli  | 2022/07/09 08:00:46 [error] 10#10: *1 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught RuntimeException: The file could not be opened. Check permissions. in /var/www/shaarli/vendor/katzgrau/klogger/src/Logger.php:134
shaarli  | Stack trace:
shaarli  | #0 /var/www/shaarli/index.php(59): Katzgrau\KLogger\Logger->__construct()
shaarli  | #1 {main}
shaarli  |   thrown in /var/www/shaarli/vendor/katzgrau/klogger/src/Logger.php on line 134" while reading response header from upstream, client: 11.22.33.44, server: , request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm.sock:", host: ":8080"
shaarli  | 11.22.33.44 - - [09/Jul/2022:08:00:46 +0000] "GET / HTTP/1.1" 500 5 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36"

需要调整文件夹的权限。1

docker exec -it shaarli chown -R nginx: nginx /var/www/shaarli/data
docker exec -it shaarli chown -R nginx: nginx /var/www/shaarli/cache

或者改写,直接使用 Docker volumes,避免权限的问题。

和 Nginx Proxy Manager 一起使用

假设已经使用了 Nginx Proxy Manager 反向代理了,那么在 Nginx Proxy Manager 中创建一个 Host,然后填入

nginx proxy manager shaarli

浏览器书签栏按钮

将下面的 shaarli.your_domain.com 替换为自己的域名:

javascript:(          function()%7B            var url %3D location.href%3B            var title %3D document.title %7C%7C url%3B            var desc%3Ddocument.getSelection().toString()%3B            if(desc.length>4000)%7B              desc%3Ddesc.substr(0,4000)%2B%27...%27%3B              alert(%27 所选文本太长,将会被截断。%27)%3B            %7D            window.open(              %27https:///shaarli.your_domain.com/admin/shaare%3Fpost%3D%27%2B encodeURIComponent(url)%2B              %27%26title%3D%27%2B encodeURIComponent(title)%2B              %27%26description%3D%27%2B encodeURIComponent(desc)%2B              %27%26source%3Dbookmarklet%27,%27_blank%27,%27menubar%3Dno,height%3D800,width%3D600,toolbar%3Dno,scrollbars%3Dyes,status%3Dno,dialog%3D1%27            )%3B          %7D        )()%3B

然后就可以在浏览器中点击这个书签栏上的按钮一键添加当前 URL 到 Shaarli。

  • [[Wallabag]]
  • [[onenav]]
  • [[Shiori]]
  • [[Huntly]]
  • [[linkwarden]]

2022-06-09 shaarli , docker , bookmarking , self-hosted , read-it-later , reader , webpage , link

在 Proxmox VE 上使用 S.M.A.R.T 信息监控硬盘状态

自己组的 NAS,是用 Proxmox VE 做虚拟化,然后再其中安装了 OpenMediaVault 作为 NAS 系统,因为时间有些久1,所以不免有点担心硬盘的寿命,所以今天来好好了解一下 SMART 信息,并对磁盘进行一个全面的诊断,以保护数据的安全。

S.M.A.R.T 信息

查看 S.M.A.R.T 信息是用来监控硬盘健康状态最直接的办法。

S.M.A.R.T 全称是 Self-Monitoring, Analysis and Reporting Technology,这是硬盘内建的一种状态检测和预警规范。2

SMART 信息中包含了硬盘的运行信息,包括硬盘的工作时间,通电次数,盘片温度,坏块的数量,写入量,读取量等等

Proxmox VE Disks

在 Proxmox VE 后台能直接通过界面查看到磁盘的 SMART 信息。

点击左侧的 PVE 节点,然后在 Disks 中就能查看到磁盘的信息。

pve smart value

smart value

如果熟悉命令行,也可以直接 SSH 登录之后执行:

smartctl --all /dev/sda

同样能获取到 SMART 信息。

root@pve:~# smartctl --all /dev/sda
smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.4.143-1-pve] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Seagate BarraCuda 3.5
Device Model:     ST4000DM004-RRRRR
Serial Number:    WFNRRRRR
LU WWN Device Id: 5 000c50 0cd3f38d9
Firmware Version: 0001
User Capacity:    4,000,787,030,016 bytes [4.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    5425 rpm
Form Factor:      3.5 inches
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-3 T13/2161-D revision 5
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Sun Jun 12 10:30:29 2022 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x00) Offline data collection activity
                                        was never started.
                                        Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever
                                        been run.
Total time to complete Offline
data collection:                (    0) seconds.
Offline data collection
capabilities:                    (0x73) SMART execute Offline immediate.
                                        Auto Offline data collection on/off support.
                                        Suspend Offline collection upon new
                                        command.
                                        No Offline surface scan supported.
                                        Self-test supported.
                                        Conveyance Self-test supported.
                                        Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                                        power-saving mode.
                                        Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                                        General Purpose Logging supported.
Short self-test routine
recommended polling time:        (   1) minutes.
Extended self-test routine
recommended polling time:        ( 475) minutes.
Conveyance self-test routine
recommended polling time:        (   2) minutes.
SCT capabilities:              (0x30a5) SCT Status supported.
                                        SCT Data Table supported.

SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   084   064   006    Pre-fail  Always       -       235499960
  3 Spin_Up_Time            0x0003   097   097   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       33
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   088   060   045    Pre-fail  Always       -       573161103
  9 Power_On_Hours          0x0032   080   080   000    Old_age   Always       -       17577 (6 153 0)
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       33
183 Runtime_Bad_Block       0x0032   100   100   000    Old_age   Always       -       0
184 End-to-End_Error        0x0032   100   100   099    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
188 Command_Timeout         0x0032   100   100   000    Old_age   Always       -       0 0 0
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   061   058   040    Old_age   Always       -       39 (Min/Max 31/42)
191 G-Sense_Error_Rate      0x0032   100   100   000    Old_age   Always       -       0
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       650
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       760
194 Temperature_Celsius     0x0022   039   042   000    Old_age   Always       -       39 (0 21 0 0 0)
195 Hardware_ECC_Recovered  0x001a   084   064   000    Old_age   Always       -       235499960
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
240 Head_Flying_Hours       0x0000   100   253   000    Old_age   Offline      -       17435h+59m+22.019s
241 Total_LBAs_Written      0x0000   100   253   000    Old_age   Offline      -       31388806852
242 Total_LBAs_Read         0x0000   100   253   000    Old_age   Offline      -       28853375635

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

其中比较重要的值。

01(001) Raw_Read_Error_Rate 底层数据读取错误率 
04(004) Start_Stop_Count 启动/停止计数 
05(005) Reallocated_Sector_Ct 重映射扇区数 
09(009) Power_On_Hours 通电时间累计,出厂后通电的总时间,一般磁盘寿命三万小时 
0A(010) Spin_Retry_Count 主轴起旋重试次数(即硬盘主轴电机启动重试次数) 
0B(011) Calibration_Retry_Count 磁盘校准重试次数 
0C(012) Power_Cycle_Count 磁盘通电次数 
C2(194) Temperature_Celsius 温度 
C7(199) UDMA_CRC_Error_Count 奇偶校验错误率 
C8(200) Write_Error_Rate: 写错误率 
F1(241) Total_LBAs_Written:表示磁盘自出厂总共写入的的数据,单位是LBAS=512Byte 
F2(242) Total_LBAs_Read:表示磁盘自出厂总共读取的数据,单位是LBAS=512Byte

ID

前两位十六进制数,括号中为对应的十进制,表示检测的参数,各个硬盘制造商大部分的 SMART ID 所代表的含义是一致的。但有的厂商也会根据自己的需求增减 ID。

ATTRIBUTE_NAME

属性名,ID 代码的文字解释。

FLAG

属性标志

VALUE

当前值,根据硬盘运行数据计算获得。

WORST

最差值,是硬盘运行时各 ID 曾出现过的最小 Value。

通常最差值与当前值是相等的,如果最差值出现较大波动,小于当前值,表明磁盘曾经出现过错误。

Threshold

在报告硬盘 FAILED 状态前,WORST 可以允许的最小值。

RAW_VALUE

原始值,是硬盘运行时各项参数的实测值。

TYPE

属性的类型(Pre-fail 或 Oldage)

WHEN_FAILED

如果 VALUE 小于等于 THRESH,会被设置成“FAILING_NOW”;如果 WORST 小于等于 THRESH 会被设置成“In_the_past”;如果都不是,会被设置成“-”。在“FAILING_NOW”情况下,需要尽快备份重要 文件,特别是属性是 Pre-fail 类型时。“In_the_past”代表属性已经故障了,但在运行测试的时候没问题。“-”代表这个属性从没故障过。

UPDATED

属性的更新频率。Offline 代表磁盘上执行离线测试的时间。

SMART 参数解读

01(001)底层数据读取错误率 Raw Read Error Rate

底层数据读取错误率,当前值应远大于临界值。

02(002)磁盘读写通量性能 Throughput Performance

数值越大越好。

当前值如果偏低或趋近临界值,表示硬盘存在严重的问题。但现在的硬盘通常显示数据值为 0 或根本不显示此项,一般在进行了人工脱机 SMART 测试后才会有数据量。

07(007)寻道错误率 Seek Error Rate

数据应为 0,当前值应远大于与临界值。

08(008)寻道性能 Seek Time Performance

表示硬盘寻道操作的平均性能(寻道速度),通常与前一项(寻道错误率)相关联。

09(009)通电时间累计 Power-On Time Count (POH)

表示硬盘通电的时间,数据值直接累计了设备通电的时长,新硬盘当然应该接近 0,但不同硬盘的计数单位有所不同,有以小时计数的,也有以分、秒甚至 30 秒为单位的,这由磁盘制造商来定义。 这一参数的临界值通常为 0,当前值随着硬盘通电时间增加会逐渐下降,接近临界值表明硬盘已接近预计的设计寿命,这并不表明硬盘将出现故障或立即报废。参考磁盘制造商给出的该型号硬盘的 MTBF(平均无故障时间)值,可以大致估计剩余寿命或故障概率。

对于固态硬盘,要注意“设备优先电源管理功能(device initiated power management,DIPM)”会影响这个统计:如果启用了 DIPM,持续通电计数里就不包括睡眠时间;如果关闭了 DIPM 功能,那么活动、空闲和睡眠三种状态的时间都会被统计在内。


2022-06-05 openmediavault , omv , nas , hard-disk , hard-disk

开放社会及其敌人 读书笔记

《开放社会及其敌人》是 [[波普尔]] 的一本政治哲学著作,是我 [[20220515-21-天计划]] 中的想要阅读的一本书,本来在上一个 21 天计划中就想要读完的,但是因为其内容复杂程度超出了我的想象,波普尔旁征博引,对柏拉图,黑格尔,马克思的观点信手拈来,但是我去消化的时候不仅需要先理解其引用的观点,还需要进一步去理解波普尔自己的观点,就使得我在上一个周期中没有完成,所以这一个 21 天计划依然把这本书列为必须要读完的图书之一。

最早知道[[波普尔]]是因为他在科学哲学领域提出的[[可证伪理论]],还有在看[[索罗斯]]传记的时候不停地引用波普尔的观点,进而我又看了其论文集[[通过知识获得解放]],进而逐渐对其理论形成了一个基础的概念,然后我才决定开始阅读这一本《开放社会及其敌人》,想要完整地了解波普尔在政治哲学领域的集大成之作。

什么是开放社会

什么是 [[开放社会]]

  • 知识可以更新、可证伪
  • 文化是多元的、宗教是多元的
  • 大众具有批判性思维,不盲从
  • 知识不断进化、发展,永无止境

[[封闭社会]]

  • 知识是确定的,甚至可能是最终真理
  • 文化单一、宗教单一,无神论
  • 批判思维几乎不可能
  • 知识停滞不前、甚至被摧毁

论历史主义和极权主义

批判 [[历史主义]],[[极权主义]]

  • 历史主义预先设定了权利应该掌握在了解历史规律的手中,只有了解历史规律的人才能顺应历史规律。这是为极权辩护。为独裁者所利用。独裁者无视人们的意愿,压迫人民,残酷对待人民,并声称这么做是为了人民的利益。是为了追求一个只有独裁者才能了解的历史目标。
  • 扼杀了表达的自由、思想的自由、同时扼杀了对当权者的批评。懂得历史规律的人不仅规定了人民应该做什么,不应该做什么,有权决定什么是合理的批评,什么是不合理的批评
  • 历史目标是一个长期的目标,独裁者的继任者是任命的,而不是人民选出来的,只有独裁者才能知道哪个继承者掌握了历史规律
  • 个人的权利(生命、自由、财产) 都受到了压迫,因为必须服从整个社会的目标,名正言顺的打压
  • 抹杀了个人的能动性

马克思的预言:

  • 社会主义革命首先发生在资本主义发达的国家
  • 资本主义国家的工人工资水平越来越低,生活水平越来越低

波普尔认为[[历史主义]] 为[[极权主义]] 提供了哲学基础。

波普尔所指的历史主义指的是历史决定论,认为历史有绝对的终极规律,人们可以通过认识和掌握历史规律,进而来控制和计划社会的发展。对波普尔而言历史主义和历史决定论是同义词。波普尔明确反对这种历史主义。

  • 人类历史的进程受到人类知识进步的影响
  • 我们无法以合理科学的方法来预言我们科学知识的增长,因此我们无法预言历史的进程
  • 我们无法像理论物理那样找到一个理论可以解释历史社会科学
  • 历史主义的基本目标和构思就是错误的

[[本质主义]]指的是事物依赖概念,根据其本质就可以明确的加以定义,然后就可以通过某种方式将世界放到一个逻辑和关系中。本质主义理论有几个假设:

  • 有一种本质理论应该能够解释我们看到的所有现象
  • 科学家能够确立这种理论的真理性
  • 理论是终极的

本质主义是一种固化的思维模式,是对确定性的追求。教条式的信仰容易禁锢我们的思想,让我们无法获得进步,真正的无知,不是知识的缺乏,而是拒绝获取知识。

一个严重的后果就是,接受历史主义的人会认为个体是一种工具,是人类历史发展过程中一个微不足道的工具。而登上历史舞台的人,要么是一个伟大的国家,要么是一个伟大的领袖,要么就是一个伟大的阶级或概念,只要能够发现历史发展的法则和规律,就能够成功的预测未来的发展。这个想法成为了 20 世纪政治发展的基础。

但是历史主义还保留了集体主义的要素,依然强调某种集团,或集体,这是原始时代,部落的遗存,个人离开了部落就无法生存,不过在 20 世纪,人们把部落替换成国家或阶级的概念,波普尔认为,历史主义的根本错误在于人类无法通过理性、科学的方法来预知未来,问题不是在预知上,而是人类可以改变历史进程,人类对未来的预言甚至可能改变预言事物本身,波普尔认为历史主义错误地把自然科学的研究方法运用到了人类社会中,自然界是有规律的,但是人类社会却没有这样的普遍规律。

波普尔对[[历史主义]]的批判可以进一步归纳为对[[决定论]]的批判。

  • 人类的知识会对自身的行为有影响,新的认知会对未来的行为产生影响
  • 人类的认知是是会不断增长的
  • 在未来才能知道,现在不知道的知识对未来的行为会产生什么影响,不可预知

我们永远无法预测未来,对决定论的批判奠定了波普尔证伪理论的基础。

对柏拉图的批判

第一卷,集中讨论了柏拉图,苏格拉底和赫拉克利特,首先批评的哲学家是[[柏拉图]],他认为柏拉图是首个提出极权大于个人的思想家,柏拉图想要建立一个完美的城邦,理想国,国家才是人类命运的载体。柏拉图对人类历史的看法是,人类是不断堕落的,所以才需要设计一个乌托邦,一个理想的制度来防止人们堕落,在理想国当中,柏拉图提出统治者应当由哲学王来担当,哲学王既是哲学家又是统治者,而波普尔就认为,在柏拉图那里就孕育了极权主义,他已经确定了某种阶级具有绝对的权利,这为后来优等民族观念埋下了伏笔,而这些词汇都是纳粹党在 20 世纪经常使用的。希特勒、希姆莱、墨索里尼都是喜欢这样的词。在波普尔看来柏拉图笔下的理想国就是一个封闭社会,他会阻碍批判理性精神的出现,而只有批判理性主义才会使得个人对自己的道德选择负责,在波普尔看来个人主义和利他主义才是西方文明的根基。波普尔把柏拉图的政治思想叫做社会工程态度,社会工程师不关系历史的趋势和人类的命运,他相信,人类是历史的主人,相信我们可以按照我们的目的来影响或改变人类的历史,这些都是不同于历史主义的。因为历史主义者认为只有首先判定了历史进程我们才有政治行动。

对黑格尔的批判

第二卷,集中讨论了黑格尔和马克思,批评的第二个对象是黑格尔,他把黑格尔的哲学称为新部落主义,核心是国家主义,或者是柏拉图式的国家崇拜。这种学说主张国家高于一切,国家是神圣的,而个人什么都不是。波普尔认为黑格尔进一步发展了柏拉图的古典极权主义,黑格尔把一切都看做是哲学精神的展开过程,人类历史有一个内在的逻辑和动力,这是一种典型的历史主义看法,波普尔认为相信历史的必然性是完全错误的,这样的信念还会在实践中导致严重的问题,因为如果一个人相信历史是有必然性的,一切都会自然而然发生,那么我做什么和不做什么,到底会对历史造成什么影响呢?这样一来,个人就没有责任可言了。所以波普尔说,黑格尔否定了一切个人的道德和良心。波普尔甚至猜想黑格尔的哲学主张就是为普鲁士政府而服务的,所以在波普尔看来黑格尔的哲学成为了国家最卑微的服从。

社会工程的二分

[[社会工程]] 有两重含义:

  • 人是有主动性的
  • 对待社会就应该像对待一个工程一样

对社会工程做了二分:

  • 渐进的社会工程,通过零星的社会工程检验的社会技术,试错和检验的,一旦做错了可以及时的放弃或纠正这一部分,比如如果觉得一个社会贫富不均,那么可以通过提高富人的税率来试试看,而不能把所有的富人都杀掉或赶走,而且这种渐进的社会工程的目标不是最大限度的增加最大多数人的幸福,而是要最大限度的排除痛苦。虽然从表面上来看痛苦是幸福的反义词,但是波普尔认为幸福和痛苦不是一件事情的正反两面,因为幸福不能补偿痛苦,也不是没有痛苦的状态,相比之下如果是追求幸福,和减少痛苦,那么一定是减少痛苦来得比较迫切,锦上添花和雪中送炭就是这个意思。幸福是没有止境的,没有一个确定的终止,而且幸福因人而异,但是几乎所有的人都对什么是痛苦有着大同小异的看法,所以波普尔就提出消除痛苦是一件公共的事情,应该由政府了操心,而反过来追求幸福就是一件私事,留给个人努力就好了,不让政府来干预个人追求幸福的私事。
  • 乌托邦社会工程,从整体上重建社会,扫荡一切的变革,由于我们经验有限,这种变革的实际结果是很难进行计算的,乌托邦的社会工程要求理性地为全社会制定一个计划,但是我们不一定能保证得到一个良好的效果,而且我们也不一定具备取得这样良好效果的知识,事实上我们不可能拥有这份知识,因为我们在这样的计划活动方面是没有经验的,而实际知识必须以经验为基础。乌托邦的社会工程就是凭空地在脑袋里面构建出理想的蓝图,然后按照这个蓝图来平地起高楼,可是从人类历史上来看非常不幸,越是充满乌托邦的方案,越是最终导致灾难,譬如,柏拉图在理想国中指出,为了防止人私心的泛滥,就要废除家庭,让国家来抚养教育所有的小孩,但是我们发现这完全行不通,因为违背了基本的人性,在我们所知道的历史当中,大概也只有太平天国的时候短暂的实行过这样的做法,不过波普尔也说,提出乌托邦社会工程的,不一定都是坏人,很多人也并不是为了一己私利而提出乌托邦的,相反,他是历史主义者美好愿望的产物,但是美好愿望下可不一定有美好的结果。每一次我们想在地上知道天堂,但是旺旺带给人类的却是灾难和不幸。

相比之下,渐进的社会工程和乌托邦的社会工程,波普尔一定会选择前者,而反对后者。

  • 维护和平
  • 没有饥饿
  • 充分就业
  • 教育

波普尔的思想是自由主义的,但远远不止于自由主义。

国家和政府的基本看法 经济干预主义

看到资本主义和自由市场的局限性,主张应该通过改革来缓解资本主义生产过剩的情况,应该通过务实的改革,而不是阶级斗争来解决问题。

他支持政府应该对市场进行干预,但是也担心政府因此获得太多的权力,对于自由主义来说,国家的权力太大是他们尤其害怕的,国家干预是为了保障公民的自由,而且必须有一种机制来防止权力被滥用。1956 年波普尔在一篇杂志中说了这样一句话,「国家是一种必要的痛苦,他的权力不应当增加到超越其必要的程度。」在波普尔那里,政府只有两种,一种是专制政府,一种是可以通过非暴力形式来实现可代替的政府。波普尔认为[[苏格拉底]]就已经提出了一个开放社会的想法,这个想法出现在开放社会及其敌人的标题里面,什么是开放社会,开放社会是一种信赖,信赖人,信赖人道,信赖自由,封闭社会是一种半组织状态的联合体,在开放社会里,人是按照自己的理解和个人的兴趣去行动的,而在封闭社会里要按照社会集体的理解去行动。开放社会的敌人是野蛮社会,是政治上的极权主义。

波普尔认为有两种政府干预的类型,第一种是在法律框架内进行的,第二种是国家把一些权力授予一些机构,让那些机构伺机而动。第一种干预是制度化的,间接的,第二种干预是个人化的,直接的。波普尔认为第一种干预是好的,因为第一种情况权力不会被滥用,而第二种情况下,权力几乎是无法得到控制的,因为这些政府机构具有太大的自由裁量权。波普尔认为希特勒掌握政权的过程就是一个自由裁量权失控的过程,民众把自己的权力拱手让给一个领袖,一群政客,一小撮官僚,这也就意味着,一些原本应当由每一个人自己做主的选择,现在让渡给了其他人,波普尔认为这样就完成了一个飞越,从理性到非理性。非理性主义必然会提出一种观点,那就是强权即公意,而个人的利益和权力也会因此而忽视,个人会成为一颗螺丝钉,个人选择和行动的权力就会被剥夺,专制和暴君之门就会随之开启。

对科学哲学的贡献 可证伪理论

20 世纪 20 年代,欧洲最流行[[实证主义]],实证主义认为科学建立在两个基本的方法之上,那就是观察和归纳,观察就是去看自然界的各种现象,收集尽可能多的示例;而归纳则是从一个又一个具体的示例中总结出规律。

但是波普尔认为实证主义的观察和归纳都是有问题的,波普尔认为,科学的理论不是来自于观察,而是来自于问题和猜测,而且理论是先于观察的,我们总是带着一定的预设去观察一切东西,波普尔自己举了一个例子,他在维也纳当中学老师的时候,在物理课上对学生说,拿起你的笔和纸,仔细观察,然后记下观察的结果,学生们一脸茫然,反过来问他,你要我们观察什么呢?波普尔由此发现,观察本身是一个非常荒谬的指令,凡是反查都是有选择的,需要一个对象,一个明确的任务,一个焦点和一个问题,波普尔还引用了生物学家的例子,一个饥饿的动物会把周围的东西分成可吃的和不可吃的,一个逃跑的动物会把环境分为出路和藏身之处,同样人总是先提出问题和目标,然后根据目标和兴趣对外部的事物进行分类,再然后才会进行观察,所谓的纯粹的观察是不存在的。 其次波普尔反对归纳的方法,归纳只能告诉我们过去是什么样的,但是没有办法告诉我们未来是怎么样的。过去反复发生的事情并不能保证未来仍然会发生,所以波普尔认为归纳法本身就是不科学的方法,要把归纳法排除到科学之外。波普尔提出全称命题不是从单称命题推导出来的,但是全称命题可以被单称问题反驳,因为他们与经验上,客观上的事实相冲突。 波普尔的看法对以往的科学观是颠覆性的,提出科学理论是对事实关系的大胆猜测,而不是从实际关系中获得的,但是这些理论可以被观察证伪。这就是著名的可证伪理论。

科学在原则上是要接受经验的检验的,如果不能接受经验的检验那就不是科学。有一些命题无法接受检验,比如说逻辑定律,数学命题,形而上学,和宗教命题,当然还有一些伪科学,观相,星象学,甚至弗洛伊德的心理分析也不是科学,因为一个人对另外一个人梦境的解释,也无法接受检验。对波普尔来说,科学总是通过猜测、试错和反对而前进的,并不是一劳永逸的科学,也没有永远的正确,我们只能说某个理论在现阶段是最好的,他能够解释最多的世界,而且没有出现与之相反的情况,对科学反驳也要提出论据,有些东西自己宣称是科学,但从来不接受任何检验那就有问题了。科学总是从错误中学习的,科学是可以错的,科学史甚至可以是一部充满错误的历史。波普尔说科学的态度,就是批判的态度,这种态度并不去寻求证实,而是却寻求检验,这些检验能反驳被检验的理论,虽然这些检验绝不能证实它。相反那些非科学的理论则声称自己是绝对没有谬误的,是绝对不会错的。


2022-06-04 philosophy , politics , society , popper , 经济 , 科学 , 波普尔 , 政治哲学 , 科学哲学 , 可证伪

电子书

本站提供服务

最近文章

  • Dinox 又一款 AI 语音实时转录工具 前两天介绍过 [[Voicenotes]],也是一款 AI 转录文字的笔记软件,之前在调查 Voicenotes 的时候就留意到了 Dinox,因为是在小红书留意到的,所以猜测应该是国内的某位独立开发者的作品,整个应用使用起来也比较舒服,但相较于 Voicenotes,Dinox 更偏向于一个手机端的笔记软件,因为他整体的设计中没有将语音作为首选,用户也可以添加文字的笔记,反而在 Voicenotes 中,语音作为了所有笔记的首选,当然 Voicenotes 也可以自己编辑笔记,但是语音是它的核心。
  • 音流:一款支持 Navidrom 兼容 Subsonic 的跨平台音乐播放器 之前一篇文章介绍了Navidrome,搭建了一个自己在线音乐流媒体库,把我本地通过 [[Syncthing]] 同步的 80 G 音乐导入了。自己也尝试了 Navidrome 官网列出的 Subsonic 兼容客户端 [[substreamer]],以及 macOS 上面的 [[Sonixd]],体验都还不错。但是在了解的过程中又发现了一款中文名叫做「音流」(英文 Stream Music)的应用,初步体验了一下感觉还不错,所以分享出来。
  • 泰国 DTV 数字游民签证 泰国一直是 [[Digital Nomad]] 数字游民青睐的选择地,尤其是清迈以其优美的自然环境、低廉的生活成本和友好的社区氛围而闻名。许多数字游民选择在泰国清迈定居,可以在清迈租用廉价的公寓或民宿,享受美食和文化,并与其他数字游民分享经验和资源。
  • VoceChat 一款可以自托管的在线聊天室 VoceChat 是一款使用 Rust(后端),React(前端),Flutter(移动端)开发的,开源,支持独立部署的在线聊天服务。VoceChat 非常轻量,后端服务只有 15MB 的大小,打包的 Docker 镜像文件也只有 61 MB,VoceChat 可部署在任何的服务器上。
  • 结合了 Google 和 AI 的对话搜索引擎:Perplexity AI 在日本,因为 SoftBank 和 Perplexity AI 开展了合作 ,所以最近大量的使用 Perplexity ,这一篇文章就总结一下 Perplexity 的优势和使用技巧。