├── .hugo_build.lock
├── static
├── .nojekyll
├── CNAME
├── favicon
│ ├── favicon.ico
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── mstile-70x70.png
│ ├── mstile-144x144.png
│ ├── mstile-150x150.png
│ ├── mstile-310x150.png
│ ├── mstile-310x310.png
│ ├── apple-touch-icon.png
│ ├── android-chrome-192x192.png
│ ├── android-chrome-512x512.png
│ ├── browserconfig.xml
│ ├── site.webmanifest
│ ├── README.md
│ └── safari-pinned-tab.svg
├── images
│ ├── whoami
│ │ └── avatar.jpg
│ └── logo.svg
└── README.md
├── layouts
└── shortcodes
│ ├── spoiler.html
│ └── bilibili.html
├── .gitignore
├── assets
└── scss
│ └── custom.scss
├── .github
├── dependabot.yml
└── workflows
│ └── github-pages.yml
├── config
└── _default
│ ├── languages.toml
│ ├── menus.zh-cn.toml
│ └── config.toml
├── content
├── archive
│ └── _index.md
├── posts
│ └── zh-cn
│ │ ├── 077.md
│ │ ├── 052.md
│ │ ├── 069.md
│ │ ├── 021.md
│ │ ├── 067.md
│ │ ├── 026.md
│ │ ├── 071.md
│ │ ├── 064.md
│ │ ├── 047.md
│ │ ├── 080.md
│ │ ├── 073.md
│ │ ├── 075.md
│ │ ├── 005.md
│ │ ├── 035.md
│ │ ├── 061.md
│ │ ├── 081.md
│ │ ├── 008.md
│ │ ├── 055.md
│ │ ├── 100.md
│ │ ├── 072.md
│ │ ├── 033.md
│ │ ├── 104.md
│ │ ├── 082.md
│ │ ├── 076.md
│ │ ├── 074.md
│ │ ├── 088.md
│ │ ├── 034.md
│ │ ├── 009.md
│ │ ├── 051.md
│ │ ├── 070.md
│ │ ├── 012.md
│ │ ├── 060.md
│ │ ├── 062.md
│ │ ├── 057.md
│ │ ├── 102.md
│ │ ├── 004.md
│ │ ├── 089.md
│ │ ├── 056.md
│ │ ├── 079.md
│ │ ├── 045.md
│ │ ├── 030.md
│ │ ├── 022.md
│ │ ├── 066.md
│ │ ├── 001.md
│ │ ├── 011.md
│ │ ├── 086.md
│ │ ├── 065.md
│ │ ├── 020.md
│ │ ├── 087.md
│ │ ├── 010.md
│ │ ├── 041.md
│ │ ├── 090.md
│ │ ├── 083.md
│ │ ├── 050.md
│ │ ├── 007.md
│ │ ├── 000.md
│ │ ├── 053.md
│ │ ├── 059.md
│ │ ├── 029.md
│ │ ├── 048.md
│ │ ├── 028.md
│ │ ├── 091.md
│ │ ├── 024.md
│ │ └── 003.md
└── tools.md
├── .gitmodules
├── archetypes
└── default.md
├── Makefile
├── i18n
└── zh-cn.toml
└── README.md
/.hugo_build.lock:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/static/.nojekyll:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/static/CNAME:
--------------------------------------------------------------------------------
1 | mogeko.me
--------------------------------------------------------------------------------
/layouts/shortcodes/spoiler.html:
--------------------------------------------------------------------------------
1 | {{.Inner}}
2 |
--------------------------------------------------------------------------------
/static/favicon/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mogeko/blog/master/static/favicon/favicon.ico
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.exe
2 | *.exe~
3 | *.dll
4 | *.so
5 | *.dylib
6 | *.test
7 |
8 | public
9 | resources
10 |
--------------------------------------------------------------------------------
/static/favicon/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mogeko/blog/master/static/favicon/favicon-16x16.png
--------------------------------------------------------------------------------
/static/favicon/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mogeko/blog/master/static/favicon/favicon-32x32.png
--------------------------------------------------------------------------------
/static/favicon/mstile-70x70.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mogeko/blog/master/static/favicon/mstile-70x70.png
--------------------------------------------------------------------------------
/static/images/whoami/avatar.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mogeko/blog/master/static/images/whoami/avatar.jpg
--------------------------------------------------------------------------------
/static/favicon/mstile-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mogeko/blog/master/static/favicon/mstile-144x144.png
--------------------------------------------------------------------------------
/static/favicon/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mogeko/blog/master/static/favicon/mstile-150x150.png
--------------------------------------------------------------------------------
/static/favicon/mstile-310x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mogeko/blog/master/static/favicon/mstile-310x150.png
--------------------------------------------------------------------------------
/static/favicon/mstile-310x310.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mogeko/blog/master/static/favicon/mstile-310x310.png
--------------------------------------------------------------------------------
/static/favicon/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mogeko/blog/master/static/favicon/apple-touch-icon.png
--------------------------------------------------------------------------------
/static/favicon/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mogeko/blog/master/static/favicon/android-chrome-192x192.png
--------------------------------------------------------------------------------
/static/favicon/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mogeko/blog/master/static/favicon/android-chrome-512x512.png
--------------------------------------------------------------------------------
/assets/scss/custom.scss:
--------------------------------------------------------------------------------
1 | .spoiler {
2 | color: black;
3 | background-color: black;
4 | }
5 |
6 | .spoiler:hover {
7 | color: white;
8 | }
9 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "github-actions"
4 | directory: "/"
5 | schedule:
6 | interval: "monthly"
7 |
--------------------------------------------------------------------------------
/config/_default/languages.toml:
--------------------------------------------------------------------------------
1 | [zh-cn]
2 | title = "Mogeko's Blog"
3 | languageName = "简体中文"
4 | weight = 1
5 | languagedir = "ltr"
6 | contentdir = "content/"
7 |
--------------------------------------------------------------------------------
/content/archive/_index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Archive
3 | date: 2021-09-11T16:49:26Z
4 | type: archive
5 | description: Zzo archive page
6 | titleWrap: wrap # wrap, noWrap
7 | ---
8 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "themes/zzo-dev"]
2 | path = themes/zzo-dev
3 | url = https://github.com/Mogeko/hugo-theme-zzo.git
4 | branch = dev
5 |
6 | [submodule "themes/zzo"]
7 | path = themes/zzo
8 | url = https://github.com/zzossig/hugo-theme-zzo.git
9 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/077.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "077"
3 | date: 2021-09-10T12:14:14Z
4 | draft: true
5 | tags: []
6 | categories: [""]
7 | image:
8 | subtitle:
9 | ---
10 |
16 |
--------------------------------------------------------------------------------
/static/favicon/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #da532c
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/archetypes/default.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "{{ replace .Name "-" " " | title }}"
3 | subtitle:
4 | date: {{ .Date }}
5 | draft: false
6 | tags: []
7 | categories: [""]
8 | image:
9 | description:
10 | ---
11 |
12 |
17 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | BLOG_POSTS = $(shell pwd)/content/posts/zh-cn
2 |
3 | CMD = env hugo
4 | IDE = env code
5 | GIT = env git
6 |
7 | build: $(BLOG_POSTS)
8 | @$(CMD)
9 |
10 | dev: $(BLOG_POSTS)
11 | @-$(CMD) server
12 |
13 | new: $(BLOG_POSTS)
14 | @$(CMD) new $(BLOG_POSTS)/$(NEW_FILE_ID).md
15 | @$(IDE) $(BLOG_POSTS)/$(NEW_FILE_ID).md
16 |
17 | commit:
18 | @-$(GIT) add .
19 | @-$(GIT) commit -m "Update: $(shell date +%Y-%m-%d)"
20 |
21 | push: commit
22 | @-$(GIT) push
23 |
24 | clean:
25 | @$(GIT) clean -Xdf
26 |
--------------------------------------------------------------------------------
/static/favicon/site.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "",
3 | "short_name": "",
4 | "icons": [
5 | {
6 | "src": "/android-chrome-192x192.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "/android-chrome-512x512.png",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "theme_color": "#ffffff",
17 | "background_color": "#ffffff",
18 | "display": "standalone"
19 | }
20 |
--------------------------------------------------------------------------------
/config/_default/menus.zh-cn.toml:
--------------------------------------------------------------------------------
1 | [[main]]
2 | identifier = "archive"
3 | name = "Archive"
4 | url = "archive"
5 | weight = 1
6 |
7 | [[main]]
8 | identifier = "posts"
9 | name = "Posts"
10 | url = "posts"
11 | weight = 2
12 |
13 | [[main]]
14 | identifier = "categories"
15 | name = "Categories"
16 | url = "categories"
17 | weight = 3
18 |
19 | [[main]]
20 | identifier = "tags"
21 | name = "Tags"
22 | url = "tags"
23 | weight = 4
24 |
25 | [[main]]
26 | identifier = "about"
27 | name = "About"
28 | url = "about"
29 | weight = 5
30 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/052.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "纪念一位英雄的落幕"
3 | date: 2019-04-12T00:01:00+08:00
4 | draft: false
5 | tags: ["随笔"]
6 | categories: ["随便写点什么"]
7 | ---
8 |
13 |
14 | 一个澳大利亚人莫名其妙的触犯了瑞典的法律,在美国的威胁下,最终因为厄瓜多尔的背叛在英国被捕。
15 |
16 | 这位揭露了世界上最大阴谋的英雄居然被这个世界逼得走投无路,最终难逃牢狱之灾;而真正犯下战争罪行的人却可以堂而皇之地在安理会上喊着自己是 “The force of freedom and democracy”!
17 |
18 | 这个世界运转的规则就是不欢迎说敢真话的人!
19 |
20 | 希望阿桑奇能活下来...
21 |
22 | 
23 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/069.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "我要去火星了!!"
3 | date: 2019-05-31T17:36:58+08:00
4 | draft: false
5 | tags: ["随笔"]
6 | categories: ["随便写点什么"]
7 | image:
8 | subtitle:
9 | ---
10 |
15 |
16 | 还有一年就要去火星了,我会想念大家的 ( •̥́ ˍ •̀ू )
17 |
18 | 
19 |
20 |
21 |
22 | 哈哈哈,给大家开个玩笑😂😂
23 |
24 | 这实际上是 NASA 发起的一项签名活动,只需要在[这个网站](https://mars.nasa.gov/participate/send-your-name/mars2020) (可能需要梯子,因为有 reCaptcha) 登记你的**姓名、邮编和电子邮箱地址**,NASA 就会通过「火星 2020」探测器将你的名字送到火星上去。
25 |
26 | 据说,NASA 的喷气推进实验室 (JPL) 会用电子束,将你的名字模刻到硅片上,每个名字只会占用一个小于人类头发丝 1/1000 的空间 (75 纳米)。因此,带去火星上的一个硅片上,就能写满 100 万个名字。
27 |
28 |
29 |
30 | 今后大家都是即将在火星拥有姓名的人了,说话嚣张点 ✧(≖ ◡ ≖✿)
31 |
--------------------------------------------------------------------------------
/layouts/shortcodes/bilibili.html:
--------------------------------------------------------------------------------
1 | {{ $videoID := index .Params 0 }}
2 | {{ $pageNum := index .Params 1 | default 1}}
3 |
4 |
16 |
17 | {{ if (findRE "^[bB][vV][0-9a-zA-Z]+$" $videoID) }}
18 |
19 | {{ else }}
20 |
21 | {{ end }}
22 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/021.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "空洞骑士:存档备份方法"
3 | date: 2018-09-30T19:17:00+08:00
4 | draft: false
5 | tags: ["第九艺术", "Steam 指南备份", "轻松休闲的空洞骑士"]
6 | categories: ["关于第九艺术"]
7 | ---
8 |
9 |
10 |
11 | 一个简单的方法备份「空洞骑士」的存档文件。
12 |
13 | 备份存档文件有个以下好处:
14 |
15 | 1. 因为众所周知的原因,Steam 云有时会不稳定,定期手动备份存档可以减少因云备份失败造成的进度丢失
16 | 2. 可以较为快速的完成某些不可能在同一存档中完成的成就
17 |
18 |
19 |
20 | ## 正文
21 |
22 | 使用 Win键 + R 呼出「运行」,然后输入
23 |
24 | %HOMEDRIVE%%HOMEPATH%\AppData\LocalLow\Team Cherry\Hollow Knight
25 |
26 | 
27 |
28 | 在弹出的文件夹中可以看到以下文件
29 |
30 | 
31 |
32 | `user[数字].dat` 就是存档文件,数字 (1 - 4) 表示第几个存档。
33 |
34 | ---
35 |
36 | 原文地址:[「空洞骑士」存档备份方法 | Steam 社区](https://steamcommunity.com/sharedfiles/filedetails/?id=1526745112)
37 |
38 | 作者:依然是 Mogeko ٩(●˙▿˙●)۶
39 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/067.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "在博客中展示 GitHub Chart"
3 | date: 2019-05-29T22:03:42+08:00
4 | draft: false
5 | tags: []
6 | categories: ["不知道怎么分类的分类"]
7 | image:
8 | subtitle:
9 | ---
10 |
15 |
16 | 今天给大家介绍一个很有意思的网站:[GitHub Chart API](https://ghchart.rshah.org/)
17 |
18 | 更准确的说是一个很有趣的 API。它可以实时的将 GitHub Chart 信息转化成一张图片,就像这样
19 |
20 | 
21 |
22 | 正好可以方便我们在博客中展示我们的 GitHub Chart {{< spoiler >}}顺便防止自己偷懒 \_(:з」∠)\_{{< /spoiler >}}
23 |
24 |
25 |
26 | 使用方法也很简单,只需要在网址 `https://ghchart.rshah.org/` 后跟上自己的 GitHub 用户名即可,例如我的
27 |
28 | ```html
29 | https://ghchart.rshah.org/mogeko
30 | ```
31 |
32 | 这就是实时你展示 GitHub Chart 的图片的 URL 了,将这个 URL 放在 `
` 标签里就可以在任意网页上展示了
33 |
34 | ```html
35 |
36 | ```
37 |
38 | 如果是在 Markdown 中,应该这么写
39 |
40 | ```markdown
41 | 
42 | ```
43 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/026.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Windows / Office 激活脚本 (使用 KMS)"
3 | date: 2018-11-18T00:54:27+08:00
4 | draft: false
5 | tags: ["Windows", "KMS", "Tools"]
6 | categories: ["关于软件", "微软看了想打人"]
7 | ---
8 |
9 | 很早以前的一个仓库了,博主已经入了 Office 365,早就用不到了。
10 |
11 | 不过最近帮小学妹装机,所以突然诈尸更新了一波。给需要的人 (○'◡'○)ノ♥
12 |
13 |
14 | **这个脚本可以用来激活:**
15 |
16 | - **Office (零售版和 VOL 版)**
17 | - **Windows (仅限 VOL 版)**
18 |
19 |
20 |
21 | 链接:[Mogeko/KMS | GitHub](https://github.com/Mogeko/KMS)
22 | 直接下载:[Run.cmd](https://github.com/Mogeko/KMS/releases/download/V3.0.0/Run.cmd)
23 | 使用的 KMS 服务器来自:[零散坑](https://03k.org)
24 |
25 | ## 用法
26 |
27 | **双击运行 Run.cmd,然后根据提示激活即可**
28 |
29 | 
30 |
31 | **VOL 版的 Office 和 Windows** 直接通过 KMS 激活,**零售版的 Office** 需要先用脚本转换成 VOL 版,然后通过 KMS 激活。{{< spoiler >}}零售版 Windows:我觉得我还可以抢救一下 QAQ{{< /spoiler >}}
32 |
33 | **脚本默认激活的是 2016 版的 Office**,其他版本可以到文件夹里找单独激活的脚本 (没测试过,理论上是可以用的),或者自己手动改一下脚本 (将 `%ospp%` 这个变量替换成正确的 `opss.vbs` 路径)
34 |
35 |
36 |
37 |
38 | **怎么说呢,要尊重别人的劳动成果,所以我觉得大家应该尽量避免使用盗版软件。**
39 | **毕竟软软也是要掐饭的嘛,有能力的话最好还是入个正比较好 |・ω・`)**
40 |
--------------------------------------------------------------------------------
/static/favicon/README.md:
--------------------------------------------------------------------------------
1 | # Your Favicon Package
2 |
3 | This package was generated with [RealFaviconGenerator](https://realfavicongenerator.net/) [v0.16](https://realfavicongenerator.net/change_log#v0.16)
4 |
5 | ## Install instructions
6 |
7 | To install this package:
8 |
9 | Extract this package in the root of your web site. If your site is http://www.example.com, you should be able to access a file named http://www.example.com/favicon.ico.
10 |
11 | Insert the following code in the `head` section of your pages:
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | *Optional* - Check your favicon with the [favicon checker](https://realfavicongenerator.net/favicon_checker)
--------------------------------------------------------------------------------
/content/tools.md:
--------------------------------------------------------------------------------
1 | ---
2 | type: tools
3 | ---
4 | # 几只住在本站的工具酱...
5 |
6 |
7 | ## 临时邮箱 ●
8 |
9 | 地址:[mail.mogeko.me](http://mail.mogeko.me)
10 |
11 | 用来临时接收邮件的一次性邮箱服务
12 |
13 | [README](https://mogeko.github.io/2019/047/)
14 |
15 | ## KMS 激活服务 beta
16 |
17 | KMS 服务器地址:
18 |
19 | 用来激活 VoL 版的 Microsoft Windows 和 Microsoft Office
20 |
21 | [README](https://mogeko.github.io/2019/054/)
22 |
23 | ## android-toolchain
24 |
25 |
26 |
27 | GitHub 地址: [Mogeko/android-toolchain](https://github.com/Mogeko/android-toolchain)
28 |
29 | 从 Android NDK 中提取的独立交叉编译工具链,可以用来在 x86_64 架构的 PC 上编译在 Android 中运行的程序和库
30 |
31 | 支持的系统 (x86_64): Linux/macOS/Windows
32 |
33 | 支持的目标平台: arm/arm64/mips/mips64/x86/x86_64
34 |
35 | [README](https://github.com/Mogeko/android-toolchain/blob/master/README.md) [下载地址](https://github.com/Mogeko/android-toolchain/releases/latest)
36 |
37 |
38 |
39 | ·End·
40 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/071.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "永远的一"
3 | date: 2019-06-07T23:54:42+08:00
4 | draft: false
5 | tags: ["随笔"]
6 | categories: ["随便写点什么"]
7 | image:
8 | subtitle:
9 | ---
10 |
11 |
16 |
17 | 今天是高考第一天,在家里沙发上坐,和朋友聊着天,聊些大学里的是是非非,一些有的没的,看到小刀做的视频,突然意识到自己已经毕业一年了。
18 |
19 | 翻出高中的毕业照,明明才毕业了一年,不知道为什么看着有些脸却叫不出名字,只能比对着下面标注的名字。
20 |
21 | 看到他们的脸,想起了高中的一些事:班里谁喜欢着谁,她和他分手了,她又找了一个女朋友什么等等的。突然很感慨,原来我是想念高中的生活的,虽然要早起,虽然会和别人吵架,虽然有写不完的作业,虽然食堂的饭菜比大学难吃很多,但是,还是想念曾经的一切啊!!
22 |
23 | 看着毕业照上同学的表情,突然想起班上的几对最终都没有走到最后。不禁唏嘘:曾经真心觉得般配的两个人如今却成了仇家。
24 |
25 | 感觉进了大学,有些事变了,有些人也变了,我也变了,曾经的我很任性,自己不认同的事情打死也不会去做,以前的我绝对不会想到今天的我居然会为了所谓的「人际关系」去讨好一个我不喜欢的人!即使受到了不公正的对待也不得不压下自己的怒火和若干脏话。我不知道应该说自己成长了,还是变懦弱了。
26 |
27 | 想起以前不知是在读者还是意林还是格言上看过的一段话,大致讲的是:「社会就是台大机器,每个人都是齿轮,大学就是把我们锋利的,不规则的棱角给磨平,当送上社会的时候就是那千千万万齿轮中的一个」,当时看到的时候心想怎么可能,老子就是要坚持个性,可是,现在,不是说没个性,只是渐渐的,没以前的那种不怕死的精神,渐渐的,臣服于这个赤裸裸,冷冰冰却又真真实实的社会。所以说看着以前的照片,想着以前的人,有种怀念,怀念好的坏的,怀念争吵的,开心的,怀念讨厌的,喜欢的,就是不想面对现在的。
28 |
29 | 只能说自己懦弱吧,怕踏上社会会适应不了,适应不了尔虞我诈,适应不了只是为了目的而来和交朋友,适应不了明明看他不爽,见面时还是要笑脸相迎,适应不了靠关系而不靠实力,靠颜值而不靠本事的潜规则……
30 |
31 | 所以说怀念以前大家随心所欲的那对方开玩笑而不会担心记恨,怀念只是因为破事而伤心,不管同学还是朋友都真心安慰你的那些时光,怀念以前……
32 |
33 | 不过我终将走上社会,面对形形色色的人,各式各样的难关,只能在这发发牢骚,希望引起共鸣,来纪念我此时此刻的心情。
34 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/064.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "安利一部日剧:半泽直树"
3 | date: 2019-05-13T17:27:55+08:00
4 | draft: false
5 | tags: ["影评"]
6 | categories: ["随便写点什么"]
7 | ---
8 |
13 |
14 | 安利一部剧:半泽直树 [豆瓣:9.1](https://movie.douban.com/subject/24697949/) [IMDB:8.5](https://www.imdb.com/title/tt2930136/)
15 |
16 | 这是我看的第一部讲职场战的电视剧。本以为作为学生党对这一题材不会太感兴趣,结果一看就入迷了,欲罢不能的一口气追完了全季!
17 |
18 | 剧情精彩并且全员演技在线,除了半泽叔表情浮夸了一点(收个账至于吗😂😂😂
19 |
20 | 有人说看《纸牌屋》可以了解美国政府的运作原理,那么看这部剧则可以了解(日本)银行的运作原理,剧中反应的社会现象相当真实。仅从第一集这足以媲美很多大制作电影的剧情来看,你大概就能明白为什么日本这样一个资源匮乏,人口不足 2 亿的岛国能成为世界第三大经济体,因为它认真、精致、追求完美;用半泽父亲的话来说:「是这颗螺丝支撑着全日本」。
21 |
22 | 另外还有句父亲的话经常被提起,「珍惜人与人之间的交往,不要像机器人一样工作」,这一句堪称高贵的话,它体现了整部剧最想传达的价值观:尊重人的价值和创造。
23 |
24 | 但下属怼上司怼到土下坐的这种桥段是个正常人都知道是不可能的,一两个还好,整部剧一种在怼未免有些假(虽然看着很爽
25 |
26 | 
27 |
28 |
29 |
30 | 另外还有一点非常值得说的就是他的结局,行长的骚操作看得我一脸懵逼,想了两分钟。。。
31 |
32 | 卧槽,这剧神了!!!Σ(っ °Д °;)っ
33 |
34 | 以下是个人的一点解读:⚠剧透警告⚠
35 |
36 | 关于对大和田的处理,眼镜已经说得很清楚了,就是为了缓和派系之争顺便拉拢一下大和田系的人。而对于半泽的处理就要复杂得多了。
37 |
我们先分析一下大和田跪完后半泽的处境:
38 |
39 | - 虽然大和田系被削弱了,但派系之争仍然存在
40 | - 半泽除了两个基友以及一个欣赏他的直属上司(算半个)外基本没有别的什么政治资本了
41 |
42 |
也就是说大和田系的人会排挤他,东京系会提防他,半泽失去了几乎所有的派系支持。留在银行内部,在所有同僚的敌视下,半泽寸步难行。将它调到两大派系鞭长莫及之处当部长,目的是为了保护半泽,似降实升,最终半泽绝对会当上行长的!
43 |
44 | 如果半泽不当行长,我给大家土下坐谢罪ヽ(`⌒´メ)ノ
45 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/047.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "本站上线临时邮箱服务了!!"
3 | date: 2019-03-27T11:51:10+08:00
4 | draft: false
5 | tags: ["Tools"]
6 | categories: ["工具酱 ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊"]
7 | ---
8 |
13 |
14 | **本站的临时邮箱暂时不支持申请免费的 Office 356 教育版的 5T OneDrive 网络硬盘**
15 |
16 |
17 |
18 | 今天!本站的临时邮箱服务上线了!!( ̄y▽, ̄)╭ 地址:[mail.mogeko.me](http://mail.mogeko.me)
19 |
20 | 什么是临时邮箱呢?就是一个临时分配的一次性邮箱地址,你只能用它来**收**邮件,但关闭网页它就没有了。
21 |
22 | 所以这又有什么用了?
23 |
24 | 大家来试想一下这个场景:你在 XX论坛 看件有大佬的资源分享贴,然后你又正好需要这个这个资源。当你兴奋的点下 `下载附件` 按钮是,弹出一个窗口
25 |
26 | 
27 |
28 | 我只是想下个附件啊!(╯‵□′)╯︵┴─┴
29 |
30 | 用真实邮箱注册吧,不仅注册麻烦,而且**还有被垃圾邮件轰炸的风险**。这时,如果有临时邮箱就不同了——**你可以使用临时邮箱申请注册,注册成功后就扔掉不管了**,你今后仍可使用注册的邮箱登录,~~不过这种垃圾论坛一般不会经常使用的吧。~~
31 |
32 | 在成功下到资源的同时避免了身份泄露被垃圾邮件轰炸,深藏功与名๑乛◡乛๑
33 |
34 | (感谢 萌咖 | MoeClub.org 提供的服务器)
35 |
36 |
37 |
38 | ## 如何使用
39 |
40 | 首先,打开 [临时邮箱](http://mail.mogeko.me)
41 |
42 | 
43 |
44 | 右上角就是分配给你的临时邮箱地址了,如果不满意的话你也可以刷新,或者自定义邮箱地址 (如果可用的话)
45 |
46 | 然后,**千万不要关闭临时邮箱的页面**,直接去需要注册的论坛,填上分配给你的邮箱地址,以及随便取的用户名、密码等。
47 |
48 | 
49 |
50 | 然后就可以收到验证码等注册所需要的信息了
51 |
52 | 
53 |
--------------------------------------------------------------------------------
/.github/workflows/github-pages.yml:
--------------------------------------------------------------------------------
1 | name: Mogeko`s Blog
2 |
3 | on:
4 | push:
5 | branches: [master]
6 | workflow_dispatch:
7 |
8 | permissions:
9 | contents: read
10 | pages: write
11 | id-token: write
12 |
13 | concurrency:
14 | group: "pages"
15 | cancel-in-progress: true
16 |
17 | defaults:
18 | run:
19 | shell: bash
20 |
21 | jobs:
22 | build:
23 | runs-on: ubuntu-latest
24 | env:
25 | HUGO_VERSION: 0.104.0
26 | steps:
27 | - name: Checkout
28 | uses: actions/checkout@v3
29 | with:
30 | submodules: recursive
31 | - name: Setup Pages
32 | id: pages
33 | uses: actions/configure-pages@v3
34 | - name: Setup Hugo
35 | uses: peaceiris/actions-hugo@v2
36 | with:
37 | hugo-version: ${{ env.MHUGO_VERSION }}
38 | extended: true
39 | - name: Build site
40 | env:
41 | HUGO_ENVIRONMENT: production
42 | HUGO_ENV: production
43 | run: hugo --minify --baseURL "${{ steps.pages.outputs.base_url }}"
44 | - name: Upload artifact
45 | uses: actions/upload-pages-artifact@v1
46 | with:
47 | path: ./public
48 |
49 | deploy:
50 | environment:
51 | name: github-pages
52 | url: ${{ steps.deployment.outputs.page_url }}
53 | runs-on: ubuntu-latest
54 | needs: build
55 | steps:
56 | - name: Deploy to GitHub Pages
57 | id: deployment
58 | uses: actions/deploy-pages@v1
59 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/080.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "防止剧透的隐藏文字"
3 | date: 2020-04-02T18:10:38+02:00
4 | draft: false
5 | tags: ["hugo", "mogege"]
6 | categories: ["折腾博客的二三事"]
7 | image:
8 | subtitle:
9 | ---
10 |
16 |
17 | 这篇文章与[上一篇](https://mogeko.me/2020/079/)一样,同样是重构 [LeaveIt](https://raw.githubusercontent.com/liuzc/LeaveIt/) 的成果之一
18 |
19 | 为什么要分成两篇文章呢?~~当然是为了多水一篇文章啊!~~
20 |
21 | ## Start
22 |
23 | 「隐藏文字」的原理很简单:将文字颜色和背景颜色都设置成黑色,然后再在鼠标移动到文字上时将文字颜色改成白色。
24 |
25 | 所以我们首先要新建一个 Hugo Shortcodes 来规范化的插入 HTML 标签
26 |
27 | 在 `layouts/shortcodes` 文件夹中创建文件 `spoiler.html` (如果没有那个文件夹就自己新建一个)
28 |
29 | ```html
30 | {{.Inner}}
31 | ```
32 |
33 | 然后再在 `/assets/css/_common/_partials/post.scss` (每个主题的不一样) 中编写 CSS
34 |
35 | ```css
36 | // 隐藏文字
37 | .spoiler {
38 | color: black;
39 | background-color:black;
40 | }
41 | .spoiler:hover{
42 | color: white;
43 | }
44 | ```
45 |
46 | 同样的,如果你实在是不知道你的主题的 CSS 文件在哪儿,也可以直接往 `layouts/shortcodes/spoiler.html` 里写
47 |
48 | ```html
49 |
59 | ```
60 |
61 | 然后就可以用了!
62 |
63 |
64 | ### 用法
65 |
66 | 用法就是在你想使用「隐藏文字」的地方这么写
67 |
68 | ```markdown
69 | {{* spoiler */>}} 隐藏文字 {{* /spoiler */>}}
70 | ```
71 |
72 | 效果:{{< spoiler >}} 隐藏文字 {{< /spoiler >}}
73 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/073.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "绿皮书 | 一部傲慢的反歧视电影"
3 | date: 2019-06-12T11:41:28+08:00
4 | draft: false
5 | tags: ["影评"]
6 | categories: ["随便写点什么"]
7 | image:
8 | subtitle:
9 | ---
10 |
15 |
16 | 《绿皮书》是一部反应美国 00 年代 (南北战争前) 白人与黑人种族关系的电影,它凭借出色的配乐,精湛的演技,以及反歧视的主题一举拿下了 2018 年的奥斯卡奖,然而他真的像他宣传的那样是在反种族歧视吗?
17 |
18 | 《绿皮书》讲述了一个意大利裔美国人托尼与非洲裔美国人唐雪莉之间的故事。
19 |
20 |
21 | 托尼是一个吊儿郎当游手好闲的混混,在一家夜总会做侍者。这间夜总会因故要停业几个月,可托尼所要支付的房租和生活费不会因此取消,所以他的当务之急是去寻找另一份工作来填补这几个月的空缺。在这个节骨眼上,一位名叫唐雪莉的黑人钢琴家提出雇佣托尼。
22 | 唐雪莉即将开始为期八个星期的南下巡回演出,可是,那个时候南方对黑人的歧视非常的严重,于是托尼便成为了唐雪莉的司机兼保镖。一路上,两人迥异的性格使得他们之间产生了很多的矛盾,与此同时,唐雪莉在南方所遭受的种种不公平的对待也让托尼对种族歧视感到深恶痛绝。
23 | —— 绿皮书 (豆瓣)
24 |
25 |
26 | 托尼原本是一位种族主义者,通过各种遭遇最终成为了唐雪莉最重要的朋友,然后温情脉脉,岁月静好。如果仅从托尼的人物塑造来看本片无疑是成功的,然而他恶毒就恶毒在对唐雪莉的角色设定上:**一位种族的叛徒。**
27 |
28 | **一个黑人,自己的民族受到压迫,他不参加民权活动,和家人闹翻,和自己的民族划清界限,说最标准的英语,从不听黑人音乐,对黑人的文化非常敌视,觉得美国人的生活方式才是最高雅的。他为了向美国人证明黑人也可以很高雅跑到美国最落后的地方表演……西洋乐?!**
29 |
30 | 换做是你你会接受吗?一个标榜自己是美国人的美国华裔,反过来歧视中国人?!这就是绿皮书,一部傲慢的反歧视电影。
31 |
32 | 片中,唐说那些白人来听他表演只是为了装逼。
33 |
34 | 
35 |
36 | 然而讽刺的是这部电影能得奖也完完全全是因为美国上流想标榜自己的高雅,是白左想装逼
37 |
38 |
39 | 弱小和无知不是生存的障碍,傲慢才是。 —— 刘慈欣, 《三体Ⅲ:死神永生》
40 |
41 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/075.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "明日方舟: LS-5 快速过图攻略"
3 | date: 2019-10-31T19:39:19+08:00
4 | draft: false
5 | tags: ["第九艺术", "Arknights"]
6 | categories: ["关于第九艺术"]
7 | image: https://mogeko.github.io/blog-images/r/075/logo.jpg
8 | subtitle: 明日方舟 LS-5 (狗粮关) 较高配置的快速过图攻略。
9 | ---
10 |
11 | {{< featuredImage >}}
12 |
13 |
18 |
19 | 分享一个明日方舟 LS-5 (狗粮关) 较高配置的快速过图攻略。
20 |
21 | **核心是银老板**。主要是用银老板**开真银斩清第一波飞机 + 一人守两路**,以此来防止卡费
22 |
23 | ## 视频攻略
24 |
25 | {{< bilibili 74117619 >}}
26 |
27 | ## 图文攻略
28 |
29 | 
30 |
31 | 首先拍下两个先锋,站场 + 回费
32 |
33 | 
34 |
35 | 费用好后拍下银老板 (**向左**) 和单体奶
36 |
37 | 
38 |
39 | 
40 |
41 | **关键步骤来了!当左边那个敌人开始移动时,银老板迅速开真银斩,清一波飞机 + 守住左路**
42 |
43 | 
44 |
45 | 然后放下两个高速对空单体狙堵门 (飞机),如果地面单位输出不够的话,就向上向下放 (帮忙输出,不堵门)
46 |
47 | 
48 |
49 | 打完这一波敌人后拍下陈,不出意外的话费用刚刚好 (这也是丢人熊带一技能的原因)
50 |
51 | 
52 |
53 | 至此,阵型已经基本成型了。
54 |
55 | 费用好后拍下小羊帮助输出
56 |
57 | 
58 |
59 | 任务完成
60 |
61 | 
62 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/005.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "在你的文章中添加 B站的视频"
3 | date: 2017-09-09
4 | draft: false
5 | tags: ["Hexo"]
6 | categories: ["折腾博客的二三事"]
7 | image: https://mogeko.github.io/blog-images/r/005/logo.png
8 | ---
9 |
10 | {{< featuredImage >}}
11 |
12 | 参考
13 |
14 |
15 |
16 | ## 准备工作
17 |
18 | 1. Node.js 这是一个 Hexo插件,所以通过 npm 安装。
19 |
20 | ## 正文
21 |
22 | ### 安装 hexo-tag-bilibili
23 |
24 | 这就是那个神奇的插件,名叫 hexo-tag-bilibili。
25 | 我们通过 npm 进行安装。
26 | 切换到 Hexo 的目录,执行一下命令
27 |
28 | ```shell
29 | cd [你的 Hexo目录]
30 | npm install --save hexo-tag-bilibili
31 | ```
32 |
33 | 
34 |
35 | ### 使用
36 |
37 | 在文章中用一下方式使用此插件
38 | [av_id] 填写视频的 av号。
39 |
40 | ```markdown
41 | {% bilibili [av_id] %}
42 | ```
43 |
44 | 如果有多 p,使用一下格式。[page] 为 P号。
45 |
46 | ```markdown
47 | {% bilibili [av_id] [page] %}
48 | ```
49 |
50 | 例如:
51 |
52 | ```markdown
53 | {% bilibili av2271112 %}
54 | ```
55 |
56 | {{< bilibili 2271112 >}}
57 |
58 | ### 高级
59 |
60 | #### 配置
61 |
62 | 你可以配置你的播放器
63 | 在 Hexo 的文件夹中,打开 `_config.yml`文件进行配置。
64 | 你可以配置 是否`自动播放`,播放器的`大小` 等。
65 | 例如
66 |
67 | ```_config.yml
68 | bilibili:
69 | width: 452
70 | height: 544
71 | ```
72 |
73 | #### Style
74 |
75 | 播放器由一个带有 `bili_video` 类的 ``标签包装。你可以通过自定义的 css文件修改它的样式。
76 |
77 | ## 相关文章
78 |
79 | - [**使用 Hexo + GitHub Pages 建立自己的博客**](https://mogeko.github.io/2017/002/)
80 | - [**Hexo 美化**](https://mogeko.github.io/2017/003/)
81 | - [**使用 Hexo Hey 管理你的博客**](https://mogeko.github.io/2017/004/)
82 | - [**为博客添加独立域名**](https://mogeko.github.io/2019/048/)
83 | - [**为博客添加免费的 CDN (Cloudflare)**](https://mogeko.github.io/2019/056/)
84 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/035.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "使用反向代理给 PPA 加速"
3 | date: 2018-11-26T13:35:11+08:00
4 | draft: false
5 | tags: ["GNU/Linux", "Ubuntu"]
6 | categories: ["生命不息 折腾不止"]
7 | ---
8 |
13 |
14 | **PPA** 的英文全称叫 **Personal Package Archives**,既「个人软件包仓库」。是 Ubuntu 为了方便用户发表、下载那些 Ubuntu 官方软件仓库中没有收录的或者版本较新的软件而建立的 (有点类似于 **ArchLinux** 的 **AUR**)。
15 |
16 | 大多数的 **PPA** 仓库都放在 [launchpad](https://launchpad.net) 上。由于种种原因,国内从 **PPA** 中下软件都特别慢,而且 **PPA** 中的软件比较庞杂且分散,不适合建立镜像仓库。好在我们可以通过中科大提供的反向代理来加速我们的下载。
17 |
18 | ## 使用
19 |
20 | 中科大提供的反向代理地址是:
21 |
22 | 我们只需要修改 `/etc/apt/sources.list.d` 下面需要代理的仓库地址,将 `ppa.launchpad.net` 换成 `launchpad.proxy.ustclug.org` ,然后在执行 `sudo apt update` 更新一下软件源列表就可以了。
23 |
24 | `/etc/apt/sources.list.d` 中的地址太多,一个一个换也太麻烦了吧?!可以使用下面这个命令替换全部:
25 |
26 | ```shell
27 | sudo find /etc/apt/sources.list.d/ -type f -name "*.list" -exec sed -i.bak -r 's#deb(-src)?\s*http(s)?://ppa.launchpad.net#deb\1 http\2://launchpad.proxy.ustclug.org#ig' {} \;
28 | ```
29 |
30 |
31 |
32 | 尽快大多数软件都可以使用中科大提供的这个反向代理地址进行加速,不过仍然有些 **PPA** 仓库没有放在 [launchpad](https://launchpad.net) 上 (例如 Google Chrome 浏览器),就不能使用这种方法进行加速了。
33 |
34 |
57 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/061.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "回形针手册 | 你的当代生活说明书"
3 | date: 2019-05-05T15:10:36+08:00
4 | draft: false
5 | tags: []
6 | categories: ["随便写点什么"]
7 | ---
8 |
13 |
14 | {{< notice error >}}
15 |
16 | 回形针 你:horse:死了!!!
17 |
18 | {{< /notice >}}
19 |
20 |
21 |
22 | 今天要给大家安利的是一个网站:[ipaperclip.net](https://ipaperclip.net)
23 |
24 | 这是一个百科全书性质的网站,用他们自己的话来说:
25 |
26 | > 回形针手册的目标是成为一个真正的当代生活百科全书
27 |
28 | 
29 |
30 | ## 官方介绍
31 |
32 | {{< bilibili 89262219 >}}
33 |
34 | ## LT;DR
35 |
36 | **回形针手册是一本涵盖了日常生活所涉及方方面面的百科手册。**
37 |
38 | 回形针手册在国民经济行业分类的基础上设置了 **1415 个条目,并分为 20 个一级条目,95 个二级条目,472 个三级条目**。
39 |
40 | 1415 个条目看起来似乎并不多,但你能想到的一切几乎都在这了。
41 |
42 | 
43 |
44 | 与其他百科不同的是,**回形针手册更像是一个“行业数据库”**。回形针手册会在每个条目中研究这个行业的结构、技术、原材料,整理国家标准、行业报告和企业财报,以此来帮助你了解一个行业的图景,理解这个世界的运作方式。
45 |
46 | 目前回形针手册已经完成了 60 个条目的基础编辑,但还远远不够。**回形针手册需要得到更多人的帮助**,因此回形针手册采用了类似于 Wiki 百科一样的机制,任何人都可以编辑回形针手册的任何一个条目
47 |
48 | 
49 |
50 | 关于如何正确的编辑回形针手册,你可以在[编辑指南](https://ipaperclip.net/doku.php?id=wiki::%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E7%BC%96%E8%BE%91%E4%B8%80%E4%B8%AA%E6%9D%A1%E7%9B%AE)中了解更多。
51 |
52 | 这 1415 个条目不是一个很快就可以完成的目标,它需要 5 年甚至更长的时间,我们才能看到它真正的样子。
53 |
54 | **回形针手册将遵守 [CC0 协议](https://creativecommons.org/choose/zero/)**,简单来说就是回形针手册中的内容在世界范围内免受著作权的限制性规定,属于公共领域 (Public Domain)。所有的内容都可以被自由的复制,修改和分发。
55 |
56 | 
57 |
58 | 另外需要注意的是,**虽然回形针手册具有很强的公益性质,但仍然是属于一种商业行为。**
59 |
60 | 
61 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/081.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "「左」怎么了,吃你家米了?"
3 | date: 2020-04-20T13:45:52+02:00
4 | draft: false
5 | tags: [“随笔”]
6 | categories: ["随便写点什么"]
7 | image: https://mogeko.github.io/blog-images/r/081/logo.png
8 | description:
9 | ---
10 |
11 | {{< featuredImage >}}
12 |
13 |
19 |
20 | 我一直主张 GitHub 是技术社区,不应当过问政治。
21 |
22 | 所以在部署在 GitHub Pages 上的博客谈论政治似乎也有点不妥。我也一直避免在博客中有过多的政治倾向。政治太复杂了,不适合我们这种平头老百姓;政治太重要了,与我们每个人都息息相关...
23 |
24 | 今天听了[翠花](https://space.bilibili.com/337312411)的这个 [Rap](https://www.bilibili.com/video/av840201597?p=1&t=0),特别有感触,想要分享给大家
25 |
26 | {{< bilibili BV1c54y197us >}}
27 |
28 |
29 |
30 | 不知从什么时候开始,「左」似乎变成了一个贬义词。
31 |
32 | 不知从什么时候开始,人们变得羞于谈论政治,羞于谈论自己的政治倾向。
33 |
34 | 但我一直相信,「左」才是推动社会进步的力量。
35 |
36 | 希望这首歌能让年轻人警醒,回想起自己的历史使命,用最犀利的眼光讽刺并解构这个世界,呐喊出叛逆的年轻人想要宣泄的情感!!
37 |
38 |
39 | 愿中国青年都摆脱冷气,只是向上走,不必听自暴自弃者流的话。能做事的做事,能发声的发声。有一分热,发一分光。就令萤火一般,也可以在黑暗里发一点光,不必等候炬火。
40 | —— 鲁迅 《热风・随感录四十一》
41 |
42 |
43 | ## LeftValues
44 |
45 | 
46 |
47 | 顺便安利一个测你在左翼意识形态图谱中的位置的左派测试: [LeftValues](https://leftvalues.github.io/index.html)
48 |
49 | 我也不知道是否科学,但我测出来主观感觉还是挺准的
50 |
51 | 
52 |
53 | 贴一下我的[测试结果](https://leftvalues.github.io/results.html?a=39.7&b=64.7&c=56.7&d=50.0&e=56.3&f=54.2&g=37.5):
54 |
55 | 
56 |
57 | > **中间派马克思主义 (Centrist Marxism)** 是马克思主义的一种形式,它既采用了马克思主义关于社会和经济的观点,又避免对革命和改良主义采取明确的立场。许多中间派马克思主义者也可能比其他马克思主义者更具有民族主义倾向。
58 |
59 | ---
60 |
61 |
62 |
63 | {{< spoiler >}}方方: 休想狡辩,你们都是极左!!{{< /spoiler >}}
64 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/008.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Reabble | Kindle 下的 RRS 神器"
3 | date: 2017-09-30T17:40:09+08:00
4 | draft: false
5 | tags: ["Kindle"]
6 | categories: ["不知道怎么分类的分类"]
7 | image: https://mogeko.github.io/blog-images/r/008/logo.png
8 | ---
9 |
10 | {{< featuredImage >}}
11 |
12 | Amazon 官方系统的 Kindle 中内置了一个 `体验版浏览器`,用起来真的很鸡肋。一开始根本不知道 Amazon 到底在想什么,做怎么个又慢,又不稳定的浏览器,浪费老子硬盘。直到那天,手机被收了_(:°з」∠)_
13 | 其实真正让我爱上那个辣鸡浏览器的是 RSS 神器——Reabble。
14 |
15 | 那是一个血雨腥风的晚自习,老师一边讲着刚考完的月考试卷一边骂人。
16 | 在教室的第一排,我蜷缩在书本堆中,偷偷用 Kindle 内置的辣鸡浏览器连着教务处的 WiFi 逛知乎。。。(那时真的好 6,老师与我的直线距离不到 3 米,现在想想都觉得后怕)
17 | 就在那天晚上,我发现了这个 Kindle 上的 RSS 神器。
18 |
19 |
20 |
21 | # Reabble
22 |
23 | Reabble 是专为 Kindle 设计的 RSS 阅读器,亮点是 **没有任何滑动操作,全程点击操作,** 响应速度也很快。
24 |
25 | > Kindle 上的 RSS 聚合阅读应用,专为电子墨水屏特性设计,让你可以心无旁骛地沉浸于资讯阅读。也能用于其它带浏览器的设备如手机、Nook、Kobo、博阅等。
26 | >
27 | > **Reabble 入门教程**[reabble.com/help](https://reabble.com/help)
28 |
29 | [Reabble 官方网站](https://reabble.com/)
30 | [Reabble 入门教程](https://reabble.com/help)
31 |
32 | ## 使用方法
33 |
34 | 用电脑打开 [Inoreader](https://inoreader.com/),注册一个帐号,并在里面添加一些订阅。
35 |
36 | 
37 |
38 | 打开 [Reabble](https://reabble.com/),点击 `用 Inoreader 帐号登录`,用刚才注册的 Inoreader 帐号登录 Reabble。
39 |
40 | 
41 |
42 | 在这里,你刚刚订阅的文章都会显示出来
43 |
44 | 
45 |
46 | **确认没有问题后访问 ,得到 12 个字母的登录码**。
47 |
48 | 
49 |
50 | 打开你的 Kindle 主屏右上角的菜单,选择 `体验版网页浏览器` 并打开网页 `reabble.com/login`,点 `登录` 按钮,用上刚刚得到的登录码登录。
51 |
52 | 
53 |
54 | 
55 |
56 | 以后每次用 Kindle 的浏览器打开 Reabble 都会保持登录状态。
57 |
58 | 如果需要更改订阅去 [Inoreader](https://www.inoreader.com/)。
59 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/055.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "向光而生 |「盐与避难所」随笔"
3 | date: 2019-04-20T23:50:26+08:00
4 | draft: false
5 | tags: ["第九艺术", "随笔", "轻松休闲的盐与避难所"]
6 | categories: ["关于第九艺术", "随便写点什么"]
7 | ---
8 |
13 |
14 | 
15 |
16 | 这是第多少此死亡,又是多少次被复活我早已记不清了...
17 |
18 | 来这小岛已经有几个月了;也许几年?我不太清楚,无数次的死亡与复活好像有点影响我的记忆。但我清楚的是我必须要找到公主!
19 |
20 | 我不太清楚公主是否在这岛上,好吧我根本不知道公主是死是活!但这又又什么关系呢?如果没有公主,如果没有公主,那我无数次的重生又是为了什么呢?每次想到这里都有点心酸。无论如何,我只能踏遍这岛的每一寸土地,找到她,然后离开这儿...
21 |
22 |
23 |
24 | 离开避难所,我来到了那栋直插云霄的巨大城堡,听说那上面有龙。公主会在那里吗?童话里不都是说巨龙会撸走公主的吗?
25 |
26 | 
27 |
28 | 看来童话里果然是骗人的,这里什么也没有,除了满地的盐。
29 |
30 |
31 |
32 | 好在我遇上了“同路人”,一个盗贼。与我不同的是她是主动来到了这岛上的,为了完成什么任务?不过这都不是我应该关心的。我向她打听公主的下落,她却嘲笑我和屠龙者一样愚蠢,但她提醒我,这个岛的地下可能有你想找的答案。
33 |
34 | 
35 |
36 | 我按照她的提示穿过了充满血腥味的地牢,满是死人恶臭的沼泽,我不敢想象公主会在这种地方,但我只能不断的往下走。越是深入地下,我也是感觉到这小岛的不对劲。
37 |
38 | 最终我们在一处洞穴里再次相见,她劝我和她一起逃离这里。
39 |
40 | “你也发现了这座岛的不对劲了吧?这岛底下的力量不是你我所能企及的。”
41 |
42 | “那我的公主怎么办?”
43 |
44 | “引导你来到这里的真的是你的公主吗?”
45 |
46 | “......”
47 |
48 | 我不管她,继续上路。
49 |
50 |
51 |
52 | 越是向下,我越是感觉到了那股力量的强大。我感到越来越兴奋。我这是怎么了?难道吸引我的真的是这股力量?!
53 |
54 |
55 |
56 | 地底深处,有谁会想到在这小岛的最深处会有这么一座宏伟奇异的宫殿?!这宫殿静得出奇,并且上下颠倒;我不由的想起小丑的疯言疯语:“上就是下,下就是上...”。宫殿的尽头是一扇大门。我明白,我所寻找的力量就在门的背后。
57 |
58 | 我推开门,他就静静的站在那里,穿着漆黑的铠甲,带着漆黑的面罩。
59 |
60 | 盔甲的背上擦着蜡烛,那便是他最渴求的东西:**光!** 光代表短暂的生命,无限的光那就是永生!
61 |
62 | 
63 |
64 | 他举起巨剑向我走来。行吧,现在就看谁先弄死谁了...
65 |
66 |
67 |
68 | “结束了?”,虽然战斗异常艰难,但我丝毫没有感受到斩杀“神”的快感,因为我清楚的意识到那股力量并没有消失。
69 |
70 | 我继续向前走,房间的尽头是一个稻草人和一口井。
71 |
72 | **“成为盐裔,就是成为永恒中已死的碎片。向光而生虽然短暂,却是真正的生。”**
73 |
74 | 是时候做出选择了...
75 |
--------------------------------------------------------------------------------
/i18n/zh-cn.toml:
--------------------------------------------------------------------------------
1 | [search-placeholder]
2 | other = "搜索"
3 |
4 | [summary-dateformat]
5 | other = "2006年01月02日"
6 |
7 | [reading-time]
8 | other = "分钟"
9 |
10 | [tags]
11 | other = "标签"
12 |
13 | [categories]
14 | other = "分类"
15 |
16 | [series]
17 | other = "系列"
18 |
19 | [archive-dateformat]
20 | other = "01-02"
21 |
22 | [talks-dateformat]
23 | other = "01月02日"
24 |
25 | [single-dateformat]
26 | other = "2006年01月02日"
27 |
28 | [pub-dateformat]
29 | other = "2006-01-02"
30 |
31 | [resume-dateformat]
32 | other = "2006年01月"
33 |
34 | [single-related]
35 | other = "相关内容"
36 |
37 | [single-writtenBy]
38 | other = "作者"
39 |
40 | [toc-label]
41 | other = "目录"
42 |
43 | [counter-site-pv]
44 | other = "总浏览"
45 |
46 | [counter-site-uv]
47 | other = "总访客"
48 |
49 | [counter-page-pv]
50 | other = "阅读"
51 |
52 | [donate-message]
53 | other = "您的鼓励是我最大的动力"
54 |
55 | [share-message]
56 | other = "分享"
57 |
58 | [contact-name]
59 | other = "姓名"
60 |
61 | [contact-email]
62 | other = "电子邮件"
63 |
64 | [contact-tel]
65 | other = "Tel"
66 |
67 | [contact-file]
68 | other = "File"
69 |
70 | [contact-message]
71 | other = "消息"
72 |
73 | [contact-send]
74 | other = "发送"
75 |
76 | [contact-browse]
77 | other = "Browse"
78 |
79 | [tooltip-home]
80 | other = "主页"
81 |
82 | [tooltip-written]
83 | other = "创建日期"
84 |
85 | [tooltip-modified]
86 | other = "更新日期"
87 |
88 | [tooltip-reading-time]
89 | other = "阅读时长"
90 |
91 | [showcase-overview]
92 | other = "总览"
93 |
94 | [showcase-pinned]
95 | other = "固定"
96 |
97 | [nojs-message]
98 | other = "Please enable Javascript to view the contents"
99 |
100 | [posts-by-order]
101 | other = "TOP POSTS"
102 |
103 | [skin-dark]
104 | other = "dark"
105 |
106 | [skin-light]
107 | other = "light"
108 |
109 | [skin-hacker]
110 | other = "hacker"
111 |
112 | [skin-solarized]
113 | other = "solarized"
114 |
115 | [skin-kimbie]
116 | other = "kimbie"
117 |
118 | [no-contents]
119 | other = "Nothing to Display"
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Mogeko`s Blog
2 |
3 | [](https://mogeko.github.io)
4 | [](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode)
5 | [](https://gohugo.io/)
6 | [](https://github.com/zzossig/hugo-theme-zzo)
7 |
8 | 这是 Mogeko 的个人博客,地址:****。
9 |
10 | 使用 Markdown 书写,用 [Hugo](https://gohugo.io/) 生成静态网页,用 [GitHub Actions](https://github.com/Mogeko/Blog/actions) 部署到 [GitHub Pages](https://pages.github.com) 上。
11 |
12 | 主题使用的是 [zzo](https://github.com/zzossig/hugo-theme-zzo)。
13 |
14 | # LICENSE
15 |
16 | ## 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
17 |
18 | 这是一份普通人可以理解的[许可协议](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.zh-Hans)概要 (但不是替代) 。 [免责声明](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#).
19 |
20 | ### 您可以自由地:
21 |
22 | - **共享** — 在任何媒介以任何形式复制、发行本作品
23 |
24 | - **演绎** — 修改、转换或以本作品为基础进行创作
25 |
26 | 只要你遵守许可协议条款,许可人就无法收回你的这些权利。
27 |
28 | ------
29 |
30 | ### 惟须遵守下列条件:
31 |
32 | - **署名** — 您必须给出[适当的署名](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#),提供指向本许可协议的链接,同时[标明是否(对原始作品)作了修改](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#)。您可以用任何合理的方式来署名,但是不得以任何方式暗示许可人为您或您的使用背书。
33 | - **非商业性使用** — 您不得将本作品用于[商业目的](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#)。
34 | - **相同方式共享** — 如果您再混合、转换或者基于本作品进行创作,您必须基于[与原先许可协议相同的许可协议](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#) 分发您贡献的作品。
35 |
36 | - **没有附加限制** — 您不得适用法律术语或者 [技术措施](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#) 从而限制其他人做许可协议允许的事情。
37 |
38 | ------
39 |
40 | ### 声明:
41 |
42 | - 您不必因为公共领域的作品要素而遵守许可协议,或者您的使用被可适用的 [例外或限制](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#)所允许。
43 | - 不提供担保。许可协议可能不会给与您意图使用的所必须的所有许可。例如,其他权利比如[形象权、隐私权或人格权](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#)可能限制您如何使用作品。
44 |
--------------------------------------------------------------------------------
/static/README.md:
--------------------------------------------------------------------------------
1 | # Mogeko`s Blog
2 |
3 | [](https://mogeko.github.io)
4 | [](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode)
5 | [](https://gohugo.io/)
6 | [](https://github.com/zzossig/hugo-theme-zzo)
7 |
8 | 这是 Mogeko 的个人博客,地址:****。
9 |
10 | 使用 Markdown 书写,用 [Hugo](https://gohugo.io/) 生成静态网页,用 [GitHub Actions](https://github.com/Mogeko/Blog/actions) 部署到 [GitHub Pages](https://pages.github.com) 上。
11 |
12 | 主题使用的是 [zzo](https://github.com/zzossig/hugo-theme-zzo)。
13 |
14 | # LICENSE
15 |
16 | ## 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
17 |
18 | 这是一份普通人可以理解的[许可协议](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.zh-Hans)概要 (但不是替代) 。 [免责声明](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#).
19 |
20 | ### 您可以自由地:
21 |
22 | - **共享** — 在任何媒介以任何形式复制、发行本作品
23 |
24 | - **演绎** — 修改、转换或以本作品为基础进行创作
25 |
26 | 只要你遵守许可协议条款,许可人就无法收回你的这些权利。
27 |
28 | ------
29 |
30 | ### 惟须遵守下列条件:
31 |
32 | - **署名** — 您必须给出[适当的署名](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#),提供指向本许可协议的链接,同时[标明是否(对原始作品)作了修改](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#)。您可以用任何合理的方式来署名,但是不得以任何方式暗示许可人为您或您的使用背书。
33 | - **非商业性使用** — 您不得将本作品用于[商业目的](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#)。
34 | - **相同方式共享** — 如果您再混合、转换或者基于本作品进行创作,您必须基于[与原先许可协议相同的许可协议](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#) 分发您贡献的作品。
35 |
36 | - **没有附加限制** — 您不得适用法律术语或者 [技术措施](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#) 从而限制其他人做许可协议允许的事情。
37 |
38 | ------
39 |
40 | ### 声明:
41 |
42 | - 您不必因为公共领域的作品要素而遵守许可协议,或者您的使用被可适用的 [例外或限制](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#)所允许。
43 | - 不提供担保。许可协议可能不会给与您意图使用的所必须的所有许可。例如,其他权利比如[形象权、隐私权或人格权](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh#)可能限制您如何使用作品。
44 |
--------------------------------------------------------------------------------
/static/favicon/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/100.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "亲爱的 Oracle,请开放 JavaScript 的商标"
3 | subtitle:
4 | date: 2022-09-05T22:06:07+02:00
5 | draft: false
6 | tags: []
7 | categories: [""]
8 | image:
9 | description:
10 | ---
11 |
12 |
17 |
18 | > 翻译一篇 [Ryan Dahl](https://github.com/ry) (Node.js 和 Done 的作者) 的博客:[Dear Oracle, Please Release the JavaScript Trademark](https://tinyclouds.org/trademark)。
19 |
20 | [1995 年,网景公司 (Netscape) 与 Sun 微系统 (Sun Microsystems) 合作创造了交互式网站。](https://web.archive.org/web/20020606002913/http://wp.netscape.com/newsref/pr/newsrelease67.html)著名程序员的 Brendan Eich 用了 10 天时间创建了 JavaScript 的第一个版本 (一种动态编程语言,其语法大致继承自 Sun 的 Java 语言)。由于这层合作关系,Sun 拥有「JavaScript」的商标。2009 年,甲骨文公司 (Oracle) 收购了 Sun,至此便拥有了 [JavaScript 的商标](https://tsdr.uspto.gov/#caseNumber=75026640&caseType=SERIAL_NO&searchType=statusSearch)。
21 |
22 | 然而该商标并没有任何商业价值。除了 [Oracle 的 JavaScript Extension Toolkit](https://www.oracle.com/webfolder/technetwork/jet/index.html),Oracle 没有任何产品使用过该商标,并且可能也没有计划使用。Oracle 甚至不参与任何 JavaScript 引擎的开发 (例如 V8、JavaScriptCore 或 Spidermonkey)。由于[未使用](https://www.uspto.gov/trademarks/maintain/keeping-your-registration-alive),JavaScript 商标侵权的相关诉讼似乎很可能在法庭上无法得到支持。
23 |
24 | 然而,这个商标依然是笼罩在这一世界上最流行的编程语言上的一片乌云。细心而守法工程师会竭尽全力避免使用它——导致我们不得不发明一些诸如 ECMAScript 之类的令人困惑的术语。
25 |
26 | 将 JavaScript 的商标授予公共领域,从而获得人们对这家公司的好印象;这将是 Oracle 所能从这个商标中获得的最大的价值。目前为止,Oracle 还没有这样做;这是可以理解的——这需要一个非常具有前瞻性和高水平的 Oracle 的员工来提出。然而,用一个毫无价值的商标来换取品牌营销和商誉显然是正确的举动。
27 |
28 | Oracle,请放开 JavaScript 的商标。
29 |
30 | ---
31 |
32 | 有点震惊,我才知道原来 JavaScript 的商标在甲骨文手里!我一直以为 JavaScript 的商标在网景那儿,然后随着网景的破产而被注销,或者被 Mozilla 继承...
33 |
34 | Oracle 会回应人民的呼声吗?很难!按照 Oracle 的尿性,不找社区麻烦就不错了,还想开放?做梦呢!但也不代表我们的发声是没有意义的。纵使 Oracle 摆烂,不在乎名声;纵使 Oracle 的名声已经臭到即使把商标还给社区都救不回来;纵使什么都无法改变...这也不是我们沉默的理由,因为这是正确的事!
35 |
36 | > 愿中国青年都摆脱冷气,只是向上走,不必听自暴自弃者流的话。能做事的做事,能发声的发声。有一分热,发一分光,就令萤火一般,也可以在黑暗里发一点光,不必等候炬火。
37 | > —— 鲁迅
38 |
39 | 在此,我郑重呼吁:
40 |
41 | Oracle,请开放 JavaScript 的商标。
42 |
--------------------------------------------------------------------------------
/config/_default/config.toml:
--------------------------------------------------------------------------------
1 | baseURL = "https://mogeko.me" # The URL of your site.
2 | title = "Mogeko's Blog" # Title of your site
3 | theme = "zzo-dev" # Name of Zzo theme folder in `themes/`.
4 |
5 | defaultContentLanguage = "zh-cn" # Default language to use (if you setup multilingual)
6 | defaultContentLanguageInSubdir = true # baseURL/en/, baseURL/kr/ ...
7 | hasCJKLanguage = true # Set `true` for Chinese/Japanese/Korean languages.
8 |
9 | summaryLength = 70 # The length of a post description on a list page.
10 | buildFuture = true # if true, we can use future date for talks page
11 |
12 | copyright = "©2017 - {year}, All content is licensed under CC BY-NC 4.0." # copyright symbol: $copy; current year: {year}
13 |
14 | timeout = 10000
15 | enableEmoji = true
16 | paginate = 13 # Number of items per page in paginated lists.
17 | rssLimit = 100
18 |
19 | enableGitInfo = false # When true, the modified date will appear on a summary and single page. Since GitHub info needs to be fetched, this feature will slow down to build depending on a page number you have
20 | googleAnalytics = "UA-104502658-2"
21 |
22 | [markup]
23 | [markup.goldmark]
24 | [markup.goldmark.renderer]
25 | hardWraps = true
26 | unsafe = true
27 | xHTML = true
28 | [markup.highlight]
29 | codeFences = true
30 | lineNos = true
31 | lineNumbersInTable = true
32 | noClasses = false
33 | [markup.tableOfContents]
34 | endLevel = 3
35 | ordered = false
36 | startLevel = 2
37 |
38 | [outputs]
39 | home = ["HTML", "RSS", "SearchIndex"]
40 | section = ["HTML", "RSS", "SearchIndex"]
41 | taxonomyTerm = ["HTML", "RSS", "SearchIndex"]
42 | taxonomy = ["HTML", "RSS", "SearchIndex"]
43 |
44 | [outputFormats]
45 | [outputFormats.SearchIndex]
46 | mediaType = "application/json"
47 | baseName = "index"
48 | isPlainText = true
49 | notAlternative = true
50 |
51 | [taxonomies]
52 | category = "categories"
53 | tag = "tags"
54 | series = "series"
55 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/072.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "我好像挖到个波兰蠢驴的小彩蛋!"
3 | date: 2019-06-10T12:32:58+08:00
4 | draft: false
5 | tags: ["随笔"]
6 | categories: ["关于第九艺术"]
7 | image: https://mogeko.github.io/blog-images/r/072/Logo.jpg
8 | subtitle:
9 | ---
10 |
11 | {{< featuredImage >}}
12 |
13 |
18 |
19 | 就在今天凌晨,CDPR 在 E3 微软发布会上展示了万众瞩目的《赛博朋克 2077》的[最新预告片](https://www.bilibili.com/video/av55130548),并开启了[预购](https://www.cyberpunk.net/pre-order)
20 |
21 |
22 |
23 | 与新预告片一同发布的还有《赛博朋克 2077》典藏版的开箱视频:
24 |
25 | {{< bilibili 55134840 >}}
26 |
27 | 视频的开头有一段运行命令行代码的场景。因为一般电影中都喜欢都是随便弄的一些没有意义的“代码”来装个样子,所以我一般也不会去在意这些。但谁料今天早上网不好,正好就卡到一个代码的场景上,这段代码瞬间就引起了我的注意:这不是我平常敲的命令吗?!!!
28 |
29 | 立马把进度条拉了回去,仔仔细细的看了一遍,才看懂 CDPR 加这几个场景的用意。
30 |
31 | 1. 首先.用 `nmap -sV` 扫描系统端口,发现 `2020` 号端口 (暗示 2020 年正式发售)
32 |
33 | 2. 然后用 `sshscan` 对 SSH 账号密码进行暴力破解,拿到**用户名 (`samurai`)**和**密码 (`WhenItsReady`)**
34 | 
35 |
36 | 3. 然后ssh进行连接,登录到服务器
37 |
38 | 4. `ls -lt` 列出所有文件......
39 |
40 | CDPR 用短短几十秒的时间给我们讲述了一个黑客黑进 CDPR,偷走终于资料的故事。
41 |
42 | 不得不佩服 CDPR 对细节的用心程度。
43 |
44 |
45 |
46 | 令我感兴趣的除了代码都是真的外还有命令中提到的**主机地址 (`internal-cdprojektred.com`)**、**用户名**和**密码**。既然命令都是真的,那么这些会不会也是真的呢?会不会真的能黑进去呢?!{{< spoiler >}}想多了 QAQ{{< /spoiler >}}
47 |
48 | 立马 PING 了一下,失败了。不过这也不能说明什么,说不定对面把 ICMP 的端口给封了。
49 |
50 | ```shell
51 | $ ping -c 5 internal-cdprojektred.com
52 | PING internal-cdprojektred.com (46.101.148.249) 56(84) bytes of data.
53 |
54 | --- internal-cdprojektred.com ping statistics ---
55 | 5 packets transmitted, 0 received, 100% packet loss, time 45ms
56 | ```
57 |
58 | 随后我又尝试了一下 SSH 登录,居然成功了!不过立马就断开了连接。
59 |
60 | ```shell
61 | $ ssh -p 2020 samurai@internal-cdprojektred.com
62 | samurai@internal-cdprojektred.com's password:
63 | Connection closed by 46.101.148.249 port 2020
64 | ```
65 |
66 |
67 |
68 | 我想这应该是 CDPR 留的一个小小的彩蛋吧!
69 |
70 | 这么细节的地方都能做到完美,我这里说波兰蠢驴天下第一应该没人有意见吧 |・ω・`)
71 |
72 | {{< spoiler >}}还没有预定《赛博朋克 2077》的朋友,我相信你肯定是在等典藏版 |・ω・`){{< /spoiler >}}
73 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/033.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "为 Hugo 博客添加字数统计"
3 | date: 2018-11-22T16:51:03+08:00
4 | draft: false
5 | tags: ["Hugo"]
6 | categories: ["折腾博客的二三事"]
7 | ---
8 |
13 |
14 | 作为一个孤芳自赏的 Bloger,每一篇文章都像是自己的孩子一样,孩子的“体重”如何是每一个父母都关注的问题。
15 |
16 | 今天就简单的教教大家如何给自己的孩子称“体重”。
17 |
18 |
19 |
20 | ## 相关模板变量
21 |
22 | 作为一个静态网页生成器,Hugo 为使用者提供了很多与网页相关的**模板变量**,而与文章字数相关的**模板变量**有两个:
23 |
24 | - **`.FuzzyWordCount`**: 文章内容的大致单词数 (字数)
25 | - **`.WordCount`**: 文章内容的单词数 (字数)
26 |
27 | 我们可以看到 **`.FuzzyWordCount`** 提供的是一个大概的值 (整 100),比如 1 个字算 100 字,2 个字还算 100 字,201 个字算 200 字。这样统计出来的字数可能会比实际情况更多一点,虽然更有牌面但全都是整数未免也太假了。所以我还是决定使用 **`.WordCount`**。
28 |
29 | 更多与**模板变量**相关信息请参考:[Variables and Params](https://gohugo.io/variables/)
30 |
31 | ## 为主题添加「字数统计」模板
32 |
33 | 首先启动一个本地的 Hugo 服务器。
34 |
35 | ```shell
36 | hugo server
37 | ```
38 |
39 | 然后打开 **Chrome**,利用 **DevTools** 定位放**字数统计**的位置
40 |
41 | 
42 |
43 | 然后记录下与预订位置邻近的 **DOM** 的 `class` 的值。
44 |
45 | 打开 **VSCode**,利用「搜索」定位刚刚查找到到 `class` 值的位置。
46 |
47 | 
48 |
49 | 再在合适的位置中插入以下代码:
50 |
51 | ```html
52 | , {{ .WordCount }} words
53 | ```
54 |
55 | 然后再在 **Chrome** 中查看效果。
56 |
57 | ## 统计字数不正确
58 |
59 | 一打开 **Chrome** 懵逼了。我辛辛苦苦码了这么久才 69 个字???{{< spoiler >}}你豁鬼哦!!(╯‵□′)╯︵┴─┴{{< /spoiler >}}
60 |
61 | 
62 |
63 | Google 了一下才知道,原来 Hugo 默认不会统计中文 ([详情](https://github.com/nodejh/hugo-theme-cactus-plus/issues/18)),需要在`config.toml` 中添加这么一句配置才可以开启对中文的统计
64 |
65 | ```toml
66 | hasCJKLanguage = true
67 | ```
68 |
69 | 正常了
70 |
71 | 
72 |
73 | ## 相关文章
74 |
75 | - [**使用 Hugo + GitHub Pages 搭建个人博客**](https://mogeko.github.io/2018/018/)
76 | - [**为 Hugo 添加谈笑风生区 (Gitalk)**](https://mogeko.github.io/2018/024/)
77 | - [**使用 Travis CI 自动部署 Hugo 博客**](https://mogeko.github.io/2018/028/)
78 | - [**Leavelt 主题优化**](https://mogeko.github.io/2018/025/)
79 | - [**为博客添加独立域名**](https://mogeko.github.io/2019/048/)
80 | - [**为 LeaveIt 主题添加阅读进度条**](https://mogeko.github.io/2019/070/)
81 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/104.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 如何正确的在 Linux 上配置 mDNS
3 | subtitle:
4 | date: 2023-03-09T22:05:15+01:00
5 | draft: false
6 | tags: ["NAS", "mDNS", "GNU/Linux"]
7 | categories: ["生命不息 折腾不止"]
8 | image:
9 | description:
10 | ---
11 |
12 |
17 |
18 | mDNS,即 Multicast DNS,允许系统在局域网中广播查询其他资源的名称。这样即使在没有传统 DNS 服务器的局域网内,主机间也可以通过 `*.local` 的域名相互发现和通信。
19 |
20 | 对于“普通人”来说,由于对局域网的感知不强,这可能没多大意义。但对于 NAS 用户,就不一样了。mDNS 通过 `主机名.local` 作为域名,假如我有一台名为「nas」并开启了 mDNS 的主机,那么我用同样开启了 mDNS 的另一台主机就可以直接通过 `http//nas.local:xxxx` 访问「nas」上部署的服务,也可以用 SSH 通过 `username@nas.local` 远程登录「nas」。不用设置静态 IP,更不用记静态 IP。
21 |
22 | 开启了 mDNS 的 NAS 玩家看没有开启 mDNS 的 NAS 玩家,就像 90 年代的人看 80 年代的人上网一样[^1] —— 愚蠢的原始人竟然还在用四个数字上网!
23 |
24 | ## mDNS 与过时的资料
25 |
26 | 如果你在别的文章中看到它让你安装 [Avahi](http://avahi.org),你就可以直接退出来了。
27 |
28 | 不是说 Avahi 不好,相反,它是一个非常棒的软件!但事实上**你计算机中的 systemd-resolved 已经提供了一个 mDNS 的完整实现了!** {{< spoiler >}}非 systemd 用户当我放屁就好{{< /spoiler >}} 你根本**不需要再额外安装**一个“多余”的软件来实现一个已经被实现好了的功能!
29 |
30 | 只是大多数 Linux 发行版都没有像 Apple 一样,默认开启 mDNS。下面我就来教教大家如何正确的在 Linux 上配置 mDNS。
31 |
32 | ## 激活 mDNS
33 |
34 | 首先,检查一下你手里的计算机是否激活了 mDNS 的解析器和响应器。
35 |
36 | ```shell
37 | systemd-resolve --status
38 | ```
39 |
40 | 如果你在「Current Scopes」中看到了 `mDNS/IPv4` 和 `mDNS/IPv6`,那你就可以直接跳过这一步了。
41 |
42 | 否则,
43 |
44 | 你需要在 `/etc/systemd/resolved.conf.d/` 目录下新建一个文件 `enable-mdns.conf`:
45 |
46 | ```ini
47 | # /etc/systemd/resolved.conf.d/enable-mdns.conf
48 | [Resolve]
49 | MulticastDNS=yes
50 | ```
51 |
52 | ## 连接到网络
53 |
54 | 接着我们需要将 mDNS 解析器和响应器连接到网络。
55 |
56 | ### 如果你使用 NetworkManager
57 |
58 | 如果你使用的是 [NetworkManager](https://www.networkmanager.dev),你需要在 `/etc/NetworkManager/conf.d/` 目录下新建文件 `connect-mdns.conf`:
59 |
60 | ```ini
61 | # /etc/NetworkManager/conf.d/connect-mdns.conf
62 | [connection]
63 | connection.mdns=2
64 | ```
65 |
66 | ### 如果你使用 systemd-networkd
67 |
68 | 如果你使用的是 [systemd-networkd](https://systemd.network/systemd.network.html),你需要在 `/etc/systemd/network/` 目录下新建文件 `connect-mdns.conf`:
69 |
70 | ```ini
71 | # /etc/systemd/network/connect-mdns.conf
72 | [Link]
73 | Multicast=yes
74 | ```
75 |
76 | 然后重启。不出意外的话,mDNS 就配置好了!
77 |
78 |
79 |
80 | [^1]: DNS 最早于 1983 年由保罗·莫卡派乔斯 (Paul Mockapetris) 发明 (来自 [Wikipedia](https://zh.wikipedia.org/wiki/域名系统))
81 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/082.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "在服务器上使用本地的 GPG 密钥"
3 | date: 2020-04-25T22:12:59+02:00
4 | draft: false
5 | tags: ["GnuPG"]
6 | categories: ["生命不息 折腾不止"]
7 | image: https://mogeko.me/blog-images/r/068/Gnupg_logo.svg
8 | subtitle: 在服务器上使用本地的 GPG 密钥
9 | ---
10 |
11 | {{< featuredImage >}}
12 |
13 |
19 |
20 | 我们经常会有在服务器上使用 GPG 密钥的需求,比如为编译好的软件签名等等。但在多人使用的服务器上配置 GPG 密钥并不方便,等何况还有安全风险。并且如果你使用了 Yubikey 等「智能卡」储存密钥,你根本没法将密钥导出来!!
21 |
22 | 那么有没有办法在密钥不离开本地的前提下远程使用 GPG 呢?答案是肯定的。
23 |
24 | 首先,在你的本地计算机下执行以下命令 (Linux):
25 |
26 | ```shell
27 | $ ls -l ~/.gnupg | grep gpg-agent
28 | srwx------ 1 mogeko mogeko 0 4月 25 21:40 S.gpg-agent
29 | srwx------ 1 mogeko mogeko 0 4月 25 21:40 S.gpg-agent.browser
30 | srwx------ 1 mogeko mogeko 0 4月 25 21:40 S.gpg-agent.extra
31 | srwx------ 1 mogeko mogeko 0 4月 25 21:40 S.gpg-agent.ssh
32 | ```
33 |
34 | 我们可以看到一堆 `socket`,这些 `socket` 就是实现我们需求的关键。
35 |
36 | GPG 从 `gpg2` 开始就实现了基于转发 `UNIX Domain Socket` 的代理 {{< spoiler >}}还在用第一代 GPG 的小伙伴快升级吧!{{< /spoiler >}},也就是说,只需要将服务器端的 `S.gpg-agent` 和本地的 `S.gpg-agent.extra` 建立连接,就可以实现在密钥不离开本地的前提下远程使用 GPG。
37 |
38 | 而负责转发 `UNIX Domain Socket` 的软件则是我们连接远程服务器必定会用到的 SSH。我们只需要让 SSH 将服务器上的一个 `socket` 转发到本地 `gpg-agent` 监听的 `socket` 上即可。
39 |
40 | 具体命令如下 (写绝对地址,我这里为了方便演示所以用了 `~`):
41 |
42 | ```shell
43 | $ ssh -R ~/.gnupg/S.gpg-agent:~/.gnupg/S.gpg-agent.extra \
44 | -o StreamLocalBindUnlink=yes user@example.com
45 | ```
46 |
47 | 这里的 `StreamLocalBindUnlink` 是让 SSH 断开的时候,把远端监听的 socket unlink 掉,不然下次连接会转发失败。
48 |
49 | 每次连接都打这么长一串,太麻烦了,我们可以直接在 `~/.ssh/config` 中配置:
50 |
51 | ```ini
52 | StreamLocalBindUnlink yes
53 | RemoteForward ~/.gnupg/S.gpg-agent:~/.gnupg/S.gpg-agent.extra
54 | ```
55 |
56 | 然后在服务器上,让 GPG 从公钥服务器拉取公钥:
57 |
58 | ```shell
59 | gpg --keyserver [公钥服务器 URL] --search-keys [用户 ID]
60 | ```
61 |
62 | 就大功告成了!(可以预防性的重启一下 `gpg-agent`)
63 |
64 | 远程主机上可以正常的签名、解密等,但没法 `gpg --card-edit` (毕竟服务器上没有私钥嘛)。
65 |
66 | ## Windows
67 |
68 | Windows 上 `S.gpg-agent.extra` 的位置在
69 |
70 | ```powershell
71 | %HOMEDRIVE%%HOMEPATH%\AppData\Roaming\gnupg\S.gpg-agent.extra
72 | ```
73 |
74 | 不过 Gpg4win 上用的 `socket` 好像和 `UNIX Domain Socket` 有点区别,可能有坑。
75 |
76 | ## 举一反三
77 |
78 | 既然我们可以用本地主机代理远程服务器上的 GPG,那么是否也可以代理虚拟机、WSL 和 Docker 中的 GPG 呢?
79 |
80 | 在本地通过 `socat` 等软件代替 SSH 转发 `UNIX Domain Socket`,理论上是可行的。
81 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/076.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "关于 OpenStack 的一些胡思乱想"
3 | date: 2019-12-13T08:41:25+08:00
4 | draft: false
5 | tags: ["随笔", "OpenStack"]
6 | categories: ["随便写点什么"]
7 | image:
8 | subtitle: 论 OpenStack 在计算资源在分配中的作用
9 | ---
10 |
15 |
16 | 这篇文章仅是我在学习 OpenStack 的过程中的一点胡思乱想,包含了大量的主观推断,就图一乐。
17 |
18 | 前两天看 [AWS re:Invent 2019](https://reinvent.awsevents.com/) 的主题演讲中,Andy Jassy 分享了这样一个数据:**尽管云计算已经如火如荼的发展了十多年,然而在当前全球的所有 IT 消费中,在云上的消费仅仅占了 3%,其余的 97% 仍在企业内部 (on premise)。**
19 |
20 | 
21 |
22 | 也就是说,AWS 仅仅凭借百分之一点几的的份额 (虽然也不少了),就把股价炒上了天。云计算领域,特别是混合云领域还有大把的市场。为了争夺这一市场,AWS 发布了大量的混合云产品 (AWS Outposts、AWS Local Zone 和 AWS Wavelength)。AWS Outposts 更是直接对标了微软的 Azure Stack。这些产品允许用户将 AWS 或者 Azure 部署到自己的 IDC 中,并与公共云上的 AWS 或者 Azure 进行集成。
23 |
24 | 从另一个方面也可以看出,尽管混合云这一概念已经炒了好几年了,但似乎并不叫座。至于原因,我们似乎可以从 Linux 的故事里看出一点端倪来。
25 |
26 | ## Linux 带来的启示
27 |
28 | Linux 是由 Linus Torvalds 开源的一款类 Unix 操作系统的内核。采用 GPL 协议开源。
29 |
30 | 这么一款没有大公司背书,并且开源协议中又带有明显的“反商业”属性的软件却得到了各大商业公司的青睐,成为服务器领域的第一大操作系统。这看似不符合逻辑,但却反应出一个惊人的事实:商业公司们根本就不关心什么 GPL,他们只是想要一个**便宜,安全,且自由**的平台来跑软件而已。
31 |
32 | 反观亚马逊和微软提供的混合云产品:**安全?部署在私人 IDC 中,可以在一定程度上的保证安全性;便宜?考虑到管理成本也说得通;自由?想多了,你必须和 AWS/Azure 绑定!**——我认为,这也是“混合云”叫好不叫座的主要原因之一。
33 |
34 | 那么有没有一片云能真正的做到便宜,安全,且自由呢?我认为有的,OpenStack 就是这么一款产品。其本身开源的特性就保证了他自由的特性,而能部署在任何跑 Linux 的计算机中又保证了他安全与便宜的特性。不过也不能说 OpenStack 就是完美的。相比于亚马逊和微软提供的混合云产品,OpenStack 没有他们核心卖点:与公有云的集成——这也是 OpenStack 相比于公有云产品最蛋疼的地方。
35 |
36 | ## OpenStack 在计算资源在分配中的作用
37 |
38 | **计算资源也可以是一种商品。**
39 |
40 | 如果十年前听到这句话,我会觉得你怕不是疯了。直到 AWS 真的就把计算资源变成了商品。
41 |
42 | **既然计算资源也是一种商品,那么是不是也可以和其他大宗商品一样,在期货市场 (或类似的市场) 进行交易呢?**
43 |
44 | 怎么可能?!计算资源能被抽象成商品完完全全是因为有 AWS 这么一个统一的平台,而 AWS 又是由亚马逊所垄断的。别说期货了,只要 AWS 掌握在亚马逊的手里,消费者连议价的权利都没有!
45 |
46 | **那如果基于一个开放的标准,建立一个统一的平台,让计算资源自由的流通;那双“隐形的手”是不是就可以发挥作用了呢?**
47 |
48 | **看看 OpenStack 基金会的会员们。哪一个不是手握大量计算资源?哪一个不想建立自己的品牌跟 AWS 抢市场呢?如果把他们联合起来,规模上随随便便碾压 AWS、Azure 等传统公有云提供商。**
49 |
50 | 
51 |
52 | 
53 |
54 | 届时,手握大量闲置计算资源的大企业能将计算资源卖出去,从中获利。
55 |
56 | 而小企业能以更合理的价格买到计算资源。
57 |
58 | **让市场在计算资源分配中起决定性作用,使得计算资源流向最需要它的地方。**
59 |
60 |
61 |
62 | 说白了,**都是人们日益增长的计算资源需求同落后的、不合理的计算资源分配之间的矛盾**(笑
63 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/074.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "明日方舟: 论如何科学的压榨员工"
3 | date: 2019-10-27T00:21:43+08:00
4 | draft: false
5 | tags: ["第九艺术", "Arknights"]
6 | categories: ["关于第九艺术"]
7 | image: https://mogeko.github.io/blog-images/r/074/logo.png
8 | subtitle: 一个简单的公式让基建效率最大化
9 | math: true
10 | ---
11 |
12 | {{< featuredImage >}}
13 |
14 |
19 |
20 | 众所周知,方舟的很多干员都有基建技能。而带有基建技能的干员的工作效率远远超过没有基建技能的干员。因此**想要获得最高的收益,就要让基建技能好的干员尽可能多的上班**。那么如何才能保证基建技能好的干员尽可能多的上班呢?为此,我写了一个简单的公式:
21 |
22 | $$ (24 - 每小时心情消耗 \times \textcolor{red}{工作时间}) + 每小时心情恢复 \times (24 - \textcolor{red}{工作时间}) = 24 $$
23 |
24 | 红字是未知数,也就是我们需要计算的部分,其余的都是已知数。
25 |
26 | 下面结合我自己的情况简单计算一下,以贸易站为例 (制造站也是一个道理)。
27 |
28 | 
29 |
30 | 先简单介绍一下我的基本情况。我基建所有建筑均是满级,生产部分采用的是 **2 + 4 的模式**,也就是 **2 个贸易站 + 4 个制造站**。然后**我根据每个干员的基建技能为控制中心排了 2 个班次 (C1、C2),为贸易站排了 3 个班次 (B1、B2、B3)**,以下分别是每个班次的成员和最终的基建技能。
31 |
32 | 控制中心:
33 |
34 | | 班次 | 员工 | 最终基建技能为 |
35 | | :--: | :----------------: | :---------------------------------------------------: |
36 | | C1 | 阿米娅、红和清道夫 | **贸易站订单效率 +7%** 和**全员每小时心情消耗 -0.15** |
37 | | C2 | 陈、诗怀雅和杜宾 | **贸易站订单效率 +7%** 和**全员每小时心情消耗 -0.15** |
38 |
39 | 贸易站:
40 |
41 | | 班次 | 员工 | 最终的基建技能 |
42 | | :--: | :----------------: | :------------------------------------------: |
43 | | B1 | 古米、空爆和月见夜 | **订单效率 +90%** 和**每小时心情消耗 -0.25** |
44 | | B2 | 芬、夜刀和慕斯 | **订单效率 +90%** |
45 | | B3 | 银灰、远山和玫兰莎 | **订单效率 +80%** |
46 |
47 | 因为控制中心有两个班次,并且加成的效果都是一样的,所以只需要**每班上 24 个小时**,定时换班即可。而贸易站这边情况就要复杂一点了。通过比较我们可以发现**获取订单效率最高的班次是 B1 和 B2 (加上控制中心给的 +7% 可以达到 +100%)**,因此排班的关键变成了**如何让 B1 和 B2 尽可能多的上班?**
48 |
49 | 我们套用公式,
50 |
51 | $$ (24 - 0.50 \times n) + 4 \times (24 - n) = 24, n \approx 21.33 $$
52 |
53 | $$ (24 - 0.75 \times n) + 4 \times (24 - n) = 24, n \approx 20.21 $$
54 |
55 | 经过计算得知,**B1 和 B2 的最佳工作时间分别是 21 个小时和 20 个小时**,换句话说 **B1 每天只需要休息 3 个小时,B2 每天只需要休息 4 个小时,一共 7 个小时**,而这 7 个小时就是 B3 上班的时间。~~毕竟老夫也不是什么恶魔嘛 #(笑~~
56 |
57 | 然后根据博士的作息时间进行排班:
58 |
59 | | 时间点 | 班次变化 |
60 | | :----: | :--------------: |
61 | | 12: 00 | B2 下班,B3 上班 |
62 | | 16: 00 | B1 下班,B2 上班 |
63 | | 19: 00 | B3 下班,B1 上班 |
64 |
65 | (头图来源:[Pixiv](https://www.pixiv.net/artworks/70514869),画师:[鏈](https://www.pixiv.net/member.php?id=9221618))
66 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/088.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "安装 Microsoft Store 中已经下架的 APP"
3 | subtitle:
4 | date: 2022-01-08T17:16:16Z
5 | draft: false
6 | tags: ["uwp"]
7 | categories: ["不知道怎么分类的分类"]
8 | image:
9 | description: 两个方法安装 Microsoft Store 中已经下架的 APP。
10 | ---
11 |
12 |
17 |
18 | 试想一下,你想在 Windows 中安装一个 UWP,但很不幸,这个 APP 在 Microsoft Store 中已经被下架了。
19 |
20 | 此时,假设你能拿到该 APP 的 `.Appx` 文件,但你并不能直接安装他。你需要折腾开发者模式,还要折腾签名等。不仅麻烦,还有安全风险。
21 |
22 | 但其实,有方法可以直接从 Microsoft Store 中安装已经下架的 APP。
23 |
24 | ## 方法一
25 |
26 | 不知道是否是微软有意的,Microsoft Store 中有一个 bug。对于已经下架的 APP,他不会出现在你的首页、搜索结果中,但如果你能在 Microsoft Store 中打开该应用的应用页面 (不是网页),你就可以下载他。
27 |
28 | **因为是 bug,所以不知道能用好久,微软后续会不会修。**
29 |
30 | 让我们已[云之幻](https://github.com/Richasy)大佬开发的第三方哔哩哔哩客户端[哔哩](https://github.com/Richasy/Bili.Uwp)为例。
31 |
32 | 如果我们点开[该应用的 Microsoft Store (Web)](https://www.microsoft.com/zh-cn/p/%E5%93%94%E5%93%A9/9mvn4nslt150),我们就会发现该应用已经下架,无法安装。
33 |
34 | 
35 |
36 | 想要安装哔哩,我们需要找到它的 `projectid`,即 `9mvn4nslt150` (别的 APP 请对照[哔哩的 Microsoft Store (Web)](https://www.microsoft.com/zh-cn/p/%E5%93%94%E5%93%A9/9mvn4nslt150) 的 URL)。
37 |
38 | 然后在浏览器中打开以下 URI:
39 |
40 | ```txt
41 | ms-windows-store://pdp/?productid=9mvn4nslt150
42 | ```
43 |
44 | [点我安装哔哩](ms-windows-store://pdp/?productid=9mvn4nslt150)
45 |
46 | 此时,Windows 会打开 Microsoft Store,并导航到该应用的应用页面。
47 |
48 | 
49 |
50 | 然后点击`安装`即可安装哔哩。
51 |
52 | 不过由于作者在 APP 下架后就没有再在后台上传更新了,Microsoft Store 中的版本也就永远定格在了 `1.3.11`。
53 |
54 | ## 方法二
55 |
56 | 另一种方法是直接从 Microsoft Store 的服务器上拉取哔哩的 `.msixbundle`,然后在本地安装。
57 |
58 | 首先我们复制[哔哩的 Microsoft Store (Web)](https://www.microsoft.com/zh-cn/p/%E5%93%94%E5%93%A9/9mvn4nslt150)的 URL:
59 |
60 | ```txt
61 | https://www.microsoft.com/zh-cn/p/哔哩/9mvn4nslt150
62 | ```
63 |
64 | 然后打开这个网站:[Store-Rg-Adguard - Официальный сайт by adguard](https://store.rg-adguard.net)。
65 |
66 | 在搜索框中粘贴上刚刚复制的链接,搜索选项选择 `Fast`,搜索。
67 |
68 | 
69 |
70 | 我们可以看到,搜索结果的第二行 `60520B029E250.4264454043325_1.3.11.0_neutral_~_5aa7k9th7aafp.msixbundle` (注意区分 `.msixbundle`和 `.emsixbundle`) 就是我们要找的结果,点击下载它。
71 |
72 | 然后双击安装。
73 |
74 | 
75 |
76 | 不需要开发者模式,也不需要折腾签名,直接就可以安装。
77 |
78 | 同样的,安装的 APP 的版本号是 `1.3.11`。
79 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/034.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "学会将代码写简单"
3 | date: 2018-11-22T19:46:55+08:00
4 | draft: false
5 | tags: ["编程之髓"]
6 | categories: ["从入门 到入坟", "他山之石"]
7 | ---
8 |
13 |
14 | *为开源项目作出贡献的最佳方式是使它的代码得以精简。我们应当努力编写即使没有注释也能使新手程序员轻松理解的代码,让维护者无需花费太多精力也能轻松维护。*
15 |
16 |
17 |
18 | 在学生时代,我们乐于使用更加复杂的技巧去解决新的难题。首先,我们学会了循环,再是函数,接着是类… 当我们得到提高,能够用更高级的技术写更长的代码时,我们得到的是称赞。我们发现有经验的程序员使用 `monad`,而新手使用 `for` 循环。
19 |
20 | 当我们出生社会,在工作中或者在开源项目中与他人合作时。我们使用在学校学到的各种玄酷技能自豪地给出解决方案的代码实现。
21 |
22 | *“啊哈!我可以扩展这个项目,并实现 X 功能!我这里用到了继承!我真TM牛逼!!”* ε٩(๑> ₃ <)۶ з
23 |
24 | 我们实现了某个小功能,很有成就感,并有充分的理由相信自己很牛逼。但在实际工程中的编程却不仅仅是实现某某功能这么简单。以我个人的经验而言,写代码使我感到开心与自豪,并且我十分乐意向世界展示我所知道的一切。有例为证,这里是用另一种元编程语言构建的[线性代数语言](https://github.com/mrocklin/matrix-algebra)。(注意,这玩意已经很多年没人碰过了)
25 |
26 | 在自己维护过代码后,我的观点发生了变化。
27 |
28 | 1. **我们不应该去刻意的追求如何构建软件。软件是我们用来解决问题的手段,而解决问题才是我们的真正目标。我们应当围绕着需要解决的问题构建出尽可能小的软件。**
29 |
30 | 2. **我们应当尽可能使用更简单的技术,以便于人们以更少的学习成本去使用或者扩展它。当然,在我们不知道如何使用更简单的技术去实现它时,也可以使用更高级的技术。**
31 |
32 | 这不是什么新鲜的观点。我身边的每个人都或多或少的赞同这些观点,但不知道为什么,当我们为一个新的项目贡献代码时又会忘记这些原则。总是本能的想用复杂的技术去实现功能。
33 |
34 | ## 软件是一种付出
35 |
36 | 你写的每一行代码都需要耗费时间。当然,也许你很乐意花费你的时间。但是,你的代码在被审阅时也是需要花时间的,审阅者需要花费时间来阅读并理解它们。未来的维护者也需要花费时间维护和修改你的代码。他们本可以利用这些时间来晒晒太阳陪陪家人的。
37 |
38 | 所以,当你向某个项目提交代码时,请务必心怀谦恭。多为他人着想同时也会得到他人的理解和尊重。将代码写少是很难的,但你的付出会减轻别人的负担。
39 |
40 | {{< notice info "这段有一个吃饭的例子,我不知道怎么翻译,就稍微改写了一下。原文如下:" >}}
41 |
42 | It should feel as though you are eating with your family and there isn't enough food on the table. You should take only what you need and no more. The people with you will respect you for your efforts to restrict yourself.
43 |
44 | {{< /notice >}}
45 |
46 | ## 越复杂的技术越难以维护
47 |
48 | 作为学生,我们通过使用复杂的技术来证明自己的能力。这体现在我们有能力在开源项目中使用函数、类、高阶函数、`monads` 等。我们在向同行展示自己的解决方案时,并常常因为自己所用的技术高低而感到自豪或卑微。
49 |
50 | 然而,在现实的团队合作项目中,情况却正好相反。现在,我们尽可能使用简单的方法去解决问题。简单的方法能够使得即使是新手程序员也能轻松地扩展我们的代码以解决其他问题。简单的代码能够让人快速上手并让我们脱颖而出。我们通过使用简单的技术解决问题来体现我们的价值。
51 |
52 | *“看!我用 `for` 循环代替了原来的递归函数并且达到了我们的需求。我知道这样不够优雅,但我注意到我们新来的实习生在这里似乎会遇到麻烦,我觉得这样改应该会有所帮助吧! ”*(๑•̀ㅂ•́)و✧
53 |
54 | 真正牛逼的人是不需要证明自己有多牛逼的。你可以通过以简单的方式来解决问题来体现你的价值,这样你的团队中的每个人都会在未来受益于此。
55 |
56 | ## 当然,有所节制
57 |
58 | 话虽这么说,但是过度坚持“使用简单的代码解决问题”的教条可能会适得其反。通常,使用递归的解决方法要比使用 `for` 循环的解决方法更简洁,用类或 `monad` 也是正确的方法。还有两种情况另当别论,为满足自己需求而写的系统 (软件),或是软件使用者没有任何编程经验的情况 (不存在 2 次开发的可能)
59 |
60 |
61 |
62 | ---
63 |
64 | 学生党一枚,翻译上有任何问题还请多多指教 \_(:з)∠)\_
65 |
66 |
67 |
68 | 译者:[Mogeko](https://mogeko.github.io/about/)
69 |
70 | 原文作者:[Matthew Rocklin](http://matthewrocklin.com/)
71 |
72 | 原文地址:
73 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/009.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "如何将 Ubuntu 升级到 17.10"
3 | date: 2017-12-02T11:57:09+08:00
4 | draft: false
5 | tags: ["GNU/Linux", "Ubuntu"]
6 | categories: ["生命不息 折腾不止"]
7 | image: https://mogeko.github.io/blog-images/r/009/logo.png
8 | ---
9 |
10 | {{< featuredImage >}}
11 |
12 | Ubuntu 17.10 已经发布了一段时间了,作为 18.04 的预览(热)版。带来了一大波新特性。
13 |
14 | 其中最重要也是最令我揪心的是 Ubuntu 将放弃 Unity 回归 Gnome。对于我们这些习惯了 Unity 的用户来说,这个决定简直蠢到家了。虽然 Unity 是丑了点,但比 Gnome 好用到不知道那里去了!这也是我迟迟没有升级的主要原因。
15 |
16 | 目前 **Ubuntu 17.10 不是长期支持版本(LTS)!!!**
17 |
18 |
19 |
20 | ## 正文
21 |
22 | Ubuntu 官方推荐的升级策略是“依次升级”。**较低**的版本想要升级到**最高**的版本,需要想升级到**较高**的版本,再从**较高**的版本升级到**最高**的版本。也就是说 16.10 想要升级到 17.10 需要先升级到 17.04。
23 |
24 | - 16.04 -> 16.10 -> 17.04 -> 17.10
25 |
26 | 每个版本中的升级方法都是相似的。这里介绍两种比较安全的升级方法
27 |
28 | **强烈建议升级前先备份!!!** -> [如何备份 Ubuntu](http://www.jianshu.com/p/b73e8011b828)
29 |
30 | ### 小白最爱的升级方法(无脑下一步)
31 |
32 | 在 Dash 中搜索并启动 Update Manager
33 |
34 | 
35 |
36 | 选择更新选项卡 (Updates),然后在窗口底部,将通知设置从 “长期支持版本”(For long-term support version) 更改为任何新版本 (For any new version)。
37 |
38 | 
39 |
40 | 等了一会儿,系统会通知你有新的发行版可用
41 |
42 | 
43 |
44 | - 如果不想等,可以在命令行中输入命令:
45 |
46 | ```shell
47 | sudo do-release-upgrade -d
48 | ```
49 |
50 | 这个命令可以强制搜索新的版本
51 |
52 | 然后输入您的密码。 出现发行说明窗口。 点击升级(Upgrade)。
53 |
54 | 
55 |
56 | 现在只需要等升级就可以了,升级完成后会自动重启。
57 |
58 | 
59 |
60 | ### 使用命令行升级 Ubuntu
61 |
62 | 首先,打开终端窗口并运行以下命令升级现有软件。
63 |
64 | ```shell
65 | sudo apt update && sudo apt dist-upgrade
66 | ```
67 |
68 | 然后确保您安装了 update-manager-core 软件包。
69 |
70 | ```shell
71 | sudo apt install update-manager-core
72 | ```
73 |
74 | 接下来,使用 nano 或您首选的命令行文本编辑器编辑配置文件。
75 |
76 | ```shell
77 | sudo nano /etc/update-manager/release-upgrades
78 | ```
79 |
80 | 在此文件的底部,将提示值从`lts` 更改为 `normal`。
81 |
82 | ```ini
83 | Prompt=normal
84 | ```
85 |
86 | 保存并关闭文件。 之后,运行以下命令开始升级过程。
87 |
88 | ```shell
89 | do-release-upgrade
90 | ```
91 |
92 | 同样的,升级完成后会自动重启。
93 |
94 | ### 查看 Ubuntu 版本(验证是否升级成功)
95 |
96 | 验证是否升级成功,只需要在命令行中运行:
97 |
98 | ```shell
99 | lsb_release -a
100 | ```
101 |
102 | 输出:
103 |
104 | ```shell
105 | No LSB modules are available.
106 | Distributor ID: Ubuntu
107 | Description: Ubuntu 17.10
108 | Release: 17.10
109 | Codename: artful
110 | ```
111 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/051.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Rust 生命周期中的一些坑"
3 | date: 2019-04-04T21:17:33+08:00
4 | draft: false
5 | tags: ["Rust"]
6 | categories: ["从入门 到入坟"]
7 | ---
8 |
13 |
14 | 前面有一篇文章介绍了[什么是 Rust 的生命周期?](https://mogeko.github.io/2019/050/)这里补充一些关于 Rust 的生命周期不容易被注意到的细节。
15 |
16 | 因为我水平有限,有的概念可能不是很全面,甚至可能有偏差,还请多多指点。
17 |
18 | ## 生命周期是完全静态的
19 |
20 | Rust 的看家本领就是静态检测,所有实例的生命周期都是在编译时就被确定好的。
21 |
22 | 所以不要问:“为什么生命周期不能根据实际情况自动确定?”因为真的做不到!
23 |
24 | ## `let` 可以绑定所有权
25 |
26 | 除了绑定所有者和数据外,`let` 还可以绑定所有者和数据之间的所有权。绑定了所有权,也就绑定了生命周期。
27 |
28 | 这是理所当然的事实,但是经常被人忽略。
29 |
30 | ## 形参与实参的生命周期是相互绑定的
31 |
32 | 与 `let` 相似,函数中的形式参数与实际参数的生命周期是相互绑定的。同样的,函数返回值和函数实体的拥有者的生命周期也是相互绑定的,因为返回值的生命周期与函数实体相互绑定,而函数实体与拥有者相互绑定。
33 |
34 | 举个例子:
35 |
36 | ```rust
37 | fn sum(x: u32, y: u32) -> u32 {
38 | x + y
39 | }
40 |
41 | fn main(){
42 | let a = 1;
43 | let b = 2;
44 | let c = sum(a, b);
45 | }
46 | ```
47 |
48 | `x` 与`a` 相互绑定,`c` 与 `sum()` 与 `a + b` 相互绑定。
49 |
50 | ```txt
51 | a -> x
52 | x + y -> sum() -> c
53 | ```
54 |
55 | 结构体中也是类似的:
56 |
57 | ```rust
58 | struct Foo {
59 | x: i32,
60 | }
61 |
62 | fn main() {
63 | let y = 5;
64 | let f = Foo { x: y };
65 | }
66 | ```
67 |
68 | `x` 与 `y` 相互绑定,结构体 `Foo` 与 `f` 相互绑定。
69 |
70 | ```txt
71 | x -> a
72 | Foo -> f
73 | ```
74 |
75 | 这同样也是理所当然但容易被人忽视的事实,这里提出来也是为了给下一条做铺垫。
76 |
77 | ## 生命周期标记的影响不仅仅是函数 (结构体) 内部
78 |
79 | 准确的说应该是生命周期标记可以通过影响函数 (结构体) 内部来对函数实体的拥有者和传入的实际参数产生影响。具体原因就是上面提到的形式参数与实际参数的生命周期相互绑定,函数返回值和函数实体的拥有者的生命周期相互绑定。
80 |
81 | 举个例子:
82 |
83 | ```rust
84 | fn foo<'a>(x: &'a str, y: &str) -> Vec<&'a str> {
85 | let mut results = Vec::new();
86 |
87 | if x.contains(y) {
88 | results.push(x);
89 | }
90 |
91 | results
92 | }
93 |
94 | fn main() {
95 | let a = "I'm foo";
96 | let b = "foo";
97 | let c = foo(a, b);
98 | }
99 | ```
100 |
101 | 生命周期参数将 `x` 的生命周期与 `results` 相互绑定,而 `x` 与 `a` 相互绑定,`results` 与 `c` 相互绑定,所以 `c` 的生命周期与 `a` 是相互绑定的!!{{< spoiler >}}就像三国杀中的“铁索连环”一样{{< /spoiler >}}
102 |
103 | ```txt
104 | a -> [x => results -> foo] -> c
105 | ```
106 |
107 | 根据关系我们可以很容易发现,`a` 必须活得比 `c` 长,不然就会报错。
108 |
109 | 从整体来考虑生命周期,显然更容易理解什么时候应该使用生命周期标注,什么时候不应该使用。
110 |
111 | ## 生命周期标注的作用不是“续命”
112 |
113 | 生命周期标注只是注释出:“谁应该比谁活得更长 (或者相等)”,如果实际情况与标注不相符,编译器会报错。
114 |
115 | ## 长生命周期是短生命周期的子类型
116 |
117 | 与直觉有所不同。显式生命周期标注是泛型参数一种,但是有**协变**的概念。
118 |
119 | ## 相关文章
120 |
121 | - [**Rust 中的所有权**](https://mogeko.github.io/2019/042/)
122 | - [**Rust 中的生命周期**](https://mogeko.github.io/2019/050/)
123 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/070.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "为 LeaveIt 主题添加阅读进度条"
3 | date: 2019-06-04T20:45:28+08:00
4 | draft: false
5 | tags: ["Hugo"]
6 | categories: ["折腾博客的二三事"]
7 | image:
8 | subtitle:
9 | ---
10 |
15 |
16 | {{< notice info "Obsolete" >}}
17 | 本站目前使用的主题是 [zzo](https://github.com/zzossig/hugo-theme-zzo)
18 | {{< /notice >}}
19 |
20 | 前面写了篇文章中提到了[如何给 Hexo 主题添加阅读进度条](https://mogeko.me/2017/003/#%E9%A1%B6%E9%83%A8%E9%98%85%E8%AF%BB%E8%BF%9B%E5%BA%A6%E6%9D%A1),如今将博客换到 Hugo + LeaveIt 后一直想把这个特性移植过来,但因为博主太懒了,这个计划就一直被拖到了现在,直到今天终于搞定了。效果就像你现在看到的这样 (就上面的那条粉色的进度条)。还是挺好看的吧?
21 |
22 | 理论上所有 Hugo 博客都可以通过相似的方法添加阅读进度条。
23 |
24 |
25 |
26 | 首先将这一段代码插入到 `header` 的模板中
27 |
28 | 这个模板在不同的主题中可能有所不同,LeaveIt 的 `header` 在 `/layouts/partials/header.html`
29 |
30 | ```html
31 | {{ if (and .IsPage (not .Params.notsb)) }}
32 |
33 | {{ end }}
34 | ```
35 |
36 | 分别插入到第 2 行和第 16 行,也就是如图所示的位置
37 |
38 | 
39 |
40 | 然后在`/assets/css/_custom.scss` 文件中为我们的进度条添加样式
41 |
42 | ```css
43 | // 顶部阅读进度条
44 | .top-scroll-bar {
45 | position: fixed;
46 | top: 0;
47 | left: 0;
48 | z-index: 9999;
49 | display: none;
50 | width: 0;
51 | height: 3px;
52 | background: #ef3982;
53 | }
54 | ```
55 |
56 | 再然后,新建一个 js脚本 文件 `/assets/js/_custom.js`,来控制我们的进度条。
57 |
58 | ```javascript
59 | // ==============================
60 | // Custom JavaScript
61 | // ==============================
62 |
63 | // 顶部阅读进度条
64 | $(document).ready(function () {
65 | $(window).scroll(function(){
66 | $(".top-scroll-bar").attr("style", "width: " + ($(this).scrollTop() / ($(document).height() - $(this).height()) * 100) + "%; display: block;");
67 | });
68 | });
69 | ```
70 |
71 | 最后,使用 `
19 |
20 | 是不是看起来很像视频?实际上它并不是视频而是一堆字符 (不信的话可以按 `F12` 调 HTML 源码出来看 ,,Ծ‸Ծ,,)
21 |
22 | 这就是 asciinema,它可以将终端中的输入和输出录制 (记录) 下来,然后把它们像视频一样的播放出来。感觉好像跟录屏软件很像,但实际用起来差别还是蛮大的。
23 |
24 | ## 录屏软件 vs asciinema
25 |
26 | 与录屏软件相比,asciinema 有以下优点:
27 |
28 | - **录制体积小,加载速度快**
因为 asciinema 录制的并不是图像,而是一堆字符。录屏软件想要达到同样效果需要付出数倍于此的硬盘空间
29 |
30 | - **播放器尺寸自适应**
用录屏软件录出来的尺寸有多大,视频的尺寸就有多少,想要调节视频尺寸只有重新压制。而想要调节 asccicast 的尺寸只需要加一个 `data-size` 标签即可
31 | - **基本没有资源占用**
用录屏软件录过视频的小伙伴都知道,录屏时的资源开销是相当大的,专业的主播为了保证录制效果甚至需要使用录屏卡。而 asciinema 在录制时几乎没有资源占用
32 |
33 | 当然,asciinema 也不是完美的,就比如:
34 |
35 | - **使用范围十分有限**,仅能在终端中使用。
36 |
37 | 最吸引我的是 asccicast 体积小的优点,这使得它特别适合用来做 demo 演示。
38 |
39 | ## Usage
40 |
41 | asciinema 的安装使用也很方便。
42 |
43 | #### 注册帐号
44 |
45 | 首先去 [asciinema.org](https://asciinema.org/login/new) 注册一个帐号。asciinema.org 采用的是邮箱验证,无密码登录;无论注册还是登录都只需要填写邮箱,然后通过邮箱中的链接来注册 / 登录 (没收到邮件可以去垃圾邮件中找找)
46 |
47 | 
48 |
49 | asciinema.org 会托管你录制的”视频“,方便插入到别的网站或者 README 中。
50 |
51 | ### 安装
52 |
53 | asciinema 支持 Linux、Windows (WSL)、macOS 等主流平台,一般情况下你可以通过该平台的包管理器进行安装
54 |
55 | #### GNU/Linux
56 |
57 | Arch Linux 用户可以使用以下命令来安装:
58 |
59 | ```shell
60 | pacman -S asciinema
61 | ```
62 |
63 | Ubuntu 用户可以使用以下命令来安装:
64 |
65 | ```shell
66 | (sudo) apt install asciinema
67 | ```
68 |
69 | #### macOS
70 |
71 | Mac 用户可以通过 homebrew 来安装:
72 |
73 | ```shell
74 | brew install asciinema
75 | ```
76 |
77 | #### Pip
78 |
79 | 如果你使用的包管理器没有收录 asciinema,你也可以通过 pip 来安装:
80 |
81 | ```shell
82 | (sudo) pip3 install asciinema
83 | ```
84 |
85 | 更多信息请参考[官方文档](https://asciinema.org/docs/installation)
86 |
87 | ### 使用 asciinema
88 |
89 | #### 录制 asccicast
90 |
91 | 想要录制 asccicast 只需要在终端中输入:
92 |
93 | ```shell
94 | asciinema rec [filename]
95 | ```
96 |
97 | 然后在终端中输入你想要录制的内容。录制完成后使用 `Ctrl D` 或者 `exit` 退出录制。
98 |
99 | #### 播放 asccicast
100 |
101 | 录制完成后使用以下命令播放刚刚录制的成果:
102 |
103 | ```shell
104 | asciinema play [filename]
105 | ```
106 |
107 | 播放 asccicast 时可以使用空格键来控制暂停与继续播放,使用 `Ctrl C` 来退出。
108 |
109 | #### 链接 asciinema.org
110 |
111 | 在 [asciinema.org](https://asciinema.org/login/new) 注册好并登录好帐号后,在终端输入
112 |
113 | ```shell
114 | asciinema auth
115 | ```
116 |
117 | 然后 asciinema 会给你一个链接
118 |
119 | 
120 |
121 | 使用浏览器打开它即可链接到你的账户上
122 |
123 | 
124 |
125 | #### 上传到 asciinema.org
126 |
127 | 链接好后使用以下命令将录制的 asccicast 上传到 asciinema.org
128 |
129 | ```shell
130 | asciinema upload [filename]
131 | ```
132 |
133 | 更多使用方法请参考[官方文档](https://asciinema.org/docs/usage)
134 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/102.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "关于 BitTorrent Tracker 的一切"
3 | subtitle:
4 | date: 2023-01-13T20:26:29+01:00
5 | draft: false
6 | tags: ["BitTorrent"]
7 | categories: ["随便写点什么"]
8 | image:
9 | description:
10 | ---
11 |
12 |
17 |
18 | 近期,我开发的开源项目 [Yet another BitTorrent Tracker](https://github.com/mogeko/yabtt) 迎来了 Minimum Viable Product 🎉。
19 |
20 | 经过对 [BitTorrent Enhancement Proposals](http://www.bittorrent.org/beps/bep_0000.html) 将近一个月的研究,我只能说:
21 |
22 | 
23 |
24 | 同时,我还发现;中文互联网中能把 BitTorrent Tracker 讲清楚的文章简直凤毛麟角。但这玩意又确实很重要,很多人抱怨自己使用 BitTorrent 下东西没有速度很大程度上就是 BitTorrent Tracker 的问题。所以很有必要写一篇文章来把 BitTorrent Tracker 的前世今生讲清楚。
25 |
26 | ## 专有名词解释
27 |
28 | 首先,为了行文方便,我们需要定义几个专有名词:
29 |
30 | - BT: 及 BitTorrent,一种去中心化文件分享协议
31 | - Peer: 使用 BitTorrent 进行交换数据的客户端
32 |
33 | ## BitTorrent Tracker 是什么?
34 |
35 | 简单来讲,BitTorrent Tracker 是一个响应 HTTP GET 请求的 HTTP/HTTPS 服务器。
36 |
37 | ## BitTorrent Tracker 是如何工作的?
38 |
39 | 当一个 Peer 需要通过 BT 下载「文件 A」时,它会将「文件 A」的特征码 ([SHA-1](https://zh.wikipedia.org/wiki/SHA-1))、Peer 的 ID 等元信息通过 [GET 方法](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/GET)发送给 Tracker。
40 |
41 | ```shell
42 | curl 'http://example.com/announce?info_hash=%124Vx%9A%BC%DE%F1%23Eg%89%AB%CD%EF%124Vx%9A&peer_id=00000000000000000001...'
43 | ```
44 |
45 | {{< notice info "Notice" >}}
46 | `info_hash` 是一段 20-byte 长的二进制 SHA-1,为了传输安全,它需要被编码为 [RFC1738](http://www.faqs.org/rfcs/rfc1738.html)。
47 |
48 | 例如,对于这个 SHA-1: `\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a`
49 |
50 | 它将会被编码为:`%124Vx%9A%BC%DE%F1%23Eg%89%AB%CD%EF%124Vx%9A`
51 |
52 | {{< /notice >}}
53 |
54 | Tracker 会将其记录下来,并返回它记录的与「文件 A」相关的 Peer 组成的列表 (大约 50 个)。
55 |
56 | ```json
57 | {
58 | "interval": 3600,
59 | "peers": [
60 | { "ip": "1.2.3.3", "peer id": "00000000000000000003", "port": 8000 },
61 | { "ip": "1.2.3.1", "peer id": "00000000000000000001", "port": 8000 },
62 | { "ip": "1.2.3.4", "peer id": "00000000000000000004", "port": 8000 },
63 | { "ip": "1.2.3.2", "peer id": "00000000000000000002", "port": 8000 },
64 | { "ip": "1.2.3.5", "peer id": "00000000000000000005", "port": 8000 }
65 | // ...
66 | ]
67 | }
68 | ```
69 |
70 | 然后你就可以和别的 Peer 进行数据交换了。
71 |
72 | 你可以通过 Tracker 找到别的 Peer,而别的 Peer 也可以通过它找到你,这就是 Tracker 的作用。
73 |
74 | ## 限制与补救措施
75 |
76 | 虽然 BT 下载本身是去中心化的,但 BitTorrent Tracker 服务器不是;所以它很容易被监管机构盯上。很多人抱怨自己使用 BT 下载热门资源却没有速度,很多情况下就是因为 Tracker 被 BAN 了。
77 |
78 | 解决办法就是**定期更新 Tracker 服务器的列表**;主流的 BT 客户端都允许我们手动添加/更新额外的 Tracker 服务器。大多数情况下都是在设置里,复制粘贴你想要添加的 Tracker 服务器的地址就可以了,也有少数需要针对每一个下载任务单独添加。至于到哪儿找 Tracker 服务器地址?GitHub 上专门有个项目收集当前活跃的 Tracker: [ngosang/trackerslist](https://github.com/ngosang/trackerslist),每日更新。
79 |
80 | 同时,目前主流的 BT 客户端都实现了 [Peer Exchange (PEX) 协议](http://www.bittorrent.org/beps/bep_0011.html),它允许 Peer 之间分享他们记录的别的 Peer 的信息。然后通过这种 P2P2P2P... 的方式完全去中心化的组成 Peer 网络。有了 PEX 作为补充,Tracker 作用就显得不那么重要了;一般 Tracker 只在第一次下载时使用,俗称“点火”。然后等你找到至少一个别的 Peer 后,就可以通过 PEX 协议找到更多的 Peer;Peer 越多,下载就越快。
81 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/004.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "使用 Hexo Hey 管理你的博客"
3 | date: 2017-09-04
4 | draft: false
5 | tags: ["Hexo"]
6 | categories: ["折腾博客的二三事"]
7 | ---
8 |
9 | 在使用 Hexo Hey 之前,我一直在使用 VSCode(配合 vscode-hexo 插件)来管理博客。虽然可以很快捷 的`新建`,`部署`, `测试`,`发布` 博客 ,但还是很麻烦,离我理想中的博客平台还有一定的距离。
10 | 我在知乎上发现了 Hexo Hey 这个插件,尝试了一下,虽然有各种问题,但确实很好用。
11 | 因此决定写一篇文章来介绍一下如何`安装`, `使用` Hexo Hey。
12 |
13 | 切换换到 Hexo Hey 后最不习惯的地方就是没有了 VSCode 中那些方便的快捷键了。(ノへ ̄、) 擦眼泪……
14 |
15 | 与 Hexo Hey 比较相似的 Hexo 博客管理程序还有 [Hexo Admin](https://github.com/jaredly/hexo-admin)。
16 |
17 |
18 |
19 | ## 准备工作
20 |
21 | 1. Node.js <- 就是安 Hexo 时用到的拿货,应该已经有了,就不贴安装地址了。
22 | 2. Hexo Hey <- 通过 npm 安装。
23 |
24 | ## 正文
25 |
26 | ### 安装 Hexo Hey
27 |
28 | 首先进入已配置好的那个 Hexo 目录:
29 |
30 | ```shell
31 | cd [你的 Hexo 目录]
32 | ```
33 |
34 | 输入一下命令安装 Hexo Hey:
35 |
36 | ```shell
37 | npm install hexo-hey --save
38 | ```
39 |
40 | 
41 |
42 | 然后打开 Hexo 目录 中的 `_config.yml` 文件,在结尾加上如下代码:
43 | *将`[你的用户名]`, `[你的密码]` 改为你喜欢的用户名和密码
44 |
45 | ```yml
46 | # Admin
47 | admin:
48 | name: [你的用户名]
49 | password: [你的密码]
50 | secret: hey hexo
51 | expire: 60*1
52 | # cors: http://localhost:3000
53 | ```
54 |
55 | 重新部署一遍 Hexo,开启 Hexo 的本地服务器
56 |
57 | ```shell
58 | hexo g
59 | hexo s
60 | ```
61 |
62 | 现在访问 `http://localhost:4000/admin` 看看效果。(๑•̀ㅂ•́)و✧
63 | 
64 |
65 | ## 一些问题
66 |
67 | 1. 不能自动保存(隔壁 Hexo Admin 就没这毛病),也不能用 `ctrl + S` 的快捷键保存文章。
68 | 2. 有篇文章没有 `编辑` 按钮。(难道是因为我在文章中用了 ‘华丽的分界线’( ̄△ ̄;))
69 | 
70 | 3. **图片管理非常不友好!!!虽然可以通过托拽插入图片,但此方法插入的图片都保存在 \source\images 文件夹下,这与官方推荐的方法不同。**(官方推荐的方法是将图片放入与文章同名的资源文件夹中)
71 | 4. **Hexo Hey 的 Markdown 渲染引擎无法识别 Hexo 中的标签插件**
72 | 
73 | 5. 那个 `发布` 的意思实际上是 `部署`,发布到 GitHub Pages 或者其他远程服务器仍然需要手动。
74 | 6. 必须启动 Hexo 的本地服务器才能使用。
75 | 7. 目前就发现了这么多…
76 |
77 | ## 高级
78 |
79 | ### 开机启动 Hexo Server(后台)
80 |
81 | 开机后,在后台自动启动 Hexo 本地服务器可以在一定程度上解决[问题6](#bug_6)。
82 | 首先要创建两个脚本文件 `hexo-server.vbs` 和`hexo-server.bat`。
83 | **hexo-server.vbs:**
84 |
85 | ```vb
86 | set ws=WScript.CreateObject("WScript.Shell")
87 | ws.Run "[你的 Hexo 文件夹]\\hexo-server.bat /start",0
88 | ```
89 |
90 | **注意:这里的[你的 Hexo 文件夹]中的 \ 符号需要转义。**
91 | **例如,C:\Users\user\Hexo 需要转义为 C:\\Users\\user\\Hexo**
92 |
93 | **hexo-server.bat:**
94 |
95 | ```shell
96 | cd [你的 Hexo 文件夹]
97 | hexo s -d
98 | ```
99 |
100 | 然后将 `hexo-server.bat` 放入[你的 Hexo 文件夹]中。
101 | 将 `hexo-server.vbs` 放入 `C:\Users\[你的用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup` 中。
102 | *不确定自己用户名什么,可以到 `C:\Users\` 中确认一下。
103 | *实在是找不到这个文件夹请 Google `Windows 开机启动的文件夹`。
104 |
105 | ## 相关文章
106 |
107 | - [**使用 Hexo + GitHub Pages 建立自己的博客**](https://mogeko.github.io/2017/002/)
108 | - [**Hexo 美化**](https://mogeko.github.io/2017/003/)
109 | - [**在你的文章中添加 B站的视频**](https://mogeko.github.io/2017/005/)
110 | - [**为博客添加独立域名**](https://mogeko.github.io/2019/048/)
111 | - [**为博客添加免费的 CDN (Cloudflare)**](https://mogeko.github.io/2019/056/)
112 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/089.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "《八方旅人》支线任务:命中注定之人(1&2)"
3 | subtitle:
4 | date: 2022-01-10T16:45:43Z
5 | draft: false
6 | tags: ["第九艺术", "OCTOPATH TRAVELER"]
7 | categories: ["关于第九艺术"]
8 | image:
9 | description: "《八方旅人》隐藏结局的前置任务之一"
10 | ---
11 |
12 |
17 |
18 | ## 命中注定之人(1)
19 |
20 | - 前置条件:[盗贼主线剧情第一章](https://www.vgtime.com/topic/952965.jhtml)
21 | - 队伍:[欧尔贝克 (剑士)][剑士] 或 [海茵特 (猎人)][猎人]
22 | - NPC:阿尔法丝
23 | - 地图:柏达弗尔 -宅邸前-
24 |
25 | ---
26 |
27 | 在完成**盗贼主线剧情第一章**后,来到**柏达弗尔**。
28 |
29 | 
30 |
31 | 在**柏达弗尔 -宅邸前-**与**阿尔法丝**对话,开启任务。
32 |
33 | 
34 |
35 | 然后使用[剑士]或[猎人]的技能与**阿尔法丝**战斗。
36 |
37 | 
38 |
39 | 胜利,完成任务。
40 |
41 | 
42 |
43 | ## 命中注定之人(2)
44 |
45 | - 前置条件:[命中注定之人(1)](#命中注定之人1)
46 | - 队伍:[赛拉斯 (学者)][学者] 或 [亚芬 (药师)][药师]
47 | - NPC:
48 | 1. 莉布拉克
49 | 2. 阿尔法丝
50 | 3. 芙萝拉
51 | - 地图:圣特布里吉 -> 圣特布里吉 -上游-
52 |
53 | ---
54 |
55 | 在完成前置任务后,来到**圣特布里吉**。
56 |
57 | 
58 |
59 | 一直往左走,在木桥上与**莉布拉克**对话,开启任务。
60 |
61 | 
62 | 
63 |
64 | 然后对**阿尔法丝**使用[学者]或[药师]的技能。获得「阿尔法丝之诗」。
65 |
66 | 
67 | 
68 |
69 | 在**圣特布里吉 -上游-**的教堂门前,将「阿尔法丝之诗」交给**芙萝拉**。
70 |
71 | 
72 | 
73 |
74 | 任务完成。
75 |
76 | 
77 |
78 |
79 |
80 |
90 |
91 | [神官]: https://octopath.huijiwiki.com/wiki/欧菲莉亚
92 | [学者]: https://octopath.huijiwiki.com/wiki/塞拉斯
93 | [商人]: https://octopath.huijiwiki.com/wiki/泰瑞莎
94 | [剑士]: https://octopath.huijiwiki.com/wiki/奥伯里克
95 | [舞者]: https://octopath.huijiwiki.com/wiki/普蕾米罗斯
96 | [药师]: https://octopath.huijiwiki.com/wiki/阿尔芬
97 | [盗贼]: https://octopath.huijiwiki.com/wiki/提利昂
98 | [猎人]: https://octopath.huijiwiki.com/wiki/海茵特
99 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/056.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "为博客添加免费的 CDN (Cloudflare)"
3 | date: 2019-04-21T18:37:13+08:00
4 | draft: false
5 | tags: []
6 | categories: ["折腾博客的二三事"]
7 | ---
8 |
13 |
14 | 正如前面的几篇文章提到的那样,本博客是部署到 GitHub Pages 上的。
15 |
16 | GitHub Pages 不仅不花钱,而且还有免费的证书拿,可以说是相当划算的。但有个问题就是 GitHub 的服务器都部署在海外,也就是说在国内访问本博客的速度的速度会比较慢 (Ping 下来 100 到 200 多毫秒)。
17 |
18 | 解决这一问题的最优解就是使用 CDN。
19 |
20 | ## CDN 是什么?
21 |
22 | > **内容分发网络**(英语:**C**ontent **d**elivery **n**etwork或**C**ontent **d**istribution **n**etwork,[缩写](https://zh.wikipedia.org/wiki/%E7%B8%AE%E5%AF%AB):**CDN**)是指一种透过[互联网](https://zh.wikipedia.org/wiki/%E4%BA%92%E8%81%AF%E7%B6%B2)互相连接的计算机网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、影片、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。
23 | >
24 | >
25 | > —— 维基百科
26 | >
27 |
28 | 简单来说,CDN 就是部署在世界各地的缓存服务器,它们会提前缓存网站上的资源,然后当用户想要访问相关资源时,直接从 CDN 服务器上取就可以了。这样不仅可以增加访问速度减少访问延迟,还可以减缓网站服务器上的压力。
29 |
30 | 世界上的 CDN 服务提供商有很多,七牛云、阿里云、腾讯云等等都提供了 CDN 服务,它们有的收费有的部分免费。我今天选择的 CDN 服务来自于 Cloudflare。
31 |
32 | ## Why Cloudflare?
33 |
34 | [Cloudflare](https://dash.cloudflare.com/) 是全球最大的 DNS 服务提供商之一 (号称是全球最快的 DNS `1.1.1.1` 就是它们搞的)。除此之外他们还提供 CDN、SSL 证书、DDos 保护等服务,并且 Cloudflare 与百度有合作,在国内也部署有大量的节点,还能顺便解决百度爬无法抓取 GitHub Pages 的问题。我今天要使用的就是免费版的 SSL 证书以及 CDN 服务。
35 |
36 | 除了 Cloudflare 比较 NB 以外选择他的另一个更重要的原因是国内的 CDN 无一例外都要要求域名在公安局备过案。作为一个遵纪守法的好市民,我肯定是不怕什么公安局备案的,我主要是觉得太麻烦了。{{< spoiler >}}并且在公安局备案后,放到网站上的那个小图标有点丑 ,,Ծ‸Ծ,,{{< /spoiler >}}
37 |
38 | ## 配置 CDN
39 |
40 | 首先要去 [Cloudflare](https://dash.cloudflare.com/) 注册一个帐号。注册好后点击 `Add site` 添加你的网站。
41 |
42 | 
43 |
44 | 添加好后选择免费的那个计划 (Plan),有钱也可以选择收费的,提供的服务更多。
45 |
46 | 
47 |
48 | 然后 Cloudflare 会读取你的 DNS 配置,没有问题的话直接点 `Continue` 即可。
49 |
50 | 
51 |
52 | 然后 Cloudflare 会要求你将你的 DNS 服务器替换成他提供的,到你的域名商那里设置一下即可 (添加或替换均可)
53 |
54 | 
55 |
56 | 等几分钟,等到它显示 `Great news! Cloudflare is now protecting your site` 就说明设置成功了。
57 |
58 | 
59 |
60 | ## 设置 SSL 证书
61 |
62 | 除了免费的 DNS 和 CDN 以外,Cloudflare 还提供了免费的 SSL 证书。
63 |
64 | Cloudflare 的 SSL 证书默认是已经开启了的。不过最好还是在 `Crypto` 页面将 `Always Use HTTPS` 勾选上,这个选项可以自动在访问你的网站时将所有的 `http` 的链接重定向到相应的 `https` 链接上。
65 |
66 | 
67 |
68 |
69 |
70 |
71 |
72 | ## 相关文章
73 |
74 | - [**使用 Hugo + GitHub Pages 搭建个人博客**](https://mogeko.github.io/2018/018/)
75 | - [**使用 Hexo + GitHub Pages 建立自己的博客**](https://mogeko.github.io/2017/002/)
76 | - [**使用 Travis CI 自动部署 Hugo 博客**](https://mogeko.github.io/2018/028/)
77 | - [**为博客添加独立域名**](https://mogeko.github.io/2018/048.md)
78 |
--------------------------------------------------------------------------------
/content/posts/zh-cn/079.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "利用 Hugo Shortcodes 插入 B 站视频"
3 | date: 2020-04-01T18:56:48+02:00
4 | draft: false
5 | tags: ["hugo", "mogege"]
6 | categories: ["折腾博客的二三事"]
7 | image:
8 | subtitle:
9 | ---
10 |
16 |
17 | {{< notice info "Obsolete" >}}
18 | 本站目前使用的主题是 [zzo](https://github.com/zzossig/hugo-theme-zzo)
19 | {{< /notice >}}
20 |
21 | 由于 [LeaveIt](https://raw.githubusercontent.com/liuzc/LeaveIt/) 的作者弃坑的缘故,使得我们提的 PR 迟迟不能并入到 `master` 中,并且在 fork 的仓库下开发又很麻烦。加上这个主题已经被我魔改得连亲妈也不认识了,所以我索性重新开一个新坑:[mogege](https://github.com/Mogeko/mogege)。
22 |
23 | 所以我花了一晚上的时间将 LeaveIt 重构,并将我魔改的功能整合在了一起,顺便删掉了一些我用不上的功能,还重写了 JavaScript 代码,丢到了 `jQuery` 这个依赖项...
24 |
25 | 这篇文章就是改造的成果之一。
26 |
27 | ## 在博客中插入 B 站视频
28 |
29 | 众所周知,B 站允许使用 `