使用 yt-dlp 下载 YouTube 视频

yt-dlp 是 YouTube-DL 的进阶版本,延续了 YouTube-DL 的开发和维护。

如果想要下载哔哩哔哩 (Bilibili) 的视频,可以看看 lux 这款工具。

如果在 macOS 上还有一款不错的收费应用叫做 [[Downie]] 也可以用来下载 YouTube 视频。数码荔枝 上有正版授权,可以选择购买。

安装

安装 [[FFmpeg]]:

sudo apt install ffmpeg

安装 yt-dlp:

sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
sudo chmod a+rx /usr/local/bin/yt-dlp
sudo ln -s /usr/local/bin/yt-dlp /usr/local/bin/yt

使用

基础使用:

yt-dlp -F --proxy socks5://127.0.0.1:8080 https://www.youtube.com/watch?v=3Hq-cgsV7Og

下载最佳画质:

yt-dlp -f best URL

下载最高视频和音频并合并:

yt-dlp -f bestvideo+bestaudio URL

下载最高视频和音频分开两个文件:

yt-dlp -f 'bestvideo,bestaudio' URL

将视频缩略图嵌入到视频文件:

yt-dlp -f 'bv[height=1080][ext=mp4]+ba[ext=m4a]' --embed-thumbnail --merge-output-format mp4 https://www.youtube.com/watch?v=1La4QzGeaaQ -o '%(id)s.mp4'

下载播放列表:

yt-dlp -f 'bv*[height=1080]+ba' --download-archive videos.txt  https://www.youtube.com/playlist?list=PLlVlyGVtvuVnUjA4d6gHKCSrLAAm2n1e6 -o '%(channel_id)s/%(playlist_id)s/%(id)s.%(ext)s'

下载整个 YouTube Channel,保存为平台加视频名称

yt-dlp -f 'bv*[height=720]+ba' --download-archive videos.txt https://www.youtube.com/c/FootheFlowerhorn/videos -o '%(channel)s/%(title)s.%(ext)s'

2022-09-12 youtube , yt-dlp , video , 视频下载

折腾一下 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/simple-icons@3.0.1/icons/twitter.svg" alt="" height="30" width="40" /></a>
<a href="your link" target="blank"><img align="center" src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/linkedin.svg" alt="" height="30" width="40" /></a>
<a href="your link" target="blank"><img align="center" src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/instagram.svg" alt="" height="30" width="40" /></a>
<a href="your link" target="blank"><img align="center" src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/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 是另一个不错的选择,可以找到很多官方的图标,并且可以自由使用。

另外一个寻找 icon 的方式就是利用 https://cs.github.com GitHub 的 Code Search,然后直接搜索,比如我想要找到豆瓣的 svg ,输入 douban.svg 然后就能找到。

其他徽章

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

Plex 内嵌的 SQLite 数据表字段解析

Plex Media Server 是一个媒体服务器,可以用来管理和串流电影、电视剧、音乐、照片等等媒体格式。

因为 Plex Media Server 运行在本地,所以几乎所有的信息都在本地的一个 SQLite 中,包括了 Library 的信息,多媒体的 meta 信息等等。

Plex Database 的位置

在 Linux 上(包括 NAS):

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

在 Debian/Ubuntu 下 Plex 数据在

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

在 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"

Plex SQLite3

分析的时间是在 2022 年 10 月 8 号,未来 Plex 可能对表名和表结构有所改变,请注意。

目前一共有 81 张表,7 张虚拟表。有一些表可以通过名字猜测出来,比如 accounts 表就是 Plex 登录账号的表。

accounts # 登录的账户
activities # Plex 活动记录,比如更新 metadata, scanning
blobs
cloudsync_files # 看起来像是很多年前 Plex 就关闭了的 Cloud Sync 功能遗留下来的表
devices  # 记录 Plex 登录的设备,包括 Chorme,Phone 等等
directories # Plex 能够扫描的文件夹列表
external_metadata_items
external_metadata_sources
fts4_metadata_titles_docsize
fts4_metadata_titles_icu_docsize
fts4_metadata_titles_icu_segdir
fts4_metadata_titles_icu_segments
fts4_metadata_titles_icu_stat
fts4_metadata_titles_segdir
fts4_metadata_titles_segments
fts4_metadata_titles_stat
fts4_tag_titles_docsize
fts4_tag_titles_icu_docsize
fts4_tag_titles_icu_segdir
fts4_tag_titles_icu_segments
fts4_tag_titles_icu_stat
fts4_tag_titles_segdir
fts4_tag_titles_segments
fts4_tag_titles_stat
hub_templates
library_section_permissions
library_sections # 仓库的设置
library_timeline_entries
locatables
location_places
locations_node
locations_parent
locations_rowid
media_grabs
media_item_settings
media_items
media_metadata_mappings
media_part_settings
media_parts    # 包含了重要的媒体文件的路径
media_provider_resources
media_stream_settings
media_streams
media_subscriptions
metadata_item_accounts
metadata_item_clusterings
metadata_item_clusters
metadata_item_setting_markers
metadata_item_settings
metadata_item_views
metadata_items
metadata_relations
metadata_subscription_desired_items
play_queue_generators
play_queue_items
play_queues
plugin_permissions
plugin_prefixes
plugins
preferences
remote_id_translation
schema_migrations
section_locations
spellfix_metadata_titles_vocab
spellfix_tag_titles_vocab
sqlite_master
sqlite_sequence
sqlite_stat1
statistics_bandwidth
statistics_media
statistics_resources
stream_types
sync_schema_versions
synced_ancestor_items
synced_library_sections
synced_metadata_items
synced_play_queue_generators
synchronization_files
taggings
tags
versioned_metadata_items
view_settings

几张重要的表

专辑的打分,单曲的打分。

metadata_items

metadata_items 记录了所有媒体文件的 metadata 信息

表结构:

create table metadata_items
(
    id                      INTEGER not null
        primary key autoincrement,
    library_section_id      integer,
    parent_id               integer,
    metadata_type           integer,
    guid                    varchar(255),
    media_item_count        integer,
    title                   varchar(255),
    title_sort              varchar(255) collate NOCASE,
    original_title          varchar(255),
    studio                  varchar(255),
    rating                  float,
    rating_count            integer,
    tagline                 varchar(255),
    summary                 text,
    trivia                  text,
    quotes                  text,
    content_rating          varchar(255),
    content_rating_age      integer,
    "index"                 integer,
    absolute_index          integer,
    duration                integer,
    user_thumb_url          varchar(255),
    user_art_url            varchar(255),
    user_banner_url         varchar(255),
    user_music_url          varchar(255),
    user_fields             varchar(255),
    tags_genre              varchar(255),
    tags_collection         varchar(255),
    tags_director           varchar(255),
    tags_writer             varchar(255),
    tags_star               varchar(255),
    originally_available_at dt_integer(8),
    available_at            dt_integer(8),
    expires_at              dt_integer(8),
    refreshed_at            dt_integer(8),
    year                    integer,
    added_at                dt_integer(8),
    created_at              dt_integer(8),
    updated_at              dt_integer(8),
    deleted_at              dt_integer(8),
    tags_country            varchar(255),
    extra_data              varchar(255),
    hash                    varchar(255),
    audience_rating         float,
    changed_at              integer(8) default 0,
    resources_changed_at    integer(8) default 0,
    remote                  integer,
    edition_title           varchar(255)
);

metadata_item_settings

metadata_item_settings 表中记录了媒体文件的打分 (rating),播放次数(view_count),播放位置(view_offset),最后一次播放时间(last_viewed_at)。1

对于音乐库,专辑的 rating 在 metadata_items 表中,对于单曲的打分才在这张 metadata_item_settings 中。

SELECT mi.title, mi.rating album, mis.rating track
FROM metadata_item_settings mis
JOIN metadata_items mi on mis.guid = mi.guid
WHERE mi.parent_id = (SELECT id FROM metadata_items WHERE title LIKE '%<partial album title here>%');

用例

查看 playlists

metadata_type = 15 的时候表示该记录是 Playlist。

select title from metadata_items where metadata_type = 15;

查看某一个播放列表中的文件路径:

select file from media_parts as p left join media_items mi on mi.id = p.media_item_id 
    left join play_queue_generators as pqg on pqg.metadata_item_id = mi.metadata_item_id 
    left join metadata_items on metadata_items.id = pqg.playlist_id
  where metadata_items.title = 'Playlist title';

查看所有条目

SELECT library_sections.name AS Libary, metadata_series.title as Series, metadata_season.'index' AS Season, metadata_media.title AS Title FROM media_items
INNER JOIN metadata_items as metadata_media
ON media_items.metadata_item_id = metadata_media.id
LEFT JOIN metadata_items as metadata_season
ON metadata_media.parent_id = metadata_season.id
LEFT JOIN metadata_items as metadata_series
ON metadata_season.parent_id = metadata_series.id
INNER JOIN section_locations
ON media_items.section_location_id = section_locations.id
INNER JOIN library_sections
ON library_sections.id = section_locations.library_section_id;

2022-09-02 plex , media-server , homelab , sqlite

富兰克林自传 读书笔记

怎么知道的这一本书

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

而我对富兰克林的印象停留在了那个雷雨天放风筝的小孩,以及 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

Rust 编写的代码编辑器 Zed

Zed 是一款使用 [[Rust]] 编写的轻量、可协作的编辑器。是 Atom 编辑器团队在 Atom 关闭之后新起的项目。主打协作能力。

文本编辑器大战中又迎来了一员大将。

不过当前仅支持 Python, Rust, TypeScript, C/C++, JSON。1 支持列表可能之后还会增加。

前有 Visual Studio Code,后有 JetBrains 在积极开发 [[Fleet]],


2022-08-18 zed , rust , editor , atom

介绍一款支持 WebDAV 的网盘 teraCLOUD

teraCLOUD 是一家日本云存储服务提供商,提供基于云端的文件存储、同步和分享功能。用户可以使用 teraCLOUD 上传、下载、同步和分享文件,这些文件可以随时随地在各种设备上进行访问,包括电脑、手机和平板电脑等。

teraCLOUD 提供了多种存储计划,用户可以选择合适的存储空间和价格方案。除了基本的文件存储和同步功能外,teraCLOUD 还提供了一些高级功能,如文件共享、文件夹共享、外部链接共享等,方便用户与他人共享文件和合作工作。

teraCLOUD 采用了高度安全的技术保护用户数据的安全性和隐私。所有文件都会经过加密处理,同时,teraCLOUD 也提供了多种身份验证方式和安全设置,以确保用户数据的安全性和保密性。

teraCLOUD 是一款功能强大且安全可靠的云存储服务,适用于各种个人和商业用途。

但是在所有的特性中 teraCLOUD 的独特之处在于支持 [[WebDAV]]。

什么是 WebDAV

WebDAV(Web Distributed Authoring and Versioning)是一种基于 HTTP 协议的扩展协议,用于在 web 服务器上进行文件管理和协同编辑。WebDAV 可以让用户在 web 服务器上读取、写入和修改文件,并提供了一些高级功能,如文件锁定、版本控制、属性管理等。

通过 WebDAV,用户可以像在本地计算机上编辑文件一样在 web 服务器上编辑文件,这使得 WebDAV 成为一种非常方便的远程协作工具。例如,用户可以通过 WebDAV 在多个地点访问、编辑和共享文件,这对于团队协作、文件共享和远程访问非常有用。

使用场景

teraCloud 支持了 WebDAV 之后就诞生了很多的使用场景,比如可以作为配置文件的存储,可以编程直接访问 WebDAV,也可以直接在系统中挂载网盘当作一个本地硬盘使用。

在 macOS Finder 中添加 WebDAV

打开 Finder,然后按下 Cmd+k (或者菜单栏 Go-> Connect to server),然后在弹出的对话框中填入 TeraCLOUD 的连接内容。点击连接之后,输入 TeraCLOUD 后台提供的用户名和密码(注意这里不是 TeraCLOUD 的登录密码)。然后就可以直接在 Finder 中像本地挂在的磁盘一样使用 TeraCLOUD。 mac finder webdav

Referral

注册完成之后,可以访问 My Page 在其中输入我的邀请码 NDMSQ ,可以活得额外的 1GB 空间。

teracloud referral


2022-08-17 teracloud , cloud-drive , webdav , finder , macos

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

电子书

本站提供服务

最近文章

  • 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 的优势和使用技巧。