Skip to content

Commit

Permalink
feat: add posts
Browse files Browse the repository at this point in the history
  • Loading branch information
einverne committed Jul 26, 2024
1 parent 32afd42 commit 0067745
Show file tree
Hide file tree
Showing 12 changed files with 715 additions and 0 deletions.
29 changes: 29 additions & 0 deletions _posts/2020-03-01-clean-up-mac-other-storage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
layout: post
title: "清理 macOS 磁盘"
aliases: "清理 macOS 磁盘"
tagline: ""
description: ""
category: 经验总结
tags: [ macos, macos-cleanup, mac, mac-app ]
last_updated:
---

在使用一段时间的 macOS 之后,在打开磁盘就会发现其中有一大部分的磁盘被 Other 占用。这一部分内容在磁盘管理里面是看不到详情的,也就没有办法手动进行管理。

![macOS storage other](https://blog.einverne.info/assets/macos-storage-other.png)

## 磁盘中的 Other 是什么?

macOS 可以识别很多类型的文件,比如说音频,视频,应用等等,但是还有很多其他类型的文件系统是无法识别的,那么就会把这些文件统计成 Other。比如说系统临时文件,应用的缓存文件,日志文件等等。

## 如何清理磁盘中的 Other?

清理磁盘中的 Other 可以帮助释放磁盘空间,提高系统性能。以下是一些方法可以尝试:

1. 使用第三方工具:有很多专门用于清理 macOS 系统文件的第三方工具,比如 [CleanMyMac](https://macpaw.com/cleanmymac)[柠檬清理](https://lemon.qq.com/)等。这些工具可以扫描并清理系统中的临时文件、缓存文件等,帮助释放磁盘空间。
2. 手动清理:可以通过 Finder 手动查找并删除一些不需要的文件,比如下载文件夹、桌面上的临时文件等。也可以尝试清理浏览器缓存、邮件附件等。
3. 清理日志文件:日志文件可能会占用大量空间,在终端中输入命令 `sudo rm -rf /private/var/log/*` 可以删除系统日志。
4. 清理应用缓存:有些应用会生成大量缓存文件,可以尝试在应用设置中找到清理缓存的选项,或者卸载并重新安装应用来清除缓存。
5. 升级 macOS 版本:有时候升级到最新版本的 macOS 可能会自动进行一些系统优化和清理操作,帮助释放磁盘空间。

42 changes: 42 additions & 0 deletions _posts/2020-04-10-bandwhich-to-display-network-bandwidth.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
layout: post
title: "每天学习一个命令:bandwhich 展示带宽使用"
aliases: "每天学习一个命令:bandwhich 展示带宽使用"
tagline: ""
description: ""
category: 经验总结
tags: [ linux, bandwhich, asdf, ]
last_updated:
---

如果你使用我之前推荐过的 [asdf](/post/2020/04/asdf-vm-manage-multiple-language.html),可以直接通过 asdf 来安装 Rust 以及 bandwhich。

## 安装 {#install}

增加 rust

asdf plugin-add rust

安装 rust 最新版

asdf install rust latest

设置全局生效

asdf global rust 1.51.0

这样你就可以在终端使用 `cargo` 来安装 `bandwhich`:

cargo install bandwhich

然后将 `bandwhich` 链接到 `/usr/local/bin` 中:

sudo ln -s /home/einverne/.asdf/installs/rust/1.51.0/bin/bandwhich /usr/local/bin

然后执行:

sudo bandwhich

## Usage

执行 `bandwhich` 可以在界面中看到当前网络的情况,包括了上传下载的速度,以及建立了网络连接的进程,连接数,上传下载的速度,和远程哪些机器建立了连接等等情况。
80 changes: 80 additions & 0 deletions _posts/2020-10-29-kindlepush-bot-user-guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
---
layout: post
title: "kindlepush_bot 机器人使用指南"
aliases: "kindlepush_bot 机器人使用指南"
tagline: ""
description: ""
category: 经验总结
tags: [telegram, kindle, bot, ]
last_updated:
---

这是一篇 Telegram kindlepush_bot 机器人绑定邮箱的教程。

推送邮箱绑定指南。

## 使用 163 邮箱作为推送邮箱

使用电脑登录 <https://mail.163.com> ,右上角「设置」,选择「POP3/SMTP/IMAP」设置。

![MaQI](https://photo.einverne.info/images/2024/07/25/MaQI.png)

在设置中,勾选 「POP3/SMTP 服务」,这个时候会弹出一个确认界面,点击确认,设置授权码。

![M1i4](https://photo.einverne.info/images/2024/07/25/M1i4.png)

开启「设置客户端授权码」,这个时候绑定的手机会收到一个短信。记住该授权码。

将完整的邮箱和授权码,作为发送者邮箱和发送者密码发送给机器人即可。

最后不要忘了到 Amazon 后台将自己的发送邮箱设置为可信邮箱。

在设置的时候如果遇到 (550, b'User has no permission') 错误。需要设置:

![MCAW](https://photo.einverne.info/images/2024/07/25/MCAW.png)

如果遇到 (535, b'Error: authentication failed') 错误,同样需要使用 163 邮箱的授权码,而不是密码。

## 使用 QQ 邮箱作为推送邮箱

为了你的帐户安全,更改 QQ 密码以及独立密码会触发授权码过期,需要重新获取新的授权码登录。

进入设置 -> 账户,开启 POP3/SMTP 服务。

![MEjQ](https://photo.einverne.info/images/2024/07/25/MEjQ.png)

根据提示验证密码。

获取授权码。

## 使用 Gmail 作为推送邮箱

建议开启二步验证后使用专有密码来设置 `kindlepush_bot` 的发送密码。

首先登录:

- <https://myaccount.google.com/>

选择「安全性]

![M5pX](https://photo.einverne.info/images/2024/07/25/M5pX.png)

点击应用专用密码。中间可能需要重新输入密码。

![MdOi](https://photo.einverne.info/images/2024/07/25/MdOi.png)

选择自定义名称:

![Mzb0](https://photo.einverne.info/images/2024/07/25/Mzb0.png)

输入 `kindlepush_bot`,获取一次性的验证码。

### 使用 Gmail 密码

登录 Gmail 账户

在设置页面开启 less secure apps <https://www.google.com/settings/security/lesssecureapps>

![MZw9](https://photo.einverne.info/images/2024/07/25/MZw9.png)

然后登录 <https://accounts.google.com/DisplayUnlockCaptcha> 根据提示进行设置
131 changes: 131 additions & 0 deletions _posts/2021-05-02-reduce-git-repository-size.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
---
layout: post
title: "减小 git 仓库的大小"
aliases:
- 减小 git 仓库的大小
tagline: ""
description: ""
category: 经验总结
tags: [git, linux, ]
last_updated:
---

我一直使用 Git 仓库来管理我的 Markdown 笔记,但是因为定时提交,没多久就产生了非常多的提交历史,并且因为频繁的提交和导入了一些比较大的 PDF 文件和图片文件,所以导致 `.git` 目录的体积已经超过了所有笔记的大小,笔记内容也就 300+M,但是整个仓库有近 1G 大小。

所以便想着能不能给 Git 仓库进行一下瘦身,最开始想要实现的方向是能不能压缩一下提交历史,然后把历史记录中的大文件剔除。所以查询方案的时候就先往这两个方向上靠。

## git gc

最先想到的就是在仓库执行 `git gc`, (garbage collection),这条命令会对 Git 仓库中不需要的文件进行删除,然后将其他文件压缩:

git gc --aggressive

然后再执行:

git prune

`git-prune` 命令会删除在 object database 中不可达的 objects。不过通常在执行 `git gc` 的时候会自动调用该命令。

我的仓库中执行这两条命令后效果并不是很明显。

## 删除 Git 提交的大文件

可以使用 `git count-objects -v` 来查看 git 仓库占用的空间大小。

```
count: 391
size: 13968
in-pack: 41519
packs: 2
size-pack: 493311
prune-packable: 0
garbage: 10
size-garbage: 0
```

在输出的结果中 `size-pack` 就是包文件的大小,单位是 KB,可以看到我本地的包文件在 493MB 左右。

使用如下的命令查看仓库中的大文件:

git rev-list --objects --all | grep -E `git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}' | sed ':a;N;$!ba;s/\n/|/g'`

或者:

git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -15 | awk '{print$1}')"

解释:在 `git gc` 命令执行之后,所有的对象会被放到一个打包的文件中,存放在 `.git/objects/pack/*.idx`,可以通过 `git verify-pack` 命令,对输出的第三列(文件大小)进行排序,从而找出这个大文件。

然后使用 `git rev-list` 命令使用 `--objects` 参数来找出相关的 SHA-1,对象的 SHA-1 和相关联的文件路径。

然后可以使用 `git filter-branch` 来改写历史,移除大文件

```
# 下面的命令请谨慎执行,在多人合作的仓库中小心执行
git filter-branch --tree-filter 'rm -f path/to/large/files' --tag-name-filter cat -- --all
git push origin --tags --force
git push origin --all --force
```

说明:`--tree-filter`

这里的路径别搞错。

## bfg

在搜寻的过程中发现了 `git filter-branch` 的代替工具 `bfg` 可以比 filter-branch 命令更快。

## reference

- [Git 内部原理](https://git-scm.com/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E7%BB%B4%E6%8A%A4%E4%B8%8E%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D)

In my case, I pushed several big (> 100Mb) files and then proceeded to remove them. But they were still in the history of my repo, so I had to remove them from it as well.

What did the trick was:

```
bfg -b 100M # To remove all blobs from history, whose size is superior to 100Mb
git reflog expire --expire=now --all
git gc --prune=now --aggressive
```

Then, you need to push force on your branch:

```bash
git push origin <your_branch_name> --force
```

## bfg

[bfg](https://github.com/rtyley/bfg-repo-cleaner) 可以使用 brew 来安装:

```
brew install bfg
```

```
# 清除垃圾文件(大量无用的mp3文件)
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.mp3' --prune-empty --tag-name-filter cat -- --all
```

```
# 提交到远程仓库(如GitHub, 我再次从git clone GitHub代码库会变小为1.3M)
git push origin --force --all
```

```csharp
# 必须回收垃圾,本地仓库才变小
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now

rm -rf .git/refs/original
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
```

## reference

- [https://github.com/newren/git-filter-repo](https://github.com/newren/git-filter-repo)
- [https://rtyley.github.io/bfg-repo-cleaner/](https://rtyley.github.io/bfg-repo-cleaner/)
- [https://git-scm.com/docs/git-filter-branch](https://git-scm.com/docs/git-filter-branch)
90 changes: 90 additions & 0 deletions _posts/2021-09-01-how-we-talk-about-death-penalty.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
---
layout: post
title: "我们该如何讨论死刑"
aliases:
- "我们该如何讨论死刑"
tagline: ""
description: ""
category: 思考感悟
tags: [ death, punishment, 刑法 , 法律 , ]
last_updated:
---

前两天被朋友问及「是否支持死刑」,我首先抛出了我的观点,我是不支持死刑的,但这些天我一直在思考这个问题,在当时我给朋友的理由是,站在一个审判者的角色,我无法确定我拥有全部的知识和信息来判处一个人死刑,即使证据足够充分,我依然会保持非常怀疑的态度。

但我觉得上述理由还不足以支撑起我的全部观点,所以陆陆续续回顾了我曾经看过的一些书中关于「死刑」讨论,以及综合这几年的新闻,和看过的电视剧,整理一下我的观点。

每当讨论起死刑,总会有不同的观点,有人支持有人不支持,而辩论的双方都可以罗列很多论据。

支持死刑的人会认为死刑有巨大的威慑作用,而错杀的几率微乎其微,为什么要用纳税人的钱长期供养一个终身监禁的罪犯。

而支持废除死刑的人则会认为政府没有权力剥夺一个人的生命;死刑并不能遏制犯罪;如果一旦执行死刑,冤死人的生命无法挽回;监禁一个人一生,比死刑更加有利于惩罚的目的。

所以我就以我微不足道的一些经验梳理一下我对死刑的看法。

## 死刑对于威慑犯罪有用吗?

和大多数支持废除死刑的人观点类似的在于,我也认为死刑不能有效的遏制犯罪。因为犯罪与否与这个社会是否承认死刑并没有直接的联系,而是和整个社会有关系。想要犯下滔天罪行的人是不会在杀人之前考虑是否会被判处死刑的。

截至目前,我没有看到任何证据可以证明死刑对于威慑犯罪有效,有死刑的地方杀人犯罪就会减少吗?对此我是有疑问的。

## 如果死刑是合法 如何处理审判中的程序滥用

在大部分的情况下,对于大部分的嫌疑犯而言,很难直接找到证据证明其杀人,那么举证和求证的过程如何保证对嫌疑人是公平的变非常重要。

在一个司法成熟的国家中尚且存在判决错误的案件,在一个严格要求程序正义的社会里面,依然会存在司法机构伪造证据陷害弱势边缘人物的情况下,我们如何能保证判决的每一个死刑都是没有出错的。

在台湾,士兵江国庆因为强奸女童而被枪毙,但是后来证明是冤案[^1],在美国甚至有美剧拍过社会是如何将一个弱势者推上杀人犯的位置的----《制造杀人犯》。

[^1]: <https://www.bbc.com/zhongwen/simp/china/2016/03/160328_ana_taiwan_death_penalty>

如果死刑可以被执行,那么就必须通过指定周密的法律来确保审判机关正确的实施。如果量刑的标准是不稳定的,并且执行过程也没有严格的程序正义,那么对任何一个司法制度都只会是一场灾难。

之前在看《生活在宋朝》的时候,就看到在宋代,即使要判决一个人死刑,也需要层层的审判,被判决的人甚至可以喊三次冤,那么就必须层层上报审判三次,并且如果一旦司法官将完全无罪之人判有罪,那么一旦案发,受害人所承受的罪刑将全部还施制造冤案的司法官。譬如一名无辜者被故意判了死刑,以后冤案若被发现,则故意错判的法官也将被判死刑。当然站在如今再去看宋朝的司法审判不免有一些荒唐和残忍,但也可以看到古人对死刑的谨慎。

## 死刑的量刑标准

上面提到如果可以允许死刑,那么死刑犯的审判必然需要比普通的案件有更加详细的审判,美国的司法体系中,陪审团必须在做出是否有罪之后,再对嫌疑人进行一次审判,是否执行死刑。

### 民意是否可以成为裁决死刑的依据?

民意是否可以称为裁决死刑的依据,我认为的答案当然是不行。民意是不可量化的概念,任何一方确定的民意标准都可能在实践的过程中被反证推翻。并且往往在案件发生的时候是民意最为高涨的时刻,而往往这个时刻也正是人最容易犯错的时候。

最近有一部韩剧叫做[[恶魔法官]],讲述一个将法庭向全国人民公开,由全民公投而决定是否有罪的超现实主义故事。如果对于一个嫌疑犯,80% 的人投票让他死,那就必须判处死刑吗?当然不是。

### 强奸犯可以判处死刑吗?

强奸犯是否可以判决死刑?很多年前对于儿童性侵曾经有过一段非常热烈的讨论,赞同对强奸犯执行死刑的人不在少数。辩论的双方都有着非常具体的论据,支持者认为,奸淫幼童者即使没有杀人,但和毁人一生没有区别,对社会安定伤害极大,不杀不足以平民愤。而反对者坚持只对杀人犯适用死刑,对没有杀人意图,没有导致死亡结果,对其处以极刑不够人道。

这同样是一个量刑标准的问题,什么样的罪犯可以判处死刑,这本身就是一个非常复杂的问题。

### 是否允许对未成年人实施死刑

如果允许对未成年人实施死刑,那么是否太过于残忍,《联合国儿童权利公约》都不支持对青少年适用无释放可能的终身监禁,更何况是死刑。并且还带来另外一个问题,如何定义未成年人,如果可以对 17,18 岁的未成年人实施死刑,那么 14 岁或 15 岁的孩子犯下了滔天大罪,是否需要判处死刑?那如果再是 5 岁的孩子呢?

那如果不允许对未成年人实施死刑,那么对多少岁以下的人犯罪,才需要动用终身监禁的刑罚呢?

## 死刑是否可以裁决弱智

而美国的司法实践中,认为「无死者,无死刑」,但这仅限于对个人的犯罪,如果是对国家的犯罪,比如叛国、间谍、贩毒、实施恐怖袭击,假设这些人没有造成直接死亡,那也可以判决死刑。

## 最后

刑事司法的目的从来都不是谋求给人定罪,或者追求永恒的司法稳定,其核心原则乃是寻求事实真相。然而事实的真相往往扑朔迷离,而但一旦罪犯被执行死刑,事实就屈居第二位了。人们往往以为把罪犯处以极刑就是最大的惩罚,而往往是把人杀死了,而那些受伤害的人却得不到更多的补偿。

一个无辜的人可能被执行死刑,这就足以成为启动证据听证程序的充分理由。我们是在错误中吸取教训,过去不那么残酷与异常的刑罚,今时今日获取已经被视为残酷与异常。

有一句话叫‘判决之外,法官无语’,你把判决书写好,把道理说好,之后就不要再多说”。

这又让我想起了之前看到过的和法官何帆的对话。

“判决一个人死刑的话,会不会有心理负担?”我问[[何帆]]。 “如果有心理负担的话,那说明这个人不该死。如果你觉得这个人不该死,又判他死刑,那就有问题了。”何帆答道。

## reference

- [[大法官说了算-美国司法观察笔记]]
- 《杀戮的艰难》张娟芬
- [[生活在宋朝]]
- 美剧 制造杀人犯
- 大法官是这样炼成的
- <https://cn.nytimes.com/culture/20121023/cc23hefan/>
Loading

0 comments on commit 0067745

Please sign in to comment.