若为自由故 读书笔记

《若为自由故:自由软件之父理查德·斯托曼传》是 [[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]]

2022-06-09 shaarli , docker , bookmarking , selfhosted

在 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 信息。

[email protected]:~# 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 , 经济 , 科学 , 波普尔 , 政治哲学 , 科学哲学 , 可证伪

使用 FFmpeg 将 webm 格式转成 mp4

记录一下使用 [[FFmpeg]] 将 YouTube 下载的 WebM 格式视频转码成 Adobe Premiere 可以处理的 MP4 格式。

基础知识

WebM 格式

[[WebM]] 是 Google 开源的一个,免版权费用视频文件格式。该格式可以提供高质量的视频压缩以在 HTML5 页面上使用。BSD 许可开源。1

WebM 采用 On2 Technologies 公司开发的 [[VP8]] 和后续的 [[VP9]] 作为视频解码器,使用 Xiph.Org 基金会开发的 Vorbis,[[Opus]] 作为音频编码器,以 [[Matroska]] 格式作为封装格式。

FFmpeg

FFmpeg 是一系列有关多媒体,包括音频、视频,字幕等等相关元数据处理的编程库和处理工具。可以非常方便地用来对视频内容编解码,转码等等操作。FFmpeg 是一个开放源代码的项目,是一个命令行工具,如果你想要一个 GUI,可以尝试一下 [[HandBrake]]。

FFmpeg 支持非常多的编码格式,包括 VP8,VP9,H.264,Opus,Vorbis,AAC 等等。

处理

查看一下下载的视频:

ffmpeg -i \[놀면\ 뭐하니\ 후공개\]\ WSG\ 워너비\ 블라인드\ 오디션\ 풀영상\ \[엠마스톤\ -\ 그런\ 일은\]\ \(Hangout\ with\ Yoo\ -\ WSG\ Wannabe\ YooPalBong\)\ \[n2eVz5IIu-Y\].webm
ffmpeg version 5.0.1 Copyright (c) 2000-2022 the FFmpeg developers
  built with Apple clang version 13.1.6 (clang-1316.0.21.2)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/5.0.1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox
  libavutil      57. 17.100 / 57. 17.100
  libavcodec     59. 18.100 / 59. 18.100
  libavformat    59. 16.100 / 59. 16.100
  libavdevice    59.  4.100 / 59.  4.100
  libavfilter     8. 24.100 /  8. 24.100
  libswscale      6.  4.100 /  6.  4.100
  libswresample   4.  3.100 /  4.  3.100
  libpostproc    56.  3.100 / 56.  3.100
Input #0, matroska,webm, from '[놀면 뭐하니 후공개] WSG 워너비 블라인드 오디션 풀영상 [엠마스톤 - 그런 일은] (Hangout with Yoo - WSG Wannabe YooPalBong) [n2eVz5IIu-Y].webm':
  Metadata:
    ENCODER         : Lavf58.29.100
  Duration: 00:04:22.52, start: -0.007000, bitrate: 547 kb/s
  Stream #0:0(eng): Video: vp9 (Profile 0), yuv420p(tv, bt709), 1920x1080, SAR 1:1 DAR 16:9, 29.97 fps, 29.97 tbr, 1k tbn (default)
    Metadata:
      DURATION        : 00:04:22.495000000
  Stream #0:1(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
    Metadata:
      DURATION        : 00:04:22.521000000

可以清楚的看到其中有两条数据,Video 使用 vp9 编码,而音频则是 opus 编码的。

使用命令转码:

ffmpeg -i origin.webm newfile.mp4

更多 ffmpeg 的选项可以参考之前的 FFmpeg 入门

转码过后:

❯ ffmpeg -i \[놀면\ 뭐하니\ 후공개\]\ WSG\ 워너비\ 블라인드\ 오디션\ 풀영상\ \[엠마스톤\ -\ 그런\ 일은\]\ \(Hangout\ with\ Yoo\ -\ WSG\ Wannabe\ YooPalBong\)\ \[n2eVz5IIu-Y\].mp4
ffmpeg version 5.0.1 Copyright (c) 2000-2022 the FFmpeg developers
  built with Apple clang version 13.1.6 (clang-1316.0.21.2)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/5.0.1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox
  libavutil      57. 17.100 / 57. 17.100
  libavcodec     59. 18.100 / 59. 18.100
  libavformat    59. 16.100 / 59. 16.100
  libavdevice    59.  4.100 / 59.  4.100
  libavfilter     8. 24.100 /  8. 24.100
  libswscale      6.  4.100 /  6.  4.100
  libswresample   4.  3.100 /  4.  3.100
  libpostproc    56.  3.100 / 56.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '[놀면 뭐하니 후공개] WSG 워너비 블라인드 오디션 풀영상 [엠마스톤 - 그런 일은] (Hangout with Yoo - WSG Wannabe YooPalBong) [n2eVz5IIu-Y].mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf59.16.100
  Duration: 00:04:22.58, start: 0.000000, bitrate: 599 kb/s
  Stream #0:0[0x1](eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 465 kb/s, 24 fps, 24 tbr, 12288 tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 129 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]

可以看到视频流已经变成 h264 编码,而音频也变成了 aac。


2022-05-31 linux , ffmpeg , mp4 , webm , google , youtube , vp9 , opus

邻家的百万富翁 读后感

《邻家的百万富翁》是 [[20220515-21-天计划]] 中的第二本书,这本书在我的书单中已经存在很久了,好像是当时听某个播客中推荐的,就加到了书单,正好在这次计划中看完。这是一本讲述以统计数据,调查问卷的方式整理出来的对美国平民百万富翁的一份调查报告。最近几年因为 [[Naval Ravikant]],[[芒格]],[[孟岩]],等等人的影响已经对投资,金钱的观点所有改变,就像作者所说「有钱不是为了成为富人,而是为了拥有选择的权利。」

邻家的百万富翁作为一本畅销书确实非常易读,通过目录就能大致知道作者想要在这一章节中讲述的内容:

  • 第二章收入和财富的关系,人们常常把收入和财富混为一谈,然而并不是收入越高,财富就越多
  • 第三章「想要积累财富,首先要学会尊重金钱」,让我们树立正确的金钱观,警惕消费陷阱,任何时候都要学会节俭
  • 第四章「消费自由就是想买什么就买什么?」显然作者的反问句就已经给出了答案,作者在这一章中以翔实的数据和例子让我知道了大部分的富人不会买超过自身年收入 3~4 倍的房子,大多数的富人也不开豪车,通常一辆耐用的家用车一开就是几十年
  • 第五章「如何才能守住财富」,通过智力、教育、自制力、韧性、节俭
  • 第六章「富豪的工作很“平庸”」,这一章讲述富豪的职业,工作内容,早期职业经历的重要性,销售的重要性,并且大家都认可努力工作才是正道,如果你想知道富人们是如何选择工作的不妨来读读这一章,一份热爱的职业不仅能带来收入,还能为你提供各种资源
  • 第七章「学会投资,别打鸡蛋放在一个篮子里」,重点不言而喻,富人是如何投资的,说的道理不仅通俗,而且是被巴菲特,芒格等等反复说过的,分散,指数,通过不断地自我学习。

总结书的内容

  • 作者通过将美国富人作为研究对象,通过观察,调查总结出富人之所以成为富人的原因,其中不乏人尽皆知的道理,也不乏在职业、消费和投资领域的独到见解。

启发或想法

  • 将收入转换成财富,
  • 合理分配自己的时间、精力,时间对所有人都是公平的,并且时间是不可逆的,用在了 A 上就必然不能用在 B 上。
  • 向那些取得了财富的人学习,而不是像装富的人学习
  • 定期储蓄、节制消费、学习投资
    • 长远来看储蓄对一个人的财富积累能力影响最大
  • 尽早形成关于工作和职业的人生态度
  • 认清自己的优劣势,忧患意识

财富的积累固然不容易,但不是不可能。我们都想变得富有,但是变得富有的目的不应该是为了过高消费的生活。

谁应该看这本书

任何想要了解财富是什么人。

三个 Quotes

你能通过创造一些有价值的东西(如产品或服务)来获得收入吗?并且你能继续持有并靠继续投资,使得这些收入不断增值吗?

投资自己的事业是那些经济成功人士的标志之一。但前提是他们要具备毅力、韧性和自制力等个性特征,能成功度过那些不可避免的低谷期。

创造力、自制力和某些社交技能(包括领导能力)比成绩和能力更重要。

书摘见:Clip


2022-05-29 fortune , millionarie , reading , reading-2022

自由软件 自由社会 读书笔记

《自由软件 自由社会》是 [[20220515-21-天计划]] 阅读的第一本书,虽然早就听说过 [[Richard Stallman]],也听过其提倡的[[自由软件]],但是从来没有系统地了解过 Stallman 的思想,以及自由软件具体指代什么,而软件开发又和社会有着什么样的连接。我带着这样的疑问看完了这一本 Stallman 的著作集。

关于[[自由]],在哲学领域,政治领域,以及有无数的哲人给出了无数不同的解读,卢梭在社会契约论中说,只有服从了社会为自己所设之规定才叫做自由,康德说「自由不是想干什么就干什么,而是不想干什么就不干什么」,[[赛亚 伯林]]进而提出了[[积极自由]]和[[消极自由]],相较于政治哲学而言,软件行业发展才不过短短几十年,下面就来总结一下 Stallman 关于自由在软件领域的思考。

自由软件的定义是什么?

自由软件,free software, 这里的 free 不是免费,而是和 free speech 中的 free 同一个含义。

阅读的时候,让我最惊讶的是 Stallman 将自由软件和法律做了类比。 一个「自由的社会」是由法律来规范的,任何自由社会的法律对这些都有限制,即没有自由社会允许秘密法律。没有政府可以对其治理的对象隐藏规范,法律能够起效,只有在公平正义的情况下才可以。只有当法律条款可以被监管,或者管理的管理者(立法机构、律师)知悉和控制时,法律才是有效的。

在美国的司法实践中,我们可以看到当事人雇佣律师来提高收益,而诉讼过程中,律师撰写诉状,进而影响法官的判决意见。这过程中所有的材料都是符合 Stallman 所说的「自由」,诉讼简报是公开的,论据是透明的,论证过程也公开的,法官意见可以在之后的任何诉讼中被引用,可以被复制,可以被融合到其他案例中。整个美国的司法系统就是建立在「源代码」的设计和原则之上的。它对任何想使用它的人都是开放和自由的。

这一段类比论证突然让我醒悟过来过去几年里面为什么我一直着迷美国司法案件,正因为是公开的,所有的讨论就可以基于前人公开的「经验」,「知识」,在经过几十年,几百年的实践之后,就会有不断被修正,不断被重新认识,不断完善的司法系统。

这不仅是人类知识得以进步的原因,我想也是近[[200年来科技发展迅速的原因]],知识的交换带来了指数级的增长。

而这不也正是软件行业在短短几十年间就迅速改变了当代生活的原因吗?当代社会当然存在 Stallman 说的专有软件,但我们自己思考,服务器早已经被 GNU/Linux 占领,而手机操作系统领域,也早已被 Android 这样一个开源系统所占领。

回过来我们再来看看 Stallman 关于[[自由软件]]的具体定义,自由软件赋予了用户运行、复制、分发、学习、修改并改进的自由。进而归纳出四项基本自由:

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

自由软件和开源的区别?

从自由软件的四项自由,我们可以发现第二条,则是以获取源码为前提的,如果没有源代码,则后三条自由无从谈起。

相较于自由软件,可以看出来开源仅仅只能保证源码可得,相较于自由软件的约束要宽泛很多。

Stallman 也举了一些例子来举证,很多开源软件实际上并不符合自由软件:

  • Open Watcom 许可证不允许修改的版本用于私人使用
  • 另外也有一些专有系统通过检查签名的方式可以阻止一些程序的运行,即使源码是可得的,也无法保证是自由的

关于专利、版权和商标

在书中另外一个让我没有想到的是 Stallman 对于「专利」,「版权」,「商标」的思考。我们总以知识产权来统称这些概念,但实际我们能看到一些差别。

  • 版权法是设计为了保护作者的身份和艺术
  • 专利法的本意是促进发表有用的想法,代价是赋予想法的发表者暂时的垄断权
  • 而商标法则是保护品牌。

在阅读 Stallman 关于版权的讨论的时候,我时不时得想起当前正在如火如荼发生的 Web3 革命。我们要把被大公司夺取的自由抢回来。

想象一下,我们说的音乐版权真正的保护了音乐创作者了吗?是不是利益的大头都被音乐平台抽去了。在 Kindle 上发布作品的作家,是不是也受到了 Kindle 的限制。

在这些专有设备上运行的程序夺走了用户对其计算的控制权,想想一下 Amazon 可以在任何时候删掉用户设备上的《1984》,想想一下 Apple Music 可以因为某人不喜欢而下架整张专辑。数字技术可以赋予用户自由,同样也以一种温水煮青蛙的方式来剥夺了用户的自由。使用自由软件是掌握我们自己数字生活的第一步。

关于监控

我的另一个疑惑便是自由软件何以和自由社会联系在一起,Stallman 用了整整一章来给我们普及大规模监控的危害。

而现实中的事实也告诉我们一旦当某人或某机构可以获取足够多的信息,就会对人们的思考方式产生深远的影响。

自由的定义

最后 Stallman 给出了关于「自由和权力」的区别,自由是指能够做出主要是影响自己的决定;而权力是指能够做出影响他人甚于自己的决定。

甚至引用了 William Hazlitt 的话,「对自由的爱是对他人的爱,对权力的爱是对自己的爱。」我们不要放弃我们对软件的控制权力。

总结

因为整本书是 Stallman 历年的演讲、论文集,所以不可避免的产生了很多重复内容,在不同的文章中总是会看到一些重复的思考。但总体上我能从这本书中知道 Stallman 所主张的观点,暂不管不管这样的思想是否是对的,但过去几十年的经验告诉我,如果没有 Stallman,没有 [[Linus Torvalds]],我们的社会可能会没有当前这样的发展。

自由意味着你控制着自己的生活。如果你使用程序来打理你的生活,你的自由就取决于你如何控制着这些程序。


2022-05-25 reading , reading-2022 , free-software , free , 自由 , software , linux , gnu , stallman

去中心化的协同文档 Skiff 初体验

昨天有朋友分享给我一篇文章,关于红杉领投两轮的 Skiff,简单的看了一下,文章介绍的 Skiff 是一款基于 Web3 的在线协同文档应用。具有与 Google Docs 类似的文档编写和共享功能。

Skiff 将 E2EE (端到端加密技术)作为在线工作的核心设计原则,被用于消息传递、写作、协作和通信。Skiff 服务器只会存储加密版本的数据,而无法破译它。

文档内容可以在设置中选择存放在 Skiff 的中心服务器上,或者 [[IPFS]] 中。

  • 端到端加密
  • 隐私优先
  • 支持 [[MetaMask]] 加密钱包登录
  • 数据可选择存储于 IPFS
  • 支持发送和接收来自 ENS 地址的邮件
  • 邮箱容量默认是 10G,可以通过升级扩容至 100G
  • 支持三个邮箱别名
  • 客户端有 Android, iOS, macOS 版本

今年 3 月 31 日,Skiff 完成了 1050 万美元 A 轮融资,由红杉资本领投。在去年 5 月红杉资本就参与领投了 Skiff 420 万美元种子轮,投资方还包括一群在隐私和去中心化领域拥有深厚专业知识的天使投资人:Mozilla 前首席执行官 John Lilly、Coinbase 前首席技术官 Balaji Srinivasan、TCG 加密投资者 Gaby Goldberg 和来自 Dropbox 和以太坊基金会的 Albert Ni。

端到端加密

用户每次登录 Skiff 时,浏览器都会生成一个密钥,该密钥用于在成功登录后解密由 Skiff 的服务器发送到您设备的帐户数据,并且都是在本地发生的。从中派生的密钥永远不会通过任何网络发送和存储在 Skiff 的服务器中。

当 A 编辑了一份文档后,会使用仅在他和 B 之间共享的对称加密密钥对其进行加密(该密钥不会与 Skiff 共享),B 接收到 A 的加密编辑后,执行验证和解密,然后将其合并到文档中。整个过程,数据不会泄露给任何中央服务器。这样便于验证和保护个人和敏感信息。

当文档出现敏感内容时,也可以通过设置密码进行保护。

存储

在数据存储方面,Skiff 与 IPFS 集成。在 IPFS 上,数据被复制并分布在参与计算机的网络中,这些计算机协同工作以确保存储在网络上的所有数据的完整性和持久性。所以使用 IPFS 就可以永久访问用户数据,并无需依赖中央服务器。

目前为止 Skiff 可以在设置中选择将内容保存到 IPFS 还是 Skiff 自身的服务器。

Web 3 登录方式

2021 年 12 月上,Skiff 也开始支持 MetaMask 钱包登录,让用户使用现有的密钥对(以太坊地址)访问 Skiff 上端到端加密文档和数据。

在今年 1 月,Skiff 又可以使用以太坊域名服务(ENS)名称来简化 Skiff 上的用户名。

Skiff Mail

在体验文档编辑的时候,发现 Skiff 还退出了端到端加密的邮箱服务。

skiff mail

还能支持三个 @skiff.com 的别名,并且轻量使用起来问题不大,支持标签等等,就是目前搜索功能相较于成熟的 Gmail 还有一定距离。

注册

  • 点击邮箱注册链接 https://gtk.pw/skiff(含个人推荐链接),如果使用 MetaMask 可以使用其登录,或者输入自己的邮箱地址然后点击下方按钮”Continue”,等待接收确认邮件;
  • 收到邮件后,点击邮件内的”Confirm email”按钮(如果没有收到邮件查看一下垃圾箱),在打开的页面中输入密码并确认;
  • 保存”recovery key”,直接点击”Save key as PDF”按钮即可;
  • 根据需要选”Team”或”Personal”,为了简化注册过程建议选”Personal”;
  • 注册 Workspace 成功后,在页面顶端”You’re invited to Skiff Mail’s Alpha release. Switch to your inbox to send end-to-end encrypted, private emails.”通知后点击”Claim account”激活邮箱地址;
  • 邮箱 ID 需 6 位数以上,可以包括字母、数字和英文句号,每个邮箱账户最多可以设置 3 个邮箱 ID。(和 Gmail 一样,”someone”和”some.one”是一样的,在邮件收发时会自动忽略英文句号)

2022-05-24 google-docs , gmail , skiff , web3 , metamask , ens , wallet

推荐三个代码统计工具 tokei, cloc 和 scc

有些时候在开源项目的时候可能需要对整个项目有一个全局的了解,比如想要了解这个项目中具体有多少行代码,那么这个时候,下面三个命令就派上用场了。

之前在 Twitter 上看到有人分享说 SQLite 的注释非常详细,甚至比代码都多,那么用下面这些工具一眼就能看到。

Tokei

Tokei 是一个使用 Rust 编写的用来显示代码信息的命令行工具,Tokei 可以以编程语言为分类显示文件数,代码行数,注释行数,空行数。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 Language            Files        Lines         Code     Comments       Blanks
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 BASH                    4           49           30           10            9
 JSON                    1         1332         1332            0            0
 Shell                   1           49           38            1           10
 TOML                    2           77           64            4            9
───────────────────────────────────────────────────────────────────────────────
 Markdown                5         1355            0         1074          281
 |- JSON                 1           41           41            0            0
 |- Rust                 2           53           42            6            5
 |- Shell                1           22           18            0            4
 (Total)                           1471          101         1080          290
───────────────────────────────────────────────────────────────────────────────
 Rust                   19         3416         2840          116          460
 |- Markdown            12          351            5          295           51
 (Total)                           3767         2845          411          511
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 Total                  32         6745         4410         1506          829
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

在 macOS 下安装:

brew install tokei

cloc

cloc 同样是一个用来计算代码行数的命令行工具,和 Tokei 一样,可以统计代码行数,注释行数,空行。 cloc 使用 Perl 编写。

Debian/Ubuntu:

sudo apt install cloc

或者以 Docker 运行:

docker run --rm -v $PWD:/tmp aldanial/cloc

scc

scc 是一个使用 Go 语言编写的统计代码行数的工具。

brew install scc

2022-05-23 cli , rust , tokei , cloc , code , code-statistics , golang

电子书

最近文章

  • PlanetScale 云端 MySQL 数据库使用记录 [[PlanetScale]] 构建在 Vitess 之上。[[Vitess]] 是一个可以扩展的 MySQL 集群,集合了很多MySQL特性和NoSQL 的扩展能力。 Vitess 创建于 2010 年,主用用于解决 YouTube 团队面临的 MySQL 扩容问题。
  • 新教伦理与资本主义精神 读书笔记 怎么知道的这一本书 在了解 [[马克思 韦伯]] 的时候,不管是介绍其人,或者是他的传记作品中都不断提及这一部巨著。
  • 谣言 世界最古老的传媒 读书笔记 在阅读上一本 [[法国大革命前夕的舆论和谣言]] 的时候接触到了这一本《谣言:世界上最古老的传媒》,作者让-诺埃尔-卡普费雷(Jean-Noël Kapferer)系统地剖析了什么是谣言,为什么会存在谣言,谣言的传递遵从什么样的规则,我们能不能消灭谣言等等。作者收集了世界上曾经流行的种种谣言,引用了诸多社会心理学实验,去阐述了这些谣言的来源,人们为什么会相信这些谣言,人们又是如何利用谣言来达成自己的目的。
  • 在 IntelliJ IDEA 中使用 reset frame 回退 Debug 在 IntelliJ IDEA 中调试的时候,如果不小心断点跳过了,如果可以往前跳转就可以省去很多时间。搜索一下之后发现,在 IDEA 中叫做 Reset Frame(之前叫做 Drop Frame)。
  • 从 mkv 文件中提取字幕文件 mkv 是一种容器,可以包含视频,音频流,也可以包含字幕等等文件,如果要从 mkv 文件中提取字幕,可以使用一款叫做 mkvtoolnix 的命令行工具。