使用开源 Wakapi 代替 WakaTime 统计编码时间

之前折腾 GitHub Profile 的时候发现了 [[WakaTime]] 这样一款统计编码时间的工具,之后在读 waka-readme 项目的时候发现,还有两个完全开源的后端兼容版本,一个是 Golang 编写的 [[wakapi]] ,一个是 Huskell 编写的 hakatime

这篇就来总结一下

wakapi 是一个兼容 [[WakaTime]] 的可自行架设的后端程序,和 WakaTime 一样可以用来统计代码。

Installation

使用 docker-compose 安装。

直接 clone 项目,修改环境变量,然后启动即可。

git clone https://github.com/einverne/dockerfile.git
cd dockerfile/wakapi/
cp env .env
# edit .env setup SALT and WAKAPI_DATA
# SALT 可以执行命令 cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-32} | head -n 1
# WAKAPI_DATA 配置一个本地可读写的路径
docker-compose up -d

我的配置中没有暴露 3000 端口,我是和 Nginx Proxy Manager 一起使用的,在 Nginx Proxy Manager 后台,配置一个 HOST,设置 wakapi:3000 ,然后去 Cloudflare 后台将域名 wakapi.einverne.info 设置一个 A 记录指向 Nginx 所在的服务器。等待 DNS 生效,访问后台 wakapi.einverne.info 后台即可。

我个人会一直使用 wakapi.einverne.info 服务,所以如果你感兴趣,也可以直接使用这个服务。

服务启动之后,注册登录,然后就可以配置编辑器插件,把 IntelliJ IEDA,[[VSCode]],[[Vim]] 先配置上。这部分可以直接查看 WakaTime 的官方文档。

GitHub Actions


2022-09-22 wakatime , wakapi , code , programming , self-hosted , linux , docker

使用 WakaTime 统计编码时间

[[WakaTime]] 是为程序员打造的编码统计 Dashboard,可以同来统计项目,编程语言,IDE,编码时间等等内容。 之前在折腾 GitHub Profile 的时候发现的,可以在 GitHub Profile 页面中动态的展示最近的编程状态。

WakaTime 可以统计的内容包括:

  • 每天在每个项目上的编码的时间
  • 使用的编辑器
  • 编程语言占比
  • 所使用的操作系统
  • 所在的项目

Price

WakaTime 基础使用是免费的,但有如下限制:

  • 只包含两个星期的历史
  • 有限的整合
  • 3 位朋友之间的 Leaderboards

对于 Premium 可以解锁更多的 功能

Config

WakaTime 的配置文件在 HOME 目录下的 .wakatime.cfg 文件中。

cat ~/.wakatime.cfg
[settings]
api_key=
proxy = 
debug = false
status_bar_enabled = true

IntelliJ IDEA (JetBrains 系列)

插件 Market 中搜索 wakatime,重启 IDEA,在弹出的 WakaTime Settings 中填入 API key。

如果要设置 proxy,可以在下面填入 http_proxy 类似:http://localhost:1080

Vim

Plug 'wakatime/vim-wakatime'

Self-hosted

  • [[wakapi]]

2022-09-21 wakatime , intellij-idea , code-stats

折腾一下 GitHub Profile

虽然很早就知道 GitHub 发布了 Profile 功能,可以使用 README 来丰富 Profile 页面。但是一直以来没啥动力,大多数时候都不会去到主页去访问。但现在有些时候逛 GitHub 的时候会点到 其他人 的主页去看,发现有一些主页虽然只有寥寥几句,但却可以清楚的知道「他/她」最近在贡献什么内容,擅长什么技能。虽然我在 GitHub 上还是观摹大佬居多,但也想着通过这个契机在整理 GitHub Profile 的时候加深一下对自己的认知。

至于如何建立同名的 repository,如果提交代码就先略过了,官方的帮助和其他文章的内容都非常详细。

刚开始去 Google 「GitHub Profile」 就发现了如下的页面生成器 GitHub Profile Generator ,可以用这个生成器生成一个初始版本,然后在其基础上修改。

在调研的过程中基本发现了两大类主流的用法,一类是通过 GitHub 的 API ,或者其他服务的 API,生成一个 Badge 展示,另外一类就是通过 [[GitHub Actions]] 通过定时任务动态的使用代码聚合一些内容,然后再动态地展示到页面中。

因为 README 中可以直接写 HTML,所以如下的 HTML 也可以直接使用,注意替换其中的链接。

<h3 align="left">Connect with me:</h3>
<p align="left">
<a href="your link" target="blank"><img align="center" src="https://cdn.jsdelivr.net/npm/[email protected]/icons/twitter.svg" alt="" height="30" width="40" /></a>
<a href="your link" target="blank"><img align="center" src="https://cdn.jsdelivr.net/npm/[email protected]/icons/linkedin.svg" alt="" height="30" width="40" /></a>
<a href="your link" target="blank"><img align="center" src="https://cdn.jsdelivr.net/npm/[email protected]/icons/instagram.svg" alt="" height="30" width="40" /></a>
<a href="your link" target="blank"><img align="center" src="https://cdn.jsdelivr.net/npm/[email protected]/icons/youtube.svg" alt="" height="30" width="40" /></a>
</p>

或者使用外部的 Readme-stats 来生成一个数据卡:

<p>
  <a href="https://github.com/einverne/">
    <img  margin-top="-30px" width="55%" align="right" alt="einverne's github stats" src="https://github-readme-stats.vercel.app/api?username=einverne&show_icons=true&include_all_commits=true&count_private=true&layout=compact&hide_border=true" />
  </a>
</p>

图标

如果要在页面中放入图标可以到如下的网站寻找。

  • Simple Icons 是一个开源的 SVG 图标库,包含了上百个品牌的图标。
  • Skill Icons 是一组可以用来展示技能的图标。
  • Flaticon 提供了很多彩色的图标,也提供很多收费的图标,可以根据需要选择。
  • Icons8 同样是一个图标库,但是也包含一些收费的图标
  • Wikimedia Commons 是另一个不错的选择,可以找到很多官方的图标,并且可以自由使用。

其他徽章

github-readme-stats

github-readme-stats 是一个用来生成 GitHub 统计数据的工具,可以在页面上展示获得的⭐,提交的次数,总共的 PR 等等。

徽章

生成从构建,代码覆盖率,开源协议,到社交网络等等,非常多的徽章。

统计页面访问量

如果想要统计访问 GitHub Profile 的数量,可以使用 GitHub Profile Views Counter 这个项目。

显示奖杯

GitHub Profile Trophy

样例:

github-readme-streak-stats

Streak stats

https://skyline.github.com/

GitHub Actions

基于 GitHub Actions 动态生成内容展示在 Profile 页面。

因为有 GitHub Actions,所以简单的用脚本可以展示

  • 最近在阅读的图书
  • 最近分享的文章
  • 当前正在听的音乐

等等。

显示最近博客内容

可以使用 blog-post-workflow 来显示最近更新的博客内容。通过定时读取 Feed ,来在页面动态展示内容。

GitHub 最近动态

GitHub Activity Readme 可以在页面上显示最近在 GitHub 上的动态。

Waka

如果你使用 [[WakaTime]] 来统计编码时间,那么可以使用 waka-readme-stats 来展示。

总结

最终的效果见 https://github.com/einverne/

reference


2022-09-10 github , git , github-profile , online-profile

现代政治的正当性基础 读书笔记

怎么知道的这一本书

似乎是在豆瓣的推荐流中第一次发现这一本。

关于作者

作者是[[周濂]],我还是在有关哲学的播客中第一次知道这一位人大的教授,首先接受的是他的声音,然后在豆瓣纪念[[江绪林]] 的文章中再一次看到了周濂教授,最后是在刘擎的 [[西方现代思想讲义]] 中又一次读到周濂。

几句话总结书的内容

什么是正当性 legitimacy

关于国家正当性的问题,要回答的问题是「在国家诞生的过程中需要满足哪些限制条件?」

legitimacy 正当性,合法性。怎么样产生的国家才在道德上是可以被接受的。正当性是一个「回溯」的概念,从「发生」追问国家的谱系、来源。

什么是证成性 justification

关于国家证成性的问题,要回答的问题是,「为什么需要国家」,国家这种制度存在的目的是什么?为什么一定要建立国家?无政府状态会更好吗?国家作为工具或手段能为公民提供什么样的好处?

国家具有哪些性质,使得它的存在是值得的。

国家证成性问题是一个「前瞻性」的概念,评价国家的功能,和国家的产生没有关系。

义务

  • 义务是通过履行某些自愿的行动(或者不作为)创造出来的道德要求
  • 义务是某类特殊的人对另一类特殊人的欠负
  • 每项义务都与一项权利相关联
  • 一个行动之所以是一种义务,是因为债权人和债务人所参加的互动或关系而形成,而不是因为被要求的行为在道德上的属性

政治义务

  • 特殊的道德义务,履行自愿的行为创造出来的道德要求
  • 特定政治共同体的公民,成员,或参与者
  • 政治义务的形成乃是因为国家和公民之间的互动或关系的本质所导致的
  • 公民负有政治义务与统治者拥有的统治权利相对应,也因此与国家拥有的正当性具有逻辑关联性
  • 代价很大,成本极高的义务

启发或想法

国家和政府首先是一个目的性的存在,人们建立国家和政府是为了促进自由正义、保障社会稳定和提高人民福祉,一旦一个民选政府或民主国家无法实现这些基本目的,那么人们就会收回当初的认可,这个国家和政府也就丢失了正当性。

谁应该看这本书

  • 想了解什么是[[国家]]的人
  • 想知道[[国家]]是怎么诞生的人
  • 想回答「我们是否有道德义务遵守法律」

印象深刻的句子

  • 「因为没有一个现存国家和政府拥有百分百的正当性,并不能推出所有现存的国家都不具有正当性,这就好象没有一个现实中的三角形是完美的,并不能推出所有现实中的三角形都不是三角形。」

2022-09-08 politics

富兰克林自传 读书笔记

怎么知道的这一本书

已经被不止一遍的推荐过,[[芒格]] 非常喜欢这本书,在《穷查理宝典》里面推荐过,巴菲特也曾推荐过,在之前看过的 [[法官能为民主做什么]] 中也能读到美国最高法院法官对富兰克林的尊敬,再到国内,罗辑思维也在视频中推荐过。上一本读过的 [[新教伦理与资本主义精神]] 中[[马克思 韦伯]] 也列举了 [[富兰克林]] 作为例子,有意思的是我在我的笔记库中搜索的时候,一本讲述德州扑克的树中作者也援引了富兰克林的观点,可见富兰克林在美国人心中的地位。

而我对富兰克林的印象停留在了那个雷雨天放风筝的小孩,以及 100 美元上的人物了,其他零星的记忆就是看美国建国那段历史的时候偶然出现的形象。所以正好借由这一本自传来完整地了解一下富兰克林。

关于作者

富兰克林的自传,自然作者就是富兰克林,全名是本杰明•富兰克林,打开他的维基百科,能看到不少的头衔,除了我们熟悉的科学家,政治家,他同样还是杰出的外交家,发明家,出版商,记者,作者等等,甚至在心理学上也有建树。作为政治家,共同起草了独立宣言,作为外交家,结盟法国,赢得了独立战争。

几句话总结书的内容

这是一本富兰克林所写的自传,写于 1771 年。

全书共分为 4 个部分,正传,正传续篇,续传和补编,但观看的过程中明显能感觉到在正传部分花的篇幅比较多。从家庭,青年事情开始写起,尤其是富兰克林的青年时期令人印象深刻。

启发或想法

读书的习惯

在书中都知道富兰克林是一个印刷商人,但也能从中看到富兰克林对书的痴迷,在 17 岁时就读了洛克的[[人类理解论]],波特洛亚尔派的会员们所著的《思维的艺术》,从小就接受了不同的哲学思想。不仅自己有着良好的阅读习惯,也在之后成立图书俱乐部,名之曰“讲读俱乐部”,成立图书馆,通过书让更多人获益。

尽可能多的读书,书籍是智慧的源泉。

「图书馆使我得以有恒地研习增进我的知识,每天我停留在里面一两个钟头,用这个办法相当地补足了我失掉的高等教育」

学习写作

富兰克林在书中写道,「散文写作对我的一生十分有用,而且还是我走向成功的重要手段之一」,有意思的是,富兰克林是在和别人「吵架」中意识到自己的行文不足的,「但在辞句优雅、条理明晰方面我却不如对方。在这些方面,他举出几个例子使我信服。我知道他的意见是公平的,从此对于文体更加注意,且决心努力改进。」

学习写作的方法:

  • 模仿,「如果可能的话,我还很想模仿它。抱着这个念头,我取出其中的几篇,把每句的大意摘要录出,放置几天以后,再试着不看原书,用自己想到的某些合适的字,就记下的摘要加以引申复述,要表现得跟原来的一样完整,把原篇重新构建完成。」
  • 学习不同的表达,「因为为了合律和协韵,写诗常常需用意义相同而长短不同、声调不同的字,这样就会把我摆到继续不断搜求大量词汇的需要下,也会帮助我记住它们而能运用自如。」

写作的另外一个长处便在富兰克林之后的人生中起了很大的作用,撰文倡导自己的政治主张,通过印刷品影响人民进而影响议会,书中提到的纸币增发议案就是一典型的案例。

广交好友

从和哥哥交恶,富兰克林离开波士顿,独自一人前往费城,在书中能看到富兰克林结交的朋友并非都是善人,那个为人热情的威廉总督,空给人了希望,将富兰克林骗到伦敦。但大部分的朋友都在人生的不同阶段给过富兰克林帮助。

当具备一定的阅历、智慧并坚持学习思考,人就会像超重体一样,吸引更多的有思想有价值的人来到你的身边。

做一个可行的自我提高计划,如何坚持并实施它

人的一生所经历的大多数事情是无法预知的,即使这样,计划也是必须的。因为,只要坚持执行计划,未知的事情会围绕着计划发生。

为人谦逊

「因为要巩固商人的信用和声望,我不但注意到勤劳和节俭的实际情形,也要避免那种趾高气扬的形象。我穿得很朴素,从来不在消闲的娱乐场所出现。我从不出去钓鱼和打猎。」

这一段文字立即让我想到了韦伯的 [[新教伦理与资本主义精神]],书中也恰恰列举了富兰克林作为例子。

这也是 13 条道德中的最后一条。

谁应该看这本书

所有人都应该看一看。

印象深刻的句子

  • 想要说服别人,要诉诸利益而非诉诸理性。
  • 在获得第一桶金之后,再去获得第二桶就容易多了。因为钱是可以生钱的。

13 条道德原则

  1. 节制:食不过饱,饮不过量
  2. 沉默:于人于己不利之言不谈,避免闲言碎语
  3. 秩序:放东西各归其位,办事情各按其时
  4. 决断:决定做你该做的事,做好你决定做的事
  5. 节俭: 不花于己于人没有益处的闲钱,杜绝浪费
  6. 勤奋:珍惜时间,做有用的事,弃掉一切不需要的举动
  7. 诚信:不害人,不欺诈,勿思邪念,言必信,行必果
  8. 正直:不作恶,不要以德报怨
  9. 中庸:避免走极端,忍让化冤仇
  10. 清洁:身体、衣着、居所,不许不洁
  11. 平静:不可为小事、常事或难免之事搅乱了方寸。
  12. 贞洁:少行房事,除非为了身体健康或传宗接代,不做一味,衰弱或者损害自己或别人的安宁和名誉
  13. 谦卑:效法耶稣和苏格拉底。

2022-08-22 autobiography , reading , reading-2022 , reading-2022q3

PlanetScale 云端 MySQL 数据库使用记录

[[PlanetScale]] 构建在 Vitess 之上。[[Vitess]] 是一个可以扩展的 MySQL 集群,集合了很多MySQL特性和NoSQL 的扩展能力。 Vitess 创建于 2010 年,主用用于解决 YouTube 团队面临的 MySQL 扩容问题。

Vitess 是一个分片的非 ACID SQL 数据库(ACID 是原子性、一致性、隔离性和持久性的缩写)。

在 MySQL 中,FOREIGN KEY 约束的实现方式会 影响在线 DDL

Vitess 通过分片方式扩展 MySQL 数据库,数据在水平方向分区,Vitess 根据分片将查询路由到适当的 MySQL 实例上。Vitess 的连接比 MySQL 轻,可以轻松支持数千个连接。

PlanetScale 就是一个运行在云上的 MySQL,有一个 Web 管理界面,还有一个 CLI 工具。

价格

PlanetScale 对于入门的使用是免费的,它的免费套餐提供

  • 5 GB 存储
  • 1 billion row reads/mo
  • 10 million row writes/mo
  • 1 production branch
  • 1 development branch
  • Community support

超出此套餐的存储每 GB 收费 $2.50/mo ,1 billion row read 收费 $1/mo,而 1 million row written 收费 $1.5/mo。

如果有更多的资源使用,也可以 升级套餐

使用

PlanetScale 令人心动的一个功能就是可以给数据库 拉分支 ,PlanetScale 允许用户像代码一样从主库中拉出一个一模一样结构的 development 或 staging 的数据库环境,可以在这个环境中开发,测试。所有的数据都是隔离的。

当完成开发之后,可以创建 deploy request,PlanetScale 会自动对比创建出差异的 Schema diff,然后开发者可以 review 需要部署生效的内容。同意通过之后 deploy 到线上库中。整个部署变更的过程不会产生停机时间。

不过需要注意的是,PlanetScale 为了实现扩容,舍弃了一些 MySQL 的特性,比如 PlanetScale 不支持 FOREIGN KEY1,并且也要求每一个表都有一个唯一且不为空的主键2

监控

  • 可以使用 [[Checkly]] 监控数据库延迟
  • 可以使用 [[Datadog]] 更详细的记录分析数据库的状态

当然 PlanetScale 后台也提供了简单的监控,包括每秒读写。

导入数据

因为 PlanetScale 可以直接使用 MySQL 命令行连接,所以可以直接命令行导入:

sudo mysql -h xxx.ap-northeast-2.psdb.cloud -u inxxxxxxx -ppscale_xxxxxx --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/cert.pem < ~/database.sql

注意这里的证书位置,我是在 macOS 下执行,所以证书在 /etc/ssl/cert.pem,如果是 Linux,证书在 /etc/ssl/certs/ca-certificates.crt1

导入数据包包含 0000-00-00 00:00:00 数据

mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1292 (22007) at line 383: vttablet: rpc error: code = InvalidArgument desc = Incorrect datetime value: '0000-00-00 00:00:00' for column 'update_time' at row 1 (errno 1292) (sqlstate 22007) (CallerID: planetscale-admin): Sql: "insert into tb_dy_resource values (:vtg1, :vtg2, :vtg3, :vtg4, :vtg5, :vtg6, :vtg7, :vtg8, :vtg9, :vtg10, :vtg11, :vtg12, :vtg13, :vtg14, :vtg15, :vtg16, :vtg17, :vtg18, :vtg19, :vtg20, :vtg21, :vtg22, :vtg23, :vtg24, :vtg25, :vtg26, :vtg27, :vtg28, :vtg29, :vtg30, :vtg31, :vtg32, :vtg33, :vtg34, :vtg35, :vtg3

查了一下 PlanetScale 似乎无法修改 sql_mode 字段,那就只能手动修改 SQL 了。

sed -i 's/0000-00-00 00:00:00/2022-01-01 00:00:01/g' gagays.sql

Client

因为 PlanetScale 是兼容 MySQL 的,所以任何 [[MySQL客户端]] 都可以使用。

这里推荐 JetBrains 的 [[DataGrip]]。

在调研的过程中还发现了一款新型的 SQL 客户端,叫做 [[Arctype SQL Client]],主打同步,感兴趣也可以试试。

  • [[Bytebase]] 是一个面向 DBA 和研发工程师的数据库 Schema change/migration 和版本控制工具。
  • [[MySQL InnoDB 存储引擎提供的在线 DDL]]

reference


2022-08-16 mysql , planetscale , vitess , acid , sql , scale

新教伦理与资本主义精神 读书笔记

怎么知道的这一本书

在了解 [[马克思 韦伯]] 的时候,不管是介绍其人,或者是他的传记作品中都不断提及这一部巨著。

我希望读过这一本书之后可以回答如下的问题:

  • 资本主义在世界的很多地方都诞生了,但为什么只有西方的资本主义会占领全世界?
  • 资本主义和宗教之间有没有关联?
  • 使得资本主义文明得以发展的必要条件是什么?

为什么 100 多年之后还要去读这一本 [[新教伦理与资本主义精神]]?

科学,专业领域有很多大问题,有很多的专家可以解答,但是同样有很多的大问题,关乎人生,关乎社会,关乎时代的大问题,并不能由某一个领域的专家来回答。

关于作者

[[马克思 韦伯]] 德国社会学家,哲学家,经济学家。我已经忘记了什么时候第一次了解到韦伯,但是我记得在 [[刘擎西方现代思想讲义]] 中读到 [[工具理性]] 和 [[价值理性]] 的概念的时候再一次加深了对韦伯的印象,于是在前年 2020 年韦伯逝世 100 周年的时候再一次读了一本关于他的传记 [[马克思韦伯 跨越时代的人生]],进一步了解了他的生平和家庭。

几句话总结书的内容

  • 韦伯认为西方的清教徒中禁欲思想对现代资本主义的发展起到了推动作用

什么是伦理?

伦理,Ethic,区别于伦理学(Ethics) ,伦理学又被称为道德哲学,是对日常的伦理寻找根基,分析论证的学问。但是韦伯所指的伦理指的是人们在日常生活中正在运用的,但是对这些伦理缺乏必要的反思的一套规范。

什么是资本主义精神?

韦伯对[[资本主义]]进行新的诠释,他认为资本主义并不是对财富的贪欲,反而是对这种非理性欲望的一种抑制或者至少一种理性的缓解。“在现代的经济秩序下,只要合法赚钱,就可以被看做是一种遵守天职的美德的结果和发挥天职能力的表现。”用更简单的话去概括就是「赚钱光荣」。

「营利变成了目的本身,而不再是为了满足人的物质生活需求的手段。」

而在此之前,更多人的认为赚钱是一种手段,赚钱是可耻的。赚来的钱会立即用掉。韦伯借用了[[富兰克林]] 的例子,富兰克林不仅是一个政治家,同样还是一位了不起的科学家,作家,出版商和商人。他之所以能出现在 100 美元的纸币上,也与他卓越的贡献以及踏实、勤奋的为人有关。

韦伯的资本主义精神并不是不惜一切赚钱,而是要合法合理的赚钱。

  • 勤勉劳动
  • 信用,信守承诺会赢得他人信任,就能获得更多的合作机会
  • 节俭,因为拥有钱就可以生钱

禁欲主义是什么?

加尔文宗教、虔信教、循道教和浸礼宗诸派的教义,通过他们的宗教观念来了解“宗教信仰和宗教活动所产生的心理约束力的影响,这些影响转而指导日常行为并制约个人行动。

宗教观念中的禁欲主义表现出来的行为方式就是,有条理的工作方式、对中产阶级节制观念的鼓励、对暴发户的鄙视、对勤劳美德的赞颂,都成为后来资本主义精神的观念基础,而这样的精神对资本主义财富的积累是相当重要的。

韦伯指出禁欲主义的观念会促使人们有意识地节制地使用财富,并且勤劳地在本职工作上工作,而勤劳必然会导致财富的增加,因而禁欲主义的强制财富储蓄就会导致资本的形成——-提供了投资的资本。

而最后作者指出当前资本主义的实际状况—-资本主义不再需要禁欲主义的支撑,而作为同样对禁欲主义产生重要影响的启蒙运动,其影响力也在日益下降,这样“职业行为”和精神本性中的最高文化价值不在联系起来了,这样后果就是“最后的人”的境况。

回答我之前的疑问

为什么资本主义从西方蔓延到全世界

阅读历史,我们可以知道世界的各个地方都出现过资本主义,但是唯有西方的资本主义成为了现代经济的主流。韦伯在书中论证只有在西方才出现了现代资本主义精神,而这个资本主义精神正是来源于清教徒的禁欲思想。禁欲思想促使人们勤劳工作、有意识地节制地使用财富。而这样精神在进入现代社会之后不再需要禁欲主义的支撑,但是这样的精神促进了资本主义的发展。

  • 「职业」这一词来源于宗教,即上帝安排的任务。在宗教改革时路德在翻译《圣经》时使用了这一词汇,韦伯认为,在新教中,上帝不是要人们以苦修的禁欲主义超越世俗道德,而是要以个人完成在现世里所处地位赋予他的责任和义务。新教伦理就形成了职业道德的概念。
  • 在禁欲主义的新教伦理下,劳动成为了禁欲的一种途径,虚耗时光和不劳动被认为是不道德的。传统的观念认为财富使人懈怠,但是在禁欲主义下,工作是虔诚的表现,富人即使拥有财富也必须工作。这样追求财富只要不用于挥霍就是合理的就成为了一种新教伦理。

韦伯进一步区分了两种类型的资本主义:

  • 「传统的」资本主义,传统的资本家关心盈利,但是理想是谋取社会地位,不会为了赚钱而不停奋斗。舒适的贵族生活方式才是目标,经商是为了尽可能容易获取这种生活方式。
  • 「现代的」或「理性的」资本主义,理性资本主义并不是以奢侈贸易,而是以大规模生产日常生活必需品为基础的。现代资本主义的驱动力不是高价格与巨额利润,而是合理价格与大批量稳定销售。推动现代资本主义的并不是产业革命和新技术发明,而是:随着大规模日用品市场的出现而使用大规模生产技术。

但韦伯也说,宗教伦理、禁欲思想并不是资本主义形成的唯一因素,在西方独特的环境之下,下面的这些因素同样影响了资本主义的发展:

  • 生产经营与工业资本主义发展之前的家政经营分离,在西方比其他地方更加先进
  • 城市的发展。西方在后中世纪之后,城市共同体达到了高度的政治自治,使得市民社会中农业封建制度下脱颖而出。而东方,亲属网络阻断了城乡分化
  • 罗马法的传统,提供了比其他地方更完整、更发达的司法实践理性化
  • 而司法制度又使得民族国家以及全职官僚制度官员行政成为可能。理性的法律体系
  • 复式记账的发展
  • 而这一系列的变化,为形成「自由的」,以市场上出卖劳动力为生的劳动力大军做好了准备

这一些因素全部糅合到一起才促成了资本主义。唯有区别与其他地方的资本主义精神和这种资本主义组织形态的发展,才使得近代西方和东方走向了两条截然不同的发展道路。

启发或想法

韦伯在文末说出了自己的忧虑,基于[[功利主义]]的「实用理性」生活方式,再加上刻板的官僚化工作场所,最终可能会产生一个对个人既缺乏崇高理想又缺少个人主义的社会。而我们如今的生活不恰恰正被韦伯言中了吗?当这一点成为现实的时候,那就不再可能培育出个人行为的伦理责任感,最后,如果没有了伦理价值,同情心、慈善心和博爱之心如何才能存在?清教徒式的为事业献身是不是正在消失,取而代之的则是追求享乐的功利主义计算?而现代资本主义所崇尚的「理性计算」是否会把一切伦理价值统统弃之不顾呢?

谁应该看这本书

  • 知道韦伯,并且想进一步理解韦伯的人
  • 想知道这个世界另一个马克思思想的人

2022-08-15 max-weber , capitalism , ethic , philosophy

谣言 世界最古老的传媒 读书笔记

在阅读上一本 [[法国大革命前夕的舆论和谣言]] 的时候接触到了这一本《谣言:世界上最古老的传媒》,作者让-诺埃尔-卡普费雷(Jean-Noël Kapferer)系统地剖析了什么是谣言,为什么会存在谣言,谣言的传递遵从什么样的规则,我们能不能消灭谣言等等。作者收集了世界上曾经流行的种种谣言,引用了诸多社会心理学实验,去阐述了这些谣言的来源,人们为什么会相信这些谣言,人们又是如何利用谣言来达成自己的目的。

什么是谣言 ?

奥尔波特和波斯曼认为,谣言是一个「与当时事件相关的命题,是为了使人相信,一般以口头媒介的方式在人们之间流传,但是缺乏具体的资料以证实其确切性」。

纳普认为,谣言是一种「旨在使人相信的宣言,它与当前时事有关,在未经官方证实的情况下广泛流传」。

彼得森和吉斯特对谣言的定义是,谣言是一种「在人们之间私下流传的,对公众感兴趣的事物、事件或问题的未经证实的阐述或诠释」。

最著名的谣言的定义是美国社会学家特·希布塔尼,谣言是一群人议论过程中产生的即兴新闻。

通过上面不同学者对谣言的不同定义,可以归纳初谣言的共性:

  • 谣言是一种信息,是与现实中的人或物相关,这一点与传说不同
  • 谣言是为了使人相信,这与童话或故事不同
  • 谣言是未经证实的信息

我们为什么相信谣言

  • 谣言通常宣称自己有可靠的信息来源
  • 我们之所以相信人, 是因为他们经常告诉我们一些被证明是事实的事情, 人在这里充当了中转站
  • 传播谣言的人通常不会和自己切身利益相关,传播谣言似乎只是在利他主义的考虑下才做的
  • 一个似乎是真的信息
  • 科学技术的发展使得一切知识都是可以怀疑的,一切确定性都是不可能的.当公众对一切都无法相信时,他们就会相信一切.
  • 谣言的出现与时代环境是联系在一切的
  • 谣言传到身边时,总是伴有证据
  • 谣言是一种诠释系统.越异想天开,越是钻牛角尖,人们越喜欢
  • 重复的力量
  • 谣言是一个我们愿意相信的信息
    • 相信谣言的愿望
    • 共鸣

谣言能够消灭吗?

二战时期的纳普曾经提出过制止谣言流传的五条建议:

  • 公众对官方传播媒介(报纸、电台、电视)无保留地信任
  • 公众绝对信仰领袖
  • 事件发生后,尽快播发尽可能多的信息
  • 确保所有人都能接受到这些信息
  • 避免人们太过空闲

在二战的背景下,纳普的建议似乎是合法可行的,但是在和平时期重读这些建议时,就好像是在描述一个极权国家。

纳普的功勋在于明确地指出了偏见的根源。谣言并不妨碍人,因为谣言是「虚假的」,如果真的是这样,那么任何人都不会把谣言放在心上。然而,谣言之所以有人相信,正因为谣言经常最终被发现是「真实的」。

作者自己在书中的第四部分用了整整四分之一的篇幅去论述谣言可以被消灭吗?答案当然是否定的。

[[波普尔|卡尔 波普尔]] 认为,一个理论命题只有当它详细说明它的试验程序时才能上升为一个科学命题。然而往往有一些谣言是无法证明的。 相信辟谣与相信谣言本身所遵循的是同一个逻辑。两种情况下,都是凭口头说的就信以为真。扑灭谣言的问题归根到底还是一个人的问题:「相信什么」取决于「谁来说」。没有一个可靠的发言人,反谣言的战斗必然失败。

但找到可靠的发言人就可以反击谣言吗?说起来容易,其实非常难。谣言的扩散常常显示出一种对官方渠道消息的不信任,甚至对政府本身就缺乏信任。在实行新闻管制的国家,谣言便盛行起来,能指望什么样的官方公报来减少谣言呢?

当代社会心理学创始人 S·阿施给出了一个方法。他的思想可以概括为:人们不会改变对一个事物的认识,而是认识的对象在变化。换句话说,就是公众舆论的突变,只能来自谣言自身的变化。于是我们就可以通过改变谣言的面貌来抑制谣言:

  • 寻找谣言中的漏洞,但这种方式并不能百分之百解决问题
  • 向公众解释为什么他们相信谣言。

认识心理学已经证明,为了认识,我们利用的是外在、明显的信号。我们如何判断我们自己是否喜欢某一个事物?我们怎么知道自己是否有才能去做某件工作呢?这两个问题涉及同一个问题,那就是,我们自己对自己的看法。外在的信号会改变我们自己,进而改变我们的认知。

虽然我们没有办法根除谣言,但是依然可以通过一些方法防患于未然。增加透明度就是一个方法。增加消息来源的可靠性也是一个方法。另外也需要注意的是在谣言扩大之前就通过公开透明的信息来防止谣言。一旦谣言扩散出去了,那么再公开透明的信息也难以阻止了。

结论

直到今天,对谣言的研究还被一种负面的观念支配,认为谣言必定是虚假的、臆造的或荒谬的。总有人想要防止谣言。然而,这个世界上只存在一种防止谣言的办法,那就是堵住人的嘴。

只让可靠的消息流传,这表面上看来是合理的操作,但是直接控制消息会导致言论控制,传播媒介成为了官方消息的唯一提供者。于是除了官方消息便再没有了其他消息。

谣言存在的根本原因在于,谣言并不一定是虚假的,而与此同时,谣言必定是非官方的。怀疑官方的事实,于是旁敲侧击,从反面提出其他事实,这就是大众传播媒介未能消除谣言的原因。

谣言从反面提出了另一种价值观,只有不受约束的信息交流才是好的,哪怕其可靠性受到了影响。换一种说法便是,「虚假」的谣言是有根据的谣言必须付出的代价。

当我读到这一段的时候,想起了[[密尔]] 对于言论自由的论述,在 [[论自由]] 中密尔说我们不应该压制任何言论,因为被压制的言论可能包含部分的真实,只有通过充分的讨论才能让我们逼近真实。而这些可能错误的言论是我们获取真理必须要付出的代价。

而从[[认识论]]的角度看,「我们为什么相信我们信以为真的事物?」 我们带着思想、观点、形象、信念生活在这个世界,而思想、观点、形象和信念往往从口传媒介,道听途说而获取。我们往往意识不到这个获取过程,因为这个过程非常缓慢,并且偶然且不易察觉。

作者通过对谣言的研究获得的片刻清醒证实了[[知识]]的脆弱。也许我们所获得的知识中的一大部分是毫无根据的,而我们并没有意识到。

谣言提醒我们一个明显的事实:我们并不是因为我们的知识是真实的、有根据的或被证实的便相信它们。而情况恰恰相反,因为我们相信它们,它们才是真实的。谣言再一次证明,如果有必要的话,任何可靠性都是社会给予的,我们隶属的那个社会群体认为是真实的东西才是真实的。这句话初听起来可能比较晦涩,但我们仔细去回想宗教。社会是建筑在信仰,而不是证据的基础之上的。

谣言最佳的例子不就是宗教吗?它不就是在传播一句由上帝之口说出的话吗?宗教与谣言一样,是一种有传染力的信仰,人们希望徒凭一句话就相信,希望他赞同人们告诉他的事实。并不是存在上帝的证据创造了信仰,而是人们信仰了,才产生上帝。


2022-08-04 rumour , reading , reading-2022 , reading-2022q3 , media

在 IntelliJ IDEA 中使用 reset frame 回退 Debug

在 IntelliJ IDEA 中调试的时候,如果不小心断点跳过了,如果可以往前跳转就可以省去很多时间。搜索一下之后发现,在 IDEA 中叫做 Reset Frame(之前叫做 Drop Frame)。

在启动调试之后,在调试 Debugger 窗口中有 Frames ,其中就是调用堆栈。

idea debugger reset frame

点击其中的某一条,然后右击就可以看到菜单,选择想要跳转回去的 Frame,然后 Reset。

不过需要注意的是这个操作只会重置局部变量,全局变量的状态不会重置。

reference


2022-08-02 intellij , intellij-idea , idea , java , debug , debug-tips , reset-frame , drop-frame

从 mkv 文件中提取字幕文件

mkv 是一种容器,可以包含视频,音频流,也可以包含字幕等等文件,如果要从 mkv 文件中提取字幕,可以使用一款叫做 mkvtoolnix 的命令行工具。

mkvtoolnix

macOS 下:

brew install mkvtoolnix

在 Ubuntu 下:

sudo apt install mkvtoolnix

mkvtoolnix 使用

查看文件内容:

mkvmerge -i path/to/video.mkv

提取字幕文件:

mkvextract tracks path/to/video.mkv 3:file1.srt 4:file2.srt

假设有很多个字幕文件提取,从轨道 3 开始:

for file in *.mkv; do
  sub=$(echo $file | sed 's/\.mkv$/.srt/'); 
  mkvextract tracks "${file}" 3:"${sub}"; 
done

ffmpeg

使用 [[FFmpeg]] 也可以提取字幕。

首先查看文件内容:

ffmpeg -i video.mkd

查看输出的内容中 Stream #<stream number>(eng): Subtitle: subrip 其中 <stream number> 就是字幕的轨道。比如 0:2

然后使用如下命令提取:

ffmpeg -i video.mkv -map <stream number> subs.srt

比如:

ffmpeg -i video.mkv -map 0:2 subs.srt

reference


2022-07-31 mkv , subtitle , cli , mac , linux

电子书

最近文章

  • 使用开源 Wakapi 代替 WakaTime 统计编码时间 之前折腾 GitHub Profile 的时候发现了 [[WakaTime]] 这样一款统计编码时间的工具,之后在读 waka-readme 项目的时候发现,还有两个完全开源的后端兼容版本,一个是 Golang 编写的 [[wakapi]] ,一个是 Huskell 编写的 hakatime 。
  • 使用 WakaTime 统计编码时间 [[WakaTime]] 是为程序员打造的编码统计 Dashboard,可以同来统计项目,编程语言,IDE,编码时间等等内容。 之前在折腾 GitHub Profile 的时候发现的,可以在 GitHub Profile 页面中动态的展示最近的编程状态。
  • 折腾一下 GitHub Profile 虽然很早就知道 GitHub 发布了 Profile 功能,可以使用 README 来丰富 Profile 页面。但是一直以来没啥动力,大多数时候都不会去到主页去访问。但现在有些时候逛 GitHub 的时候会点到 其他人 的主页去看,发现有一些主页虽然只有寥寥几句,但却可以清楚的知道「他/她」最近在贡献什么内容,擅长什么技能。虽然我在 GitHub 上还是观摹大佬居多,但也想着通过这个契机在整理 GitHub Profile 的时候加深一下对自己的认知。
  • 现代政治的正当性基础 读书笔记 怎么知道的这一本书 似乎是在豆瓣的推荐流中第一次发现这一本。
  • 富兰克林自传 读书笔记 怎么知道的这一本书 已经被不止一遍的推荐过,[[芒格]] 非常喜欢这本书,在《穷查理宝典》里面推荐过,巴菲特也曾推荐过,在之前看过的 [[法官能为民主做什么]] 中也能读到美国最高法院法官对富兰克林的尊敬,再到国内,罗辑思维也在视频中推荐过。上一本读过的 [[新教伦理与资本主义精神]] 中[[马克思 韦伯]] 也列举了 [[富兰克林]] 作为例子,有意思的是我在我的笔记库中搜索的时候,一本讲述德州扑克的树中作者也援引了富兰克林的观点,可见富兰克林在美国人心中的地位。