├── .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 | ![Julian Paul Assange](https://mogeko.github.io/blog-images/r/052/Julian.Assange.jpg) 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 | ![Ticket](https://mogeko.github.io/blog-images/r/069/BoardingPass_MyNameOnMars2020.png) 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 | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910129397282/0D5A1135E6760F86BC8F3A9FE32EE99983375512/) 27 | 28 | 在弹出的文件夹中可以看到以下文件 29 | 30 | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910129400498/62CFB7DA909A59E3E1C88AFF299388B680B07885/) 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 | ![GitHub Chart](https://ghchart.rshah.org/mogeko) 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 | GitHub Chart 36 | ``` 37 | 38 | 如果是在 Markdown 中,应该这么写 39 | 40 | ```markdown 41 | ![GitHub Chart](https://ghchart.rshah.org/mogeko) 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 | ![Run.cmd](https://mogeko.github.io/blog-images/r/026/run.png) 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 | ![Poster](https://mogeko.github.io/blog-images/r/064/poster_2.jpg) 27 | 28 |
29 | 30 | 另外还有一点非常值得说的就是他的结局,行长的骚操作看得我一脸懵逼,想了两分钟。。。 31 | 32 | 卧槽,这剧神了!!!Σ(っ °Д °;)っ 33 | 34 | 以下是个人的一点解读:⚠剧透警告⚠ 35 | 36 |

关于对大和田的处理,眼镜已经说得很清楚了,就是为了缓和派系之争顺便拉拢一下大和田系的人。而对于半泽的处理就要复杂得多了。

37 |

我们先分析一下大和田跪完后半泽的处境:

38 |
    39 |
  1. 虽然大和田系被削弱了,但派系之争仍然存在
  2. 40 |
  3. 半泽除了两个基友以及一个欣赏他的直属上司(算半个)外基本没有别的什么政治资本了
  4. 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 | ![readmail](https://mogeko.github.io/blog-images/r/047/readmail_0.png) 27 | 28 | 我只是想下个附件啊!(╯‵□′)╯︵┴─┴ 29 | 30 | 用真实邮箱注册吧,不仅注册麻烦,而且**还有被垃圾邮件轰炸的风险**。这时,如果有临时邮箱就不同了——**你可以使用临时邮箱申请注册,注册成功后就扔掉不管了**,你今后仍可使用注册的邮箱登录,~~不过这种垃圾论坛一般不会经常使用的吧。~~ 31 | 32 | 在成功下到资源的同时避免了身份泄露被垃圾邮件轰炸,深藏功与名๑乛◡乛๑ 33 | 34 |

(感谢 萌咖 | MoeClub.org 提供的服务器)

35 | 36 |
37 | 38 | ## 如何使用 39 | 40 | 首先,打开 [临时邮箱](http://mail.mogeko.me) 41 | 42 | ![readmail](https://mogeko.github.io/blog-images/r/047/readmail_1.png) 43 | 44 | 右上角就是分配给你的临时邮箱地址了,如果不满意的话你也可以刷新,或者自定义邮箱地址 (如果可用的话) 45 | 46 | 然后,**千万不要关闭临时邮箱的页面**,直接去需要注册的论坛,填上分配给你的邮箱地址,以及随便取的用户名、密码等。 47 | 48 | ![readmail](https://mogeko.github.io/blog-images/r/047/readmail_2.png) 49 | 50 | 然后就可以收到验证码等注册所需要的信息了 51 | 52 | ![readmail](https://mogeko.github.io/blog-images/r/047/readmail_3.png) 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 | {{}} 隐藏文字 {{}} 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 | ![screenshot](https://mogeko.github.io/blog-images/r/073/screenshot.png) 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 | ![Box](https://mogeko.github.io/blog-images/r/075/box.jpg) 30 | 31 | 首先拍下两个先锋,站场 + 回费 32 | 33 | ![Step 1](https://mogeko.github.io/blog-images/r/075/step_1.jpg) 34 | 35 | 费用好后拍下银老板 (**向左**) 和单体奶 36 | 37 | ![Step 2](https://mogeko.github.io/blog-images/r/075/step_2.jpg) 38 | 39 | ![Step 2](https://mogeko.github.io/blog-images/r/075/step_2.5.jpg) 40 | 41 | **关键步骤来了!当左边那个敌人开始移动时,银老板迅速开真银斩,清一波飞机 + 守住左路** 42 | 43 | ![Step 3](https://mogeko.github.io/blog-images/r/075/step_3.jpg) 44 | 45 | 然后放下两个高速对空单体狙堵门 (飞机),如果地面单位输出不够的话,就向上向下放 (帮忙输出,不堵门) 46 | 47 | ![Step 4](https://mogeko.github.io/blog-images/r/075/step_4.jpg) 48 | 49 | 打完这一波敌人后拍下陈,不出意外的话费用刚刚好 (这也是丢人熊带一技能的原因) 50 | 51 | ![Step 5](https://mogeko.github.io/blog-images/r/075/step_5.jpg) 52 | 53 | 至此,阵型已经基本成型了。 54 | 55 | 费用好后拍下小羊帮助输出 56 | 57 | ![Step 6](https://mogeko.github.io/blog-images/r/075/step_6.jpg) 58 | 59 | 任务完成 60 | 61 | ![Done](https://mogeko.github.io/blog-images/r/075/done.jpg) 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 | ![安装 hexo-tag-bilibili](https://mogeko.github.io/blog-images/r/005/install_hexo-tag-bilibili.png) 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 | ![回形针手册](https://mogeko.github.io/blog-images/r/061/ipaperclip.net.png) 29 | 30 | ## 官方介绍 31 | 32 | {{< bilibili 89262219 >}} 33 | 34 | ## LT;DR 35 | 36 | **回形针手册是一本涵盖了日常生活所涉及方方面面的百科手册。** 37 | 38 | 回形针手册在国民经济行业分类的基础上设置了 **1415 个条目,并分为 20 个一级条目,95 个二级条目,472 个三级条目**。 39 | 40 | 1415 个条目看起来似乎并不多,但你能想到的一切几乎都在这了。 41 | 42 | ![1415 个条目](https://mogeko.github.io/blog-images/r/061/introduction_1.jpg) 43 | 44 | 与其他百科不同的是,**回形针手册更像是一个“行业数据库”**。回形针手册会在每个条目中研究这个行业的结构、技术、原材料,整理国家标准、行业报告和企业财报,以此来帮助你了解一个行业的图景,理解这个世界的运作方式。 45 | 46 | 目前回形针手册已经完成了 60 个条目的基础编辑,但还远远不够。**回形针手册需要得到更多人的帮助**,因此回形针手册采用了类似于 Wiki 百科一样的机制,任何人都可以编辑回形针手册的任何一个条目 47 | 48 | ![编辑条目](https://mogeko.github.io/blog-images/r/061/introduction_2.png) 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 | ![CC0](https://mogeko.github.io/blog-images/r/061/introduction_3.jpg) 57 | 58 | 另外需要注意的是,**虽然回形针手册具有很强的公益性质,但仍然是属于一种商业行为。** 59 | 60 | ![干燥工厂](https://mogeko.github.io/blog-images/r/061/introduction_4.jpg) 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 | ![LeftValues](https://mogeko.github.io/blog-images/r/081/LeftValues_logo.png) 46 | 47 | 顺便安利一个测你在左翼意识形态图谱中的位置的左派测试: [LeftValues](https://leftvalues.github.io/index.html) 48 | 49 | 我也不知道是否科学,但我测出来主观感觉还是挺准的 50 | 51 | ![LeftValues Screenshot](https://mogeko.github.io/blog-images/r/081/LeftValues_screenshot.png) 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 | ![LeftValues Results](https://mogeko.github.io/blog-images/r/081/LeftValues_results.png) 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 | ![Inoreader](https://mogeko.github.io/blog-images/r/008/inoreader.png) 37 | 38 | 打开 [Reabble](https://reabble.com/),点击 `用 Inoreader 帐号登录`,用刚才注册的 Inoreader 帐号登录 Reabble。 39 | 40 | ![Reabble](https://mogeko.github.io/blog-images/r/008/reabble_1.png) 41 | 42 | 在这里,你刚刚订阅的文章都会显示出来 43 | 44 | ![Reabble](https://mogeko.github.io/blog-images/r/008/reabble_2.png) 45 | 46 | **确认没有问题后访问 ,得到 12 个字母的登录码**。 47 | 48 | ![Reabble](https://mogeko.github.io/blog-images/r/008/reabble_3.png) 49 | 50 | 打开你的 Kindle 主屏右上角的菜单,选择 `体验版网页浏览器` 并打开网页 `reabble.com/login`,点 `登录` 按钮,用上刚刚得到的登录码登录。 51 | 52 | ![Reabble](https://mogeko.github.io/blog-images/r/008/reabble_4.png) 53 | 54 | ![Reabble](https://mogeko.github.io/blog-images/r/008/reabble_5.png) 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 | ![Logo](https://mogeko.github.io/blog-images/r/055/logo.jpg) 15 | 16 | 这是第多少此死亡,又是多少次被复活我早已记不清了... 17 | 18 | 来这小岛已经有几个月了;也许几年?我不太清楚,无数次的死亡与复活好像有点影响我的记忆。但我清楚的是我必须要找到公主! 19 | 20 | 我不太清楚公主是否在这岛上,好吧我根本不知道公主是死是活!但这又又什么关系呢?如果没有公主,如果没有公主,那我无数次的重生又是为了什么呢?每次想到这里都有点心酸。无论如何,我只能踏遍这岛的每一寸土地,找到她,然后离开这儿... 21 | 22 |
23 | 24 | 离开避难所,我来到了那栋直插云霄的巨大城堡,听说那上面有龙。公主会在那里吗?童话里不都是说巨龙会撸走公主的吗? 25 | 26 | ![Kraekan Wyrm](https://mogeko.github.io/blog-images/r/055/Kraekan-Wyrm.jpg) 27 | 28 | 看来童话里果然是骗人的,这里什么也没有,除了满地的盐。 29 | 30 |
31 | 32 | 好在我遇上了“同路人”,一个盗贼。与我不同的是她是主动来到了这岛上的,为了完成什么任务?不过这都不是我应该关心的。我向她打听公主的下落,她却嘲笑我和屠龙者一样愚蠢,但她提醒我,这个岛的地下可能有你想找的答案。 33 | 34 | ![Despondent Thief](https://mogeko.github.io/blog-images/r/055/despondent_thief.jpg) 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 | ![The Nameless God](https://mogeko.github.io/blog-images/r/055/The-Nameless-God.jpg) 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 | [![Mogeko`s Blog](https://github.com/Mogeko/Blog/workflows/Mogeko%60s%20Blog/badge.svg?event=push)](https://mogeko.github.io) 4 | [![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-blue)](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode) 5 | [![Hugo](https://img.shields.io/badge/Power%20by-Hugo-%23ff4088)](https://gohugo.io/) 6 | [![theme](https://img.shields.io/badge/Theme-zzo-blueviolet)](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 | [![Mogeko`s Blog](https://github.com/Mogeko/Blog/workflows/Mogeko%60s%20Blog/badge.svg?event=push)](https://mogeko.github.io) 4 | [![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-blue)](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode) 5 | [![Hugo](https://img.shields.io/badge/Power%20by-Hugo-%23ff4088)](https://gohugo.io/) 6 | [![theme](https://img.shields.io/badge/Theme-zzo-blueviolet)](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 | Created by potrace 1.14, written by Peter Selinger 2001-2017 -------------------------------------------------------------------------------- /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 | ![USER&PASSWD](https://mogeko.github.io/blog-images/r/072/user_passwd.jpg) 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 | ![Chrome DevTools](https://mogeko.github.io/blog-images/r/033/devtools.png) 42 | 43 | 然后记录下与预订位置邻近的 **DOM** 的 `class` 的值。 44 | 45 | 打开 **VSCode**,利用「搜索」定位刚刚查找到到 `class` 值的位置。 46 | 47 | ![VSCode](https://mogeko.github.io/blog-images/r/033/vscode.png) 48 | 49 | 再在合适的位置中插入以下代码: 50 | 51 | ```html 52 | , {{ .WordCount }} words 53 | ``` 54 | 55 | 然后再在 **Chrome** 中查看效果。 56 | 57 | ## 统计字数不正确 58 | 59 | 一打开 **Chrome** 懵逼了。我辛辛苦苦码了这么久才 69 个字???{{< spoiler >}}你豁鬼哦!!(╯‵□′)╯︵┴─┴{{< /spoiler >}} 60 | 61 | ![bug](https://mogeko.github.io/blog-images/r/033/bug.png) 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 | ![fix_bug](https://mogeko.github.io/blog-images/r/033/fix_bug.png) 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 | ![on_premise_&_cloud](https://mogeko.github.io/blog-images/r/076/on_premise_&_cloud.png) 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 | ![openstack_vip](https://mogeko.github.io/blog-images/r/076/openstack_vip1.jpg) 51 | 52 | ![openstack_vip](https://mogeko.github.io/blog-images/r/076/openstack_vip2.jpg) 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 | ![Infrastructure](https://mogeko.github.io/blog-images/r/074/infrastructure.png) 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 | ![microsoft-store.bili.web](https://mogeko.github.io/blog-images/r/088/microsoft-store.bili.web.png) 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 | ![microsoft-store.bili](https://mogeko.github.io/blog-images/r/088/microsoft-store.bili.png) 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 | ![microsoft-store.bili.bg](https://mogeko.github.io/blog-images/r/088/microsoft-store.bili.bg.png) 69 | 70 | 我们可以看到,搜索结果的第二行 `60520B029E250.4264454043325_1.3.11.0_neutral_~_5aa7k9th7aafp.msixbundle` (注意区分 `.msixbundle`和 `.emsixbundle`) 就是我们要找的结果,点击下载它。 71 | 72 | 然后双击安装。 73 | 74 | ![bili.installer](https://mogeko.github.io/blog-images/r/088/bili.installer.png) 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 | ![Update Manager](https://mogeko.github.io/blog-images/r/009/Upgrade_1.png) 35 | 36 | 选择更新选项卡 (Updates),然后在窗口底部,将通知设置从 “长期支持版本”(For long-term support version) 更改为任何新版本 (For any new version)。 37 | 38 | ![Update Manager](https://mogeko.github.io/blog-images/r/009/Upgrade_2.png) 39 | 40 | 等了一会儿,系统会通知你有新的发行版可用 41 | 42 | ![New Distribution](https://mogeko.github.io/blog-images/r/009/Upgrade_3.png) 43 | 44 | - 如果不想等,可以在命令行中输入命令: 45 | 46 | ```shell 47 | sudo do-release-upgrade -d 48 | ``` 49 | 50 | 这个命令可以强制搜索新的版本 51 | 52 | 然后输入您的密码。 出现发行说明窗口。 点击升级(Upgrade)。 53 | 54 | ![New Distribution](https://mogeko.github.io/blog-images/r/009/Upgrade_4.png) 55 | 56 | 现在只需要等升级就可以了,升级完成后会自动重启。 57 | 58 | ![Upgrade](https://mogeko.github.io/blog-images/r/009/Upgrade_5.png) 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 | ![top-scroll-bar](https://mogeko.github.io/blog-images/r/070/top-scroll-bar_1.png) 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 | ![Login in](https://mogeko.github.io/blog-images/r/057/login.png) 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 | ![asciinema auth](https://mogeko.github.io/blog-images/r/057/auth_1.png) 120 | 121 | 使用浏览器打开它即可链接到你的账户上 122 | 123 | ![asciinema auth](https://mogeko.github.io/blog-images/r/057/auth_2.png) 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 | ![Nobody knows BitTorrent better than me](https://user-images.githubusercontent.com/26341224/212406399-1cfe8fd4-1536-4dfd-a121-489b356b30b3.jpg) 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 | ![安装 Hexo Hey](https://mogeko.github.io/blog-images/r/004/install_hexo_hey.png) 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 | ![Hexo Hey](https://mogeko.github.io/blog-images/r/004/hexo_hey.png) 64 | 65 | ## 一些问题 66 | 67 | 1. 不能自动保存(隔壁 Hexo Admin 就没这毛病),也不能用 `ctrl + S` 的快捷键保存文章。 68 | 2. 有篇文章没有 `编辑` 按钮。(难道是因为我在文章中用了 ‘华丽的分界线’( ̄△ ̄;)) 69 | ![Bug!](https://mogeko.github.io/blog-images/r/004/bug_1.png) 70 | 3. **图片管理非常不友好!!!虽然可以通过托拽插入图片,但此方法插入的图片都保存在 \source\images 文件夹下,这与官方推荐的方法不同。**(官方推荐的方法是将图片放入与文章同名的资源文件夹中) 71 | 4. **Hexo Hey 的 Markdown 渲染引擎无法识别 Hexo 中的标签插件** 72 | ![Bug!](https://mogeko.github.io/blog-images/r/004/bug_2.png) 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 | ![OCTOPATH_TRAVELER_2022_1_10_17_14_25](https://mogeko.github.io/blog-images/r/089/OCTOPATH_TRAVELER_2022_1_10_17_14_25.png) 30 | 31 | 在**柏达弗尔 -宅邸前-**与**阿尔法丝**对话,开启任务。 32 | 33 | ![OCTOPATH_TRAVELER_2022_1_10_17_22_51](https://mogeko.github.io/blog-images/r/089/OCTOPATH_TRAVELER_2022_1_10_17_22_51.png) 34 | 35 | 然后使用[剑士]或[猎人]的技能与**阿尔法丝**战斗。 36 | 37 | ![OCTOPATH_TRAVELER_2022_1_10_17_23_07](https://mogeko.github.io/blog-images/r/089/OCTOPATH_TRAVELER_2022_1_10_17_23_07.png) 38 | 39 | 胜利,完成任务。 40 | 41 | ![OCTOPATH_TRAVELER_2022_1_10_17_24_35](https://mogeko.github.io/blog-images/r/089/OCTOPATH_TRAVELER_2022_1_10_17_24_35.png) 42 | 43 | ## 命中注定之人(2) 44 | 45 | - 前置条件:[命中注定之人(1)](#命中注定之人1) 46 | - 队伍:[赛拉斯 (学者)][学者] 或 [亚芬 (药师)][药师] 47 | - NPC: 48 | 1. 莉布拉克 49 | 2. 阿尔法丝 50 | 3. 芙萝拉 51 | - 地图:圣特布里吉 -> 圣特布里吉 -上游- 52 | 53 | --- 54 | 55 | 在完成前置任务后,来到**圣特布里吉**。 56 | 57 | ![OCTOPATH_TRAVELER_2022_1_10_17_27_57](https://mogeko.github.io/blog-images/r/089/OCTOPATH_TRAVELER_2022_1_10_17_27_57.png) 58 | 59 | 一直往左走,在木桥上与**莉布拉克**对话,开启任务。 60 | 61 | ![OCTOPATH_TRAVELER_2022_1_10_17_28_21](https://mogeko.github.io/blog-images/r/089/OCTOPATH_TRAVELER_2022_1_10_17_28_21.png) 62 | ![OCTOPATH_TRAVELER_2022_1_10_17_29_12](https://mogeko.github.io/blog-images/r/089/OCTOPATH_TRAVELER_2022_1_10_17_29_12.png) 63 | 64 | 然后对**阿尔法丝**使用[学者]或[药师]的技能。获得「阿尔法丝之诗」。 65 | 66 | ![OCTOPATH_TRAVELER_2022_1_10_17_29_43](https://mogeko.github.io/blog-images/r/089/OCTOPATH_TRAVELER_2022_1_10_17_29_43.png) 67 | ![OCTOPATH_TRAVELER_2022_1_10_17_30_11](https://mogeko.github.io/blog-images/r/089/OCTOPATH_TRAVELER_2022_1_10_17_30_11.png) 68 | 69 | 在**圣特布里吉 -上游-**的教堂门前,将「阿尔法丝之诗」交给**芙萝拉**。 70 | 71 | ![OCTOPATH_TRAVELER_2022_1_10_17_31_26](https://mogeko.github.io/blog-images/r/089/OCTOPATH_TRAVELER_2022_1_10_17_31_26.png) 72 | ![OCTOPATH_TRAVELER_2022_1_10_17_31_50](https://mogeko.github.io/blog-images/r/089/OCTOPATH_TRAVELER_2022_1_10_17_31_50.png) 73 | 74 | 任务完成。 75 | 76 | ![OCTOPATH_TRAVELER_2022_1_10_17_32_03](https://mogeko.github.io/blog-images/r/089/OCTOPATH_TRAVELER_2022_1_10_17_32_03.png) 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 | ![Add site](https://mogeko.github.io/blog-images/r/056/add-site.png) 43 | 44 | 添加好后选择免费的那个计划 (Plan),有钱也可以选择收费的,提供的服务更多。 45 | 46 | ![Free Plan](https://mogeko.github.io/blog-images/r/056/free-plan.png) 47 | 48 | 然后 Cloudflare 会读取你的 DNS 配置,没有问题的话直接点 `Continue` 即可。 49 | 50 | ![DNS Config](https://mogeko.github.io/blog-images/r/056/dns-config.png) 51 | 52 | 然后 Cloudflare 会要求你将你的 DNS 服务器替换成他提供的,到你的域名商那里设置一下即可 (添加或替换均可) 53 | 54 | ![Change DNS Server](https://mogeko.github.io/blog-images/r/056/change-dns-server.png.png) 55 | 56 | 等几分钟,等到它显示 `Great news! Cloudflare is now protecting your site` 就说明设置成功了。 57 | 58 | ![Success](https://mogeko.github.io/blog-images/r/056/success.png) 59 | 60 | ## 设置 SSL 证书 61 | 62 | 除了免费的 DNS 和 CDN 以外,Cloudflare 还提供了免费的 SSL 证书。 63 | 64 | Cloudflare 的 SSL 证书默认是已经开启了的。不过最好还是在 `Crypto` 页面将 `Always Use HTTPS` 勾选上,这个选项可以自动在访问你的网站时将所有的 `http` 的链接重定向到相应的 `https` 链接上。 65 | 66 | ![Always Use HTTPS](https://mogeko.github.io/blog-images/r/056/always-use-https.png) 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 站允许使用 `
45 | {{ else }} 46 |
47 | {{ end }} 48 | ``` 49 | 50 | 其实这样就已经可以用了,不过很难用,因为插的播放器的窗口默认很小,先不说能不能看清视频里的字,光是美观问题都已经能逼得博主们想打人了。 51 | 52 | 所以我们需要用 CSS 修改播放器的尺寸,最好能根据不同的屏幕大小 (PC 和手机) 动态调整。 53 | 54 | 所以我们在 `/assets/css/_common/_partials/post.scss` (每个主题的不一样) 中插入 55 | 56 | ```css 57 | // 嵌入 BiliBili 视频 58 | #bilibili { 59 | width: 100%; 60 | height: 550px; 61 | } 62 | @media only screen and (min-device-width: 320px) and (max-device-width: 480px) { 63 | #bilibili { 64 | width: 100%; 65 | height: 250px; 66 | } 67 | } 68 | ``` 69 | 70 | 如果你实在是不知道你的主题的 CSS 文件在哪儿,也可以直接往 `layouts/shortcodes/bilibili.html` 里写 71 | 72 | ```html 73 | 86 | ``` 87 | 88 | 然后就可以用了! 89 | 90 | ### 用法 91 | 92 | 用法就是在你想插入 B 站视频的地方写下 (AV号**不**带 `av/AV`,BV号**必须**带`bv/BV`,PV号控制分P,默认为 `1`) 93 | 94 | ```markdown 95 | {{}} 96 | ``` 97 | 98 | 就比如我想插入 B 站视频:[av2271112](https://www.bilibili.com/video/av2271112) 99 | 100 | 我只需要 101 | 102 | ```markdown 103 | {{}} 104 | ``` 105 | 106 | 或者 107 | 108 | ```markdown 109 | {{}} 110 | ``` 111 | 112 | {{< bilibili 2271112 >}} 113 | -------------------------------------------------------------------------------- /content/posts/zh-cn/045.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "扁平宝箱插画" 3 | date: 2019-01-23T20:05:01+08:00 4 | draft: false 5 | tags: ["Adobe Illustrator"] 6 | categories: ["Adobe Illustrator 入门"] 7 | --- 8 | 13 | 14 | ![扁平宝箱图形](https://mogeko.github.io/blog-images/r/045/Treasure.svg) 15 | 16 | 原图:[Treasure.ai](https://mogeko.github.io/blog-images/r/045/Treasure.ai) 17 | 18 | ## 以下是使用到的颜色 19 | 20 | 据说黑暗模式下体验更佳哦 |・ω・`) 21 | 22 |
23 | 宝箱: 24 |
25 | ▉ #FFB024 26 | ▉ #EB9558 27 | ▉ #FFC444 28 | ▉ #ED6011 29 | ▉ #7C2752 30 | ▉ #542246 31 | ▉ #CC365D 32 | ▉ #7E2A55 33 | ▉ #FFE59C 34 | ▉ #FC5454 35 |
36 |
37 |
38 | 宝石: 39 |
40 | ▉ #AF629D 41 | ▉ #FFFFFF 42 | ▉ #FC5454 43 | ▉ #CC365D 44 |
45 |
46 |
47 | 小星星: 48 |
49 | ▉ #FFC444 50 | ▉ #FFFFFF 51 |
52 |
53 |
54 | 背景: 55 |
56 | ▉ #542246 57 |
58 |
59 | ## 然后以下是画图的具体步骤 60 | 61 | 来源:[【零基础学Ai教程】扁平宝箱图形](https://www.zcool.com.cn/article/ZODU5MTcy.html) 62 | 63 | 作者:[Ai肖博士](https://www.zcool.com.cn/u/14824754) 64 | 65 | ![000](https://mogeko.github.io/blog-images/r/045/000.jpg) 66 | 67 | ![001](https://mogeko.github.io/blog-images/r/045/001.jpg) 68 | 69 | ![002](https://mogeko.github.io/blog-images/r/045/002.jpg) 70 | 71 | ![003](https://mogeko.github.io/blog-images/r/045/003.jpg) 72 | 73 | ![004](https://mogeko.github.io/blog-images/r/045/004.jpg) 74 | 75 | ![005](https://mogeko.github.io/blog-images/r/045/005.jpg) 76 | 77 | ![006](https://mogeko.github.io/blog-images/r/045/006.jpg) 78 | 79 | ![007](https://mogeko.github.io/blog-images/r/045/007.jpg) 80 | -------------------------------------------------------------------------------- /content/posts/zh-cn/030.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "subliminal | 电影字幕下载神器" 3 | date: 2018-11-21T09:39:26+08:00 4 | draft: false 5 | tags: ["Tools"] 6 | categories: ["关于软件"] 7 | --- 8 | 13 | 14 | [**subliminal**](https://github.com/Diaoul/subliminal) 是一个基于 Python 的强大的命令行字幕搜索和下载工具。 15 | 16 | 最先知道 **subliminal** 是因为 **MPV** 播放器。配合插件 [**find_subtitles.lua**](https://github.com/directorscut82/find_subtitles/blob/master/find_subtitles.lua) 使用,在载入视频的同时搜索并下载中文字幕,简直天衣无缝。不过有的视频的文件名不是那么标准的话,就不一定能匹配得到合适的字幕。解决方法除了改文件名以外,还可以用 **subliminal** 手动搜索。 17 | 18 | **subliminal** 使用多个字幕网站做为数据源,包括世界上最大的开放式字幕库 [opensubtitles](http://opus.nlpl.eu/OpenSubtitles.php) 19 | 20 | {{< spoiler >}}不幸的是,有几个字幕站被墙了,比如 podnapisi, legendastv, shooter…{{< /spoiler >}} 21 | 22 | 23 | 24 |
25 | 26 | GitHub 地址: 27 | 28 |
29 | 30 | ![subliminal](https://mogeko.github.io/blog-images/r/030/subliminal.png) 31 | 32 | ## 依赖 33 | 34 | - python2 35 | 36 | ## 安装 37 | 38 | 首先安装 `python2` 和 `pip` 39 | 40 | 然后在终端中输入: 41 | 42 | ```shell 43 | pip install subliminal 44 | ``` 45 | 46 | ## 使用 47 | 48 | 在终端中输入: 49 | 50 | ```shell 51 | subliminal download -l zh [电影名称] 52 | ``` 53 | 54 | 例如,如果要下载「低俗小说」的字幕: 55 | 56 | ```shell 57 | subliminal download -l zh Pulp.Fiction.1994.720p.BluRay.DTS.x264-ESiR 58 | ``` 59 | 60 | ![return](https://mogeko.github.io/blog-images/r/030/return.png) 61 | 62 | 部分字幕文件: 63 | 64 | ```txt 65 | 2 66 | 00:00:14,480 --> 00:00:18,850 67 | 柔軟潮濕的物體 68 | 69 | 3 70 | 00:00:18,980 --> 00:00:24,610 71 | 低級趣味、印刷簡陋的書刊 72 | 73 | 4 74 | 00:00:27,620 --> 00:00:31,590 75 | 算了 太冒險了 我不幹 76 | 77 | 5 78 | 00:00:31,590 --> 00:00:34,080 79 | 你每次都這樣說 80 | 81 | 6 82 | 00:00:34,460 --> 00:00:36,890 83 | 太危險了…我不幹了… 84 | 85 | 7 86 | 00:00:37,060 --> 00:00:39,530 87 | 我哪一次說錯? 88 | ``` 89 | 90 | 居然是繁体,不过我一般遇到的都是简体中文的,而且繁体也不是不能看🤔 91 | 92 |
93 | 94 | 命令中的 `-l` 指定下载的字幕语言,例如要下载英语字幕: 95 | 96 | ```shell 97 | subliminal download -l cn Pulp.Fiction.1994.720p.BluRay.DTS.x264-ESiR 98 | ``` 99 | 100 | ## 脚本 101 | 102 | 除了手动输入命令行外,还可以使用脚本 Python 脚本。例如下面这个脚本就可以自动下载目录中视频文件对应的字幕: 103 | 104 | ```python 105 | from datetime import timedelta 106 | 107 | from babelfish import Language 108 | from subliminal import download_best_subtitles, region, save_subtitles, scan_videos 109 | 110 | # configure the cache 111 | region.configure('dogpile.cache.dbm', arguments={'filename': 'cachefile.dbm'}) 112 | 113 | # scan for videos newer than 2 weeks and their existing subtitles in a folder 114 | videos = scan_videos('/video/folder', age=timedelta(weeks=2)) 115 | 116 | # download best subtitles 117 | subtitles = download_best_subtitles(videos, {Language('eng'), Language('fra')}) 118 | 119 | # save them to disk, next to the video 120 | for v in videos: 121 | save_subtitles(v, subtitles[v]) 122 | ``` 123 | 124 | 还有配合 **MPV** / **GNOME MPV** 播放器使用的脚本:[**find_subtitles.lua**](https://github.com/directorscut82/find_subtitles/blob/master/find_subtitles.lua)  [关于 GNOME MPV 播放器](https://mogeko.github.io/2018/029) 125 | 126 | 需要注意的是 **find_subtitles.lua 默认下载的是英文字幕,下载中午字幕需要在脚本中将 38 行的 `en` 替换换成 `zh`**。如果你觉得麻烦的话,可以使用我[修改过的版本](https://github.com/Mogeko/blog-commits/releases/download/029/find_subtitles.lua)。 127 | -------------------------------------------------------------------------------- /content/posts/zh-cn/022.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "空洞骑士:格林剧团 DLC 全成就指南" 3 | date: 2018-09-30T21:06:00+08:00 4 | draft: false 5 | tags: ["第九艺术", "Steam 指南备份", "轻松休闲的空洞骑士"] 6 | categories: ["关于第九艺术"] 7 | image: https://mogeko.github.io/blog-images/r/022/logo.jpg 8 | --- 9 | 10 | {{< featuredImage >}} 11 | 12 | 补一篇格林剧团 DLC 的全成就指南 13 | 14 | 「格林剧团」的难度相较于「寻神者」和主线剧情要简单得多,属于比较容易完成的 DLC。但「格林剧团」采用的是双结局,而且结局是与获得成就直接相关的,因此「格林剧团」的所有成就不可能在同一个存档中完成。 15 | 16 | 解决方法: 17 | 18 | 1. 开两个存档 19 | 2. 备份存档然后回档 -> [「空洞骑士」存档备份方法](https://mogeko.github.io/2018/021) 20 | 21 | 22 | 23 | ## 开启方法 24 | 25 | 在「呼啸悬崖」的隐藏洞穴里,你会发现一只大虫子的尸体,对着它来一发「梦之钉」便可开启「格林剧团」 26 | 27 | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910129642756/5712015F9CCD8E9DD2CD9541047C68214624F047/) 28 | 29 | ## 全成就指南 30 | 31 | | 图标 | 成就 | 32 | | ------------------------------------------------------------ | ------------------------------------------------------------ | 33 | | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910129657351/982F6BD69415E06696E2FC414BC595700663AB37/) | **盛大演出
**先完成「格林」布置的两次任务,然后在剧团打败「格林」 | 34 | | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910129658013/11A174017FA3BAA8169C362C0740DEABABB5C241/) | **仪式**:**结局一**
打败「格林」后,完成「格林」布置的第三次任务,然后在剧团打败「梦魇之王」 | 35 | | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910129658378/D08C26C6B6B675DC3135B43FDD124EEC41E351F6/) | **驱逐**:**结局二
**打败「格林」后,到「深邃巢穴」去找「布鲁姆」,
「布鲁姆」会劝你和他一同反抗团长「格林」;
然后到「呼啸悬崖」(开启「格林剧团」的地方) 与 「布鲁姆」一起毁掉 「梦魇之灯」 | 36 | 37 | **因为是双结局,所以「仪式」和「驱逐」不能在同一个存档中完成** 38 | 39 | ## 新增护符 40 | 41 | 格林剧团 DLC 新增了 5 个新的护符 (其实是 4 个,有两个护符只能 2 选 1) 42 | 43 | | 护符37:梦之盾 | 44 | | :----------------------------------------------------------: | 45 | | 在「安息之地」的隐藏房间里获得 | 46 | | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910129753822/ECF24E7F5328A152EB5E879BE81601AEADFF32C9/) | 47 | 48 | | 护符38:编织者之歌 | 49 | | :----------------------------------------------------------: | 50 | | 在「深邃巢穴」里获得 | 51 | | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910129763750/E91FD4677E0E428FC133FC57CE350A527A8181B8/) | 52 | 53 | | 护符39:飞毛腿 | 54 | | :----------------------------------------------------------: | 55 | | 找到「店主的钥匙」后,在「德特茅斯」的城镇商人处购买 (400 吉欧) | 56 | 57 | | 护符40:格林之子 | 58 | | :----------------------------------------------------------: | 59 | | 开启格林剧团后,在「格林」处获取
如果完成**结局二** (放逐结局),此护符会丢失 | 60 | 61 | | 护符41:无忧旋律 | 62 | | :----------------------------------------------------------: | 63 | | 完成**结局二**(放逐结局) 后,在「德特茅斯」的长椅附近与「布鲁姆」对话获得 | 64 | 65 | 「格林之子」与「无忧旋律」分别对应两个结局,无法同时获得** 66 | 67 | ## 坚固护符 68 | 69 | 开启格林剧团后,可以 (佩戴上易碎护符) 找格林剧团的「迪万」花吉欧将「易碎贪婪」、「易碎心脏」和「易碎力量」升级成对应的坚固护符 (死亡后不损坏) 70 | 71 | 花费: 72 | 73 | - 易碎贪婪 -> 坚固贪婪 9000 吉欧 74 | - 易碎心脏 -> 坚固心脏 12000 吉欧 75 | - 易碎力量 -> 坚固力量 15000 吉欧 76 | 77 | 完成结局二 (驱逐结局) 后,「迪万」会消失 78 | 79 | 完成结局一 (仪式结局) 则不会 80 | 81 | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910129970560/D978E5F63B3819C2A361DA2DB2343E82EEC7BFDC/") 82 | 83 | --- 84 | 85 | 原文地址:[格林剧团 DLC 全成就指南 | Steam 社区](https://steamcommunity.com/sharedfiles/filedetails/?id=1526799965) 86 | 87 | 作者:果然是 Mogeko (づ> ω <)づ♡ 88 | -------------------------------------------------------------------------------- /content/posts/zh-cn/066.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "使用 ImgBot 无损压缩博客中的图片" 3 | date: 2019-05-19T01:16:34+08:00 4 | draft: false 5 | tags: [] 6 | categories: ["折腾博客的二三事"] 7 | --- 8 | 13 | 14 | 众所周知,GitHub 是最好的博客平台(误 15 | 16 | 像我一样的很多人都喜欢用 GitHub Pages 来部署自己的博客。而博客中难免会有很多的图片文件,而图片往往比纯字符组成的文档大得多,这可能会成为拖慢网站加载时间的重要诱因。为了解决这一问题,很多人会选择使用图床或者国内的 CDN,但这些方案都存在着各种各样的问题 (公共图床可能不稳定,私人图床和 CDN 都需要在公安局备案过的个人域名)。而且这样方案都是将提供图片的服务器搬到了国内,用户加载图片所消耗的流量仍然是原来那么多。 17 | 18 | 今天我就换一种思路来缓解这一问题:**通过无损压缩在不减少图片质量的前提下减少图片的大小,从而实现加快加载速度减少流量消耗的目的。** 19 | 20 | 这一思路实现起来并不难,晚上也有很多无损压缩图片的软件或者网站,难的是让压缩图片这一过程自动化完成。今天介绍的这个服务是我目前找到的最方便最自动的免费方案了。 21 | 22 | ## 关于 ImgBot 23 | 24 | 今天的主角叫做 [ImgBot](https://imgbot.net),是一个无损压缩图片的服务。 25 | 26 | ![ImgBot Logo](https://mogeko.github.io/blog-images/r/066/imgbot_logo.png) 27 | 28 | 它最厉害的地方在于它可以无缝的与 GitHub 集成在一起,只需要在 [GitHub Market](https://github.com/marketplace/imgbot) 上添加了这个服务,ImgBot 就会自动递归扫描并压缩你的所以仓库中的图片文件,然后给你提一个 PR,当你确认无误后,将 PR 合并到相关分支上即可。 29 | 30 | 也就是说,你只需要检查并合并分支即可,剩下的事情都交给 ImgBot 来做。 31 | 32 | ## 安装 ImgBot 33 | 34 | 因为我已经安装了 ImgBot 了,所以文字与截图上的可能有点出入 35 | 36 | 首先来到 [GitHub Market](https://github.com/marketplace/imgbot),点击 `Set up a free trial` 37 | 38 | ![GitHub Market](https://mogeko.github.io/blog-images/r/066/github_market.png) 39 | 40 | 然后选择 `Open Source` (也就是免费的那个方案),然后点击 `Install it for free` 41 | 42 | ![Choose Plan](https://mogeko.github.io/blog-images/r/066/choose_plan.png) 43 | 44 | 检查一下订单,点击 `Complete order and begin installation` 45 | 46 | ![Review your order](https://mogeko.github.io/blog-images/r/066/review_order.png) 47 | 48 | 确认一下 ImgBot 可以访问的仓库 (默认 All),以及授予给 ImgBot 的权限,点击 `Install` 49 | 50 | ![Install](https://mogeko.github.io/blog-images/r/066/install.png) 51 | 52 | 看到这个页面就说明 ImgBot 服务已经成功的安装到你的 GitHub 账户上了 53 | 54 | ![Install Succses](https://mogeko.github.io/blog-images/r/066/install_succese.png) 55 | 56 | ## 使用 ImgBot 压缩图片 57 | 58 | 将 ImgBot 服务安装到你的 GitHub 账户上后,ImgBot 就会自动递归寻找并压缩 Git 仓库中的图片文件 (如果图片比较多,这一步可能回花费几天的时间),压缩好后会向你提一个像这样的 PR 59 | 60 | ![Pull request](https://mogeko.github.io/blog-images/r/066/pr_exm.png) 61 | 62 | 你可以点开 `Datails` 查看压缩前后大小、压缩率等细节,确认无误后,点击 `Merge pull request` 开始合并 63 | 64 | ![Merge pull request](https://mogeko.github.io/blog-images/r/066/merge_pull_request.png) 65 | 66 | 输入 commit 信息,点击 `Confirm merge` 67 | 68 | ![Confirm merge](https://mogeko.github.io/blog-images/r/066/confirm_merge.png) 69 | 70 | 看到以下信息就说明合并成功了 71 | 72 | ![Marge Succes](https://mogeko.github.io/blog-images/r/066/marge_succes.png) 73 | 74 | 至此,图片压缩完毕 75 | 76 | ## 设置 ImgBot 77 | 78 | 根据 [ImgBot 的官方文档](https://imgbot.net/docs),我们可以通过在 Git 仓库的根目录下放置配置文件 `.imgbotconfig` 来设置 ImgBot 79 | 80 | 目前有三个配置项: 81 | 82 | - 提交 PR 的频率:`"schedule"` 83 | - 选项:`daily` | `weekly` | `monthly` 84 | - 排除的文件:`"ignoredFiles"` 85 | - 选项:被排除文件的路径,支持通配符`*` 86 | 87 | - 是否使用有损压缩方式 (压缩率更高):`"aggressiveCompression"` 88 | - 选项:`true` | `false` 89 | 90 | 以下是较为完整的例子: 91 | 92 | ```json 93 | { 94 | "schedule": "daily", // daily|weekly|monthly 95 | "ignoredFiles": [ 96 | "*.jpg", // ignore by extension 97 | "image1.png", // ignore by filename 98 | "public/special_images/*", // ignore by folderpath 99 | ], 100 | "aggressiveCompression": "true" // true|false 101 | } 102 | ``` 103 | 104 | 更多详情请参考 [ImgBot 的官方文档](https://imgbot.net/docs) 105 | -------------------------------------------------------------------------------- /content/posts/zh-cn/001.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "UAC 白名单" 3 | date: 2017-08-18 4 | draft: false 5 | tags: ["Windows"] 6 | categories: ["生命不息 折腾不止"] 7 | --- 8 | 9 | 好像废话有点多\_(:з)∠)\_ ->-> [直接开始的传送门](#Start) 10 | 11 | 一直觉得微软为 Windows 引入 UAC 是个明智的选择,它能在一定程度上减少 Windows 平台过于开放,流氓软件肆意横行的局面。 12 | 国内的情况比较特殊,因为很多人根本不知道那是什么,无脑点 “允许” 。 13 | 都是被那群流氓给教坏的。。。 14 | 抛开这些不谈,即使 UAC 的使用很有必要,但每次都弹出的蓝色框框确实很烦人,特别是在那些需要曾经使用管理员权限的软件上。因此,有的人直接选择关闭 UAC ,不过这样却对系统安全性产生了风险。 15 | 16 | 所以,如何才能在不关闭 UAC 的情况下,让某些应用不经过 UAC 使用管理员权限? 17 | 18 | 我首先想到的是使用 Autohotkey 帮用户点“允许” 19 | 桌面分为三层,分别是 Winlogon Desktop、Screensaver Desktop、Application Desktop。 20 | 所有的应用都运行在 Application Desktop 上( UAC 不算)。UAC 在 Winlogon Desktop 上弹出的窗口。 21 | 也就是说,以Autohotkey 所在的位置 UAC 它捞都捞不到。。。 22 | 23 | 那么,到底要如何干掉 UAC 呢? 24 | 25 | 经过研究发现,想要在不关闭 UAC 的情况下,让某些应用不经过 UAC 使用管理员权限有两种方法。 26 | 分别是使用 任务计划程序 或 [Application Compatibility Toolkit (ACT)](https://technet.microsoft.com/en-us/library/cc766242(v=ws.10).aspx)。 27 | 这里只解释使用 任务计划程序。 28 | 29 | 30 | 31 | ## 正文 32 | 33 | 下面正式开始。 34 | 35 | 我们以 CMD 为例。 36 | 在开始菜单找到 CMD,右键 -> 以管理员身份运行 37 | 果不其然弹出了 UAC。 38 | *上面已经解释过了,UAC 截不出来 \_(:з)∠)\_ 39 | 40 | 首先,我们打开 任务计划程序 41 | 右键 “计算机” -> 管理 -> 任务计划程序 42 | 或者 直接在 Cortana 中搜索: 任务计划程序 43 | 44 | 计划任务程序库 -> 创建任务 45 | ![添加任务计划](https://mogeko.github.io/blog-images/r/001/RunCMDAdmin_1.png) 46 | 47 | 在弹出的对话框中填写名称(名称随便取,但**一定要记住**) 48 | **勾选 ✅使用最高权限运行** 49 | ![添加任务计划](https://mogeko.github.io/blog-images/r/001/RunCMDAdmin_2.png) 50 | 51 | 操作 -> 新建 52 | ![添加任务计划](https://mogeko.github.io/blog-images/r/001/RunCMDAdmin_3.png) 53 | 54 | 点 “浏览” 找到 cmd.exe 的路径 55 | 或者直接把以下路径粘贴过去 56 | 57 | ```$:Shell 58 | C:\Windows\System32\cmd.exe 59 | ``` 60 | 61 | ![添加任务计划](https://mogeko.github.io/blog-images/r/001/RunCMDAdmin_4.png) 62 | 确认 63 | 64 | 应该能看见新建好的操作 65 | ![添加任务计划](https://mogeko.github.io/blog-images/r/001/RunCMDAdmin_5.png) 66 | 确认 67 | 68 | 现在找一下列表中有没有刚刚创建的计划任务 69 | 找到后右键 -> 运行 以确认能运行 70 | ![添加任务计划](https://mogeko.github.io/blog-images/r/001/RunCMDAdmin_6.png) 71 | 72 | 成功运行 CMD,并且是以管理员身份,而且没有弹出 UAC 73 | ![添加任务计划](https://mogeko.github.io/blog-images/r/001/RunCMDAdmin_7.png) 74 | 75 | 现在如果去菜单,双击 CMD。会以普通权限运行。 76 | 右键 -> 以管理员身份运行。依然弹出 UAC。 77 | 所以失败了吗?\_(:з)∠)\_ 78 | 79 | 其实。。。只是打开方式不对 80 | 我们到随便一个目录,右键 -> 新建 -> 快捷方式 81 | ![正确的打开方式](https://mogeko.github.io/blog-images/r/001/Shortcut_1.png) 82 | 83 | 这里的路径就不能通过 “浏览” 来找了 84 | 直接复制下面的路径粘贴过去 85 | 86 | ```$:Shell 87 | schtasks.exe /run /tn "[刚刚创建的计划任务的名称]" 88 | ``` 89 | 90 | ![正确的打开方式](https://mogeko.github.io/blog-images/r/001/Shortcut_2.png) 91 | 92 | 填上你喜欢的名字 93 | ![正确的打开方式](https://mogeko.github.io/blog-images/r/001/Shortcut_3.png) 94 | 完成 95 | 96 | 现在双击次快捷方式,就可以在不触发 UAC 的情况下以管理员身份运行了 97 | 98 | 下面就可以把次快捷方式丢到你喜欢的地方去,想以管理员身份运行 CMD 时,双击它就可以了 99 | 我一般把他放在 开始菜单 里,这样就可以从 开始菜单 或 Cortana 中启动了 100 | 按 Win键 + R,左下角会弹出一个对话框,在路径栏中粘贴(**将[你的用户名]替换为你的用户名,不确定的可以去 C:\Users\ 路径下查看**) 101 | 102 | ```$:Shell 103 | C:\Users\[你的用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\System Tools 104 | ``` 105 | 106 | ![开始菜单启动](https://mogeko.github.io/blog-images/r/001/MoveStartMenu.png) 107 | 确定 或 回车 108 | 把刚刚创建好的 快捷方式 丢进去 109 | 110 | 如果嫌快捷方式太丑,可以换图标。 111 | 右键刚刚创建的快捷方式 -> 属性 -> 更改图标 112 | ![更改图标](https://mogeko.github.io/blog-images/r/001/ReIcon_1.png) 113 | 他会提示你 “不包含图标”,点确认。 114 | 115 | ![更改图标](https://mogeko.github.io/blog-images/r/001/ReIcon_2.png) 116 | 在路径栏中键入 117 | 118 | ```$:Shell 119 | C:\Windows\System32\cmd.exe 120 | ``` 121 | 122 | 回车 列表里只有一个图标,选中它 123 | ![更改图标](https://mogeko.github.io/blog-images/r/001/ReIcon_3.png) 124 | 确认 -> 确认 125 | 126 | 这时两个 CMD 的图标就一样了,可以在 开始菜单 或 Cortana 中,按需启动。 127 | -------------------------------------------------------------------------------- /content/posts/zh-cn/011.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Android 使用 Chrome 的五个理由" 3 | date: 2017-12-04 4 | draft: false 5 | tags: ["Android"] 6 | categories: ["不知道怎么分类的分类"] 7 | image: https://mogeko.github.io/blog-images/r/011/logo.jpg 8 | --- 9 | 10 | {{< featuredImage >}} 11 | 12 | PC 上的 Chrome 毫无疑问是最好的浏览器之一。那市场份额,~~都快逼近 IE 了~~。不仅把曾经的老大哥 IE 远远的甩在后面,还把被微软委以大任的 Microsoft Edge 按在地上摩擦,弄得微软很是尴尬。然而在 Google 自家的 Android 上,发展得却不如 PC 上好,有的地方就连我这种骨粉也觉得用起来不舒服。不过,最近几次更新中,我觉得是越改越好了,特别是今天,无意中发现了几个新功能,突然打开了新世界的大门,也让我对 Chrome 的评价从 “不推荐”变成“特别推荐”! 13 | 14 | 15 | 16 | ## 理由一:信仰!!! 17 | 18 | ![Google 大法好!!!](https://mogeko.github.io/blog-images/r/011/google.png) 19 | 20 | Google 大法好! 21 | 22 | 不需要解释,谁用谁知道! 23 | 24 | 垃圾百度,吃枣药丸!!! 25 | 26 | ## 理由二:人性化的操作逻辑 27 | 28 | 发现新大陆前你要是问我,最好的手机浏览器是什么?我会毫不犹豫的回答:IE(喵喵喵???) 29 | 30 | 没错,就是那个 PC 上难得跟屎一样的 IE,不过我说的是手机浏览器(Android 和 iOS 就别想了,Windows Phone 独占) 31 | 32 | ![Internet Explorer](https://mogeko.github.io/blog-images/r/011/wp_IE11) 33 | 34 | ↑我的 Lumia 900 找不到了,图片是随便找的(好怀念当年那个在WP上用浏览器上贴吧的时代啊,结果直到我换手机,贴吧都没出 WP 版的客户端) 35 | 36 | PC 上的 IE 和 WP 上的 IE 完全是两回事,PC 上不仅界面丑,还慢得跟坨屎一样。而 WP 上,速度快,动画华丽,最主要的,是它吧地址栏(搜索栏)放在了下面!不得不说,非常棒的设计,只可惜 WP 死得太早。好在我们有 Chrome。 37 | 38 | 你 TM 逗我呢,难道 Chrome 的地址栏不在上面? 39 | 40 | ![Chrome_Old](https://mogeko.github.io/blog-images/r/011/chrome_old.png) 41 | 42 | **事实上,Google 已经重新设计了地址栏(搜索栏)的位置,只不过现在还在实验性特征中,你需要自己开启。(V59+ 的版本才支持)** 43 | 44 | ![Chrome_New](https://mogeko.github.io/blog-images/r/011/chrome_new.png) 45 | 46 | **开启方法:** 进入 `chrome://flags` 页面(在地址栏中输入 `chrome://flags`,回车)。找到并开启 `#enable-chrome-home` 和 `#ntp-google-g-in-omnibox` 两个选项。(另外,Chrome的页内搜索做的很不错。在右侧有匹配项在页内位置的显示,以及当前位置。) 47 | 48 | ![开启方法](https://mogeko.github.io/blog-images/r/011/way2open.png) 49 | 50 | 然后重启一下 Chrome 就可以了。 51 | 52 | 将地址栏移到了屏幕底部后,当我们在正常浏览网页时,底部地址栏会随着屏幕滚动而隐藏。 53 | 54 | ![随着屏幕滚动而隐藏](https://mogeko.github.io/blog-images/r/011/chrome_hide.png) 55 | 56 | 将地址栏向上拖拽,便能展开一个功能完备的新标签页。 57 | 58 | ![新标签页](https://mogeko.github.io/blog-images/r/011/chrome_new_tab_1.png) 59 | 60 | 主页 下载内容 书签 历史记录 61 | 62 | ![新标签页](https://mogeko.github.io/blog-images/r/011/chrome_new_tab_2.png) 63 | 64 | 比原来的好看到不知道哪里去了!!!而且,手小的用户终于可以够着地址栏(搜索栏)了 #(逃 65 | 66 | ## 理由三:强大的同步功能 67 | 68 | 翻墙,并安装谷歌全家桶后,Chrome 独有的优势才得以体现出来。 69 | 首先就是强大的跨平台同步。 70 | 71 | 同步功能可以有多强大呢?强大到你已经感觉不到它的存在了。 72 | 73 | 举个例子。经常,我们会遇到突然有事必须出门的情况,而网页上到文章只看了一半;放在以前,我多半会将文章保存进 Instapaper 或者 Pocket 这类“稍后阅读”的应用中,再用手机看;而现在,我只需要合上电脑,直接出门就好了。因为 Chrome 已经将我的浏览记录同步到了手机上,我只需要打开手机上的 Chrome 就可以接着看没看完的文章了。 74 | 75 | 不仅仅是历史记录,书签、表单、密码 等等都可以同步。 76 | ↓可以被 Chrome 同步的内容 77 | 78 | ![同步](https://mogeko.github.io/blog-images/r/011/chrome_sync.png) 79 | 80 | ## 理由四:与 Google 翻译的完美融合 81 | 82 | 在发现新大陆前,尽管手机上的 Chrome 那么难用,但我一直没有删它。究其原因,一方面是因为信仰的加成,而另一方面就是它与 Google 翻译完美的融合。(不仅仅是手机端,PC 上的 Chrome 也可以和 Google 翻译很好的配合) 83 | 当你打开一个非中文网页时,Chrome 默认会为你将整个网页翻译成中文。当然,你也可以设置 “不翻译这种语言”、“不翻译此网站”、翻译成其他语言 等等。 84 | 85 | ![翻译](https://mogeko.github.io/blog-images/r/011/translation_1.png) 86 | 87 | 对经常看外网的同学是个不小的福音呢。 88 | 而且这种方便不仅仅是在chrome内,对于那些调用 Chrome 的内核来打开网页的应用同样适用(比如 XDA) 89 | 90 | ![翻译](https://mogeko.github.io/blog-images/r/011/translation_2.png) 91 | 92 | ## 理由五:隐身浏览 93 | 94 | Android 上很多浏览器都支持隐身浏览,但能像 Chrome 一样把隐身浏览做得这么好的还真不多。 95 | 在 Chrome 中,你可以快速的打开一个“无痕式标签页”,这时你就已经进入了无痕模式了。在这个模式中,你浏览的网页,不会出现在历史记录中 Cookie 和搜索记录也不会被留下任何痕迹(当退出无痕模式后,一切记录和 Cookie 会被删除)。只有下载的文件和建立的书签会被保留下来。 96 | 97 | ![隐身浏览](https://mogeko.github.io/blog-images/r/011/invisible_browsing_1.png) 98 | 99 | 其实就相当于新开了一个临时的,独立的 Chrome。你在这个新的 Chrome 中干的任何事都不会对真正的 Chrome 产生影响。 100 | 另外,Chrome 还可以一键退出“隐身浏览” 101 | 102 | ![一键退出隐身浏览](https://mogeko.github.io/blog-images/r/011/invisible_browsing_2.jpg) 103 | -------------------------------------------------------------------------------- /content/posts/zh-cn/086.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Git Commit 范式" 3 | subtitle: Git Commit Conventions 4 | date: 2021-09-15T11:11:31Z 5 | draft: false 6 | tags: ["git"] 7 | categories: ["生命不息 折腾不止"] 8 | image: https://git-scm.com/images/logos/downloads/Git-Icon-1788C.png 9 | description: 10 | --- 11 | 12 | 17 | 18 | 每次提交代码时,都需要编写 Commit Message。 19 | 20 | ```shell 21 | git commit -m "hello world" 22 | ``` 23 | 24 | Commit Message 应当尽可能多的提供有用的信息,指明本次提交的目的。同时又应当简洁明了,便于阅读以及日后追踪问题。 25 | 26 | 但对于自然语言来说,同时满足“更多的信息”和“简洁明了”是个不小的挑战。 27 | 28 | 因此规范化 Commit Message 的是个不错的选项,特别是对于团队协作来说更是必要。 29 | 30 | ## 规范化 Commit 31 | 32 | 大体来说,一个规范的 Commit 可以分为三个部分:Header、Body 和 Footer。 33 | 34 | 并且每个部分间都需要用一个空行分隔。像这样: 35 | 36 | ```txt 37 | [optional scope]: 38 | 39 | [optional body] 40 | 41 | [optional footer(s)] 42 | ``` 43 | 44 | 除非他是一个[回滚提交 (Revert Commit)](#revert)。 45 | 46 | ### Header 47 | 48 | Header 部分是最基本也是最重要的。 49 | 50 | ```txt 51 | [optional scope]: 52 | ``` 53 | 54 | Header 又可以分为三个部分:`type`、`scope` 和 `description`,其中只有 `type` 和 `description` 是必须的。 55 | 56 | #### type 57 | 58 | `type` 的作用是描述这次提交的类型,例如 `feat` 表示这次提交的作用是增加一个 (或数个) 新特性 (Feature),`fix`的作用一般是修复 bug... 59 | 60 | 根据 [Angular 项目的 Commit 规范](https://github.com/angular/angular/blob/master/CONTRIBUTING.md),`type` 有且只有以下取值: 61 | 62 | - `build`: 影响构建或外部依赖项的更改 (`gulp`、`broccoli`、`npm`...) 63 | - `ci`: 对 CI 配置文件和脚本的更改 (`Circle`, `BrowserStack`, `SauceLabs`...) 64 | - `docs`: 修改文档 65 | - `feat`: 增加一个新的特性 (feature) 66 | - `fix`: 修复一个 bug 67 | - `perf`: 提到性能的代码更改 68 | - `refactor`: 既不修复错误也不添加功能的代码更改 (代码格式优化,重构等) 69 | - `test`: 添加或修改测试 70 | 71 | #### scope 72 | 73 | `scope` 不是必须的,它必须配合 `type` 使用,作用是描述这次提交影响的范围。例如: 74 | 75 | ```txt 76 | build(npm): add dependency XXX 77 | ``` 78 | 79 | ```txt 80 | docs(readme): update README.md 81 | ``` 82 | 83 | ```txt 84 | docs(changelog): update CHANGELOG.md 85 | ``` 86 | 87 | #### description 88 | 89 | `description` 就正如其名,是对此次提交的一句**简单**的描述,使用祈使句,现在时 (例如:使用 "change",而不是 "changed" 或 "changes"),一般不超过 50 个字符。不要以大写开头,并且结尾不写标点符号。 90 | 91 | {{< notice warning >}} 92 | 93 | **`description` 不要以大写开头!!** 94 | 95 | {{< /notice >}} 96 | 97 | ### Body 98 | 99 | 虽然是非必须的,但如果能写还是尽量要写。其作用是对 `description` 的补充或展开,更为详细的解释进行更改动机和原因。 100 | 101 | 你可以将先前行为与新行为进行比较,以说明更改的影响。 102 | 103 | 和 `description` 一样,使用祈使式,现在时 —— 使用 "fix",而不是 "fixed" 或 "fixes"。 104 | 105 | ### Footer 106 | 107 | Footer 可以包含有关重大更改的信息 (例如不兼容的更改等),同时也是引用或关闭 GitHub issues、Jira tickets、其他 PRs 和其他提交的地方。 108 | 109 | ```txt 110 | BREAKING CHANGE: 111 | 112 | 113 | 114 | Fixes # 115 | ``` 116 | 117 | {{< notice warning >}} 118 | 119 | **不兼容的更改必须以 `BREAKING CHANGE:` 开头,其后为对不兼容更改的简短的描述,(空一行后的) 详细的描述,以及迁移指南等。** 120 | 121 | {{< /notice >}} 122 | 123 | ### Revert 124 | 125 | 众所周知,只有鸡啄完米,狗舔完面,火烧断锁,甲方 (产品经理) 才不会改需求。所以我们时常需要不得不回滚到某次提交。这时你应该使用回滚提交 (Revert Commit)。 126 | 127 | 回滚提交 (Revert Commit) 是一种特殊的提交,它强制以 `revert:` 开头,其后是需要被回滚到的提交的 `Header`。 128 | 129 | 其提交消息的 Body 部分应包含: 130 | 131 | - 以下格式描述的需要被回滚到的提交的 SHA 的信息:`This reverts commit `, 132 | - 对回滚提交的原因的清晰描述。 133 | 134 | ```txt 135 | revert:
136 | 137 | This reverts commit 138 | 139 | 140 | ``` 141 | 142 | ## 参考 143 | 144 | - [Angular 项目的 CONTRIBUTING.md](https://github.com/angular/angular/blob/master/CONTRIBUTING.md) 145 | - [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) 146 | -------------------------------------------------------------------------------- /content/posts/zh-cn/065.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "使用 GPG 签名你的 Git Commit" 3 | date: 2019-05-16T11:53:23+08:00 4 | draft: false 5 | tags: ["GnuPG"] 6 | categories: ["生命不息 折腾不止"] 7 | --- 8 | 13 | 14 | 众所周知,如果用 GitHub 客户端或者在 GitHub 网页上操作 git 都会在 commits 中留下 `Verified` 的标记 15 | 16 | ![Verified](https://mogeko.github.io/blog-images/r/065/verified_1.png) 17 | 18 | 这表示该 commit 是在 GitHub 上创建的,使用 GitHub 的 key 对这个提交进行了签名。 19 | 20 | 但 GitHub 客户端或者 GitHub 网页并不是签名 commit 的唯一方法,我们也可以通过 GnuPG (GPG) 来签名我们的 commit。 21 | 22 | GPG 是一个非常出色的加密软件,当年斯诺登为了安全的将绝密文件交给记者,就用 GPG 对文件进行了加密。 23 | 24 | 通过 GPG 签名 commit 不仅可以获得 `Verified` 的标识,更重要的是它能够有效的提高该 Git 仓库的安全性 (GPG 签名并不能提高开源软件本身的安全性)。因为它可以证明这个 commit 是通过你信任的的电脑提交的,而不是某个冒用你名号的黑客。这相当于赋予了 commit 一种不可更改性,即使黑客通过某种办法拿到了 Git 仓库的读写权,他也没有办法添加或者使用 `--force` 修改任何带有你 GPG 签名的 commit。 25 | 26 | ## 安装 GPG 27 | 28 | 一般的 GNU/Linux 都是自带得有 GPG,直接用就可以了。 29 | 30 | Windows 版的 GPG 包含在 MinGW 或者中,而 Windows 版的 Git 基于 MinGW,所以说安装了 Git 就相当于安装了 GPG,可以直接在 Git Bash 中使用。 31 | 32 | macOS 可能需要单独安装一下 33 | 34 | ```shell 35 | brew install gpg 36 | ``` 37 | 38 | ## 生成 GPG 密钥 39 | 40 | 与 SSH 一样,GPG 采用的是非对称加密。 41 | 42 | 我们要想用 GPG 签名我们的 commit,首先需要一对 GPG 密钥。 43 | 44 | 如果没有的话,就使用以下命令生成一个 (按照提示输入姓名和邮箱地址): 45 | 46 | ```shell 47 | $ gpg --gen-key 48 | gpg (GnuPG) 2.2.15; Copyright (C) 2019 Free Software Foundation, Inc. 49 | This is free software: you are free to change and redistribute it. 50 | There is NO WARRANTY, to the extent permitted by law. 51 | 52 | 注意:使用 “gpg --full-generate-key” 以获得一个功能完整的密钥产生对话框。 53 | 54 | GnuPG 需要构建用户标识以辨认您的密钥。 55 | 56 | 真实姓名: mogeko 57 | 电子邮件地址: zhengjunyi@live.com 58 | ``` 59 | 60 | 然后输入 `o` 以确定 61 | 62 | ```shell 63 | 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? o 64 | ``` 65 | 66 | 然后终端中会有如下提示 67 | 68 | ```shell 69 | 我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数发生器有更好的机会获得足够的熵 70 | ``` 71 | 72 | 同时,会弹出一个界面要求你输入私匙密码并确定 73 | 74 | ![Set Password](https://mogeko.github.io/blog-images/r/065/set-passwd.png) 75 | 76 | 然后密钥就已经生成完毕了。记下密钥ID (就是形如 4089B828704223E7 的一串 16 进制数) 77 | 78 | ```shell 79 | gpg: 密钥 4089B828704223E7 被标记为绝对信任 80 | gpg: 吊销证书已被存储为‘/home/mogeko/.gnupg/openpgp-revocs.d/DC4E79EFEE5E224A20E9013A4089B828704223E7.rev’ 81 | 公钥和私钥已经生成并被签名。 82 | 83 | pub rsa2048 2019-05-16 [SC] [有效至:2021-05-15] 84 | DC4E79EFEE5E224A20E9013A4089B828704223E7 85 | uid mogeko 86 | sub rsa2048 2019-05-16 [E] [有效至:2021-05-15] 87 | ``` 88 | 89 | ## 设置 Git 90 | 91 | 首先设置一下 Git,让 Git 使用我们的密钥来对 commit 进行签名 92 | 93 | ```shell 94 | git config --global user.signingkey <密钥ID> 95 | ``` 96 | 97 | 然后设置 Git 全局使用该密钥加密 commit 98 | 99 | ```shell 100 | git config --global commit.gpgsign true 101 | ``` 102 | 103 | 顺便设置 Git 全局使用该密钥加密 tag 104 | 105 | ```shell 106 | git config --global tag.forcesignannotated true 107 | ``` 108 | 109 | ## 输出密钥 110 | 111 | 公钥文件 (.gnupg/pubring.gpg) 是以二进制的形式储存的,我们使用 `--armor` 参数将它转换成 ASCII 码的形式 112 | 113 | ```shell 114 | gpg --armor --export <密钥ID> 115 | ``` 116 | 117 | 复制输出的公钥信息 118 | 119 | 同样的,`--export-secret-keys` 则可以用来转换私匙,不过我们这里用不到 (**千万不要把私匙透露给别人**) 120 | 121 | ```shell 122 | gpg --armor --export-secret-keys <密钥ID> 123 | ``` 124 | 125 | ## 上传公钥至 GitHub 126 | 127 | 来到 GitHub 的设置页面的 [SSH and GPG keys](https://github.com/settings/keys),点击 `New GPG key`。 128 | 129 | ![New GPG key](https://mogeko.github.io/blog-images/r/065/new_gpg_key.jpg) 130 | 131 | 将刚刚复制的 GPG 公钥粘贴到对话框中,点击 `Add GPG ksy` (可能回要求你输入 GitHub 密码) 132 | 133 | ![Add GPG key](https://mogeko.github.io/blog-images/r/065/add_gpg_key.png) 134 | 135 |
136 | 137 | 至此以后你在这台计算机使用 `git pull` 推送到 GitHub 的所有 commit 都带有 GPG 签名了 138 | 139 | ![Verified](https://mogeko.github.io/blog-images/r/065/verified_2.png) 140 | -------------------------------------------------------------------------------- /static/images/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /content/posts/zh-cn/020.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "空洞骑士:寻神者 DLC 全成就指南" 3 | date: 2018-09-30T08:59:00+08:00 4 | draft: false 5 | tags: ["第九艺术", "Steam 指南备份", "轻松休闲的空洞骑士"] 6 | categories: ["关于第九艺术"] 7 | image: https://mogeko.github.io/blog-images/r/020/logo.jpg 8 | --- 9 | 10 | {{< featuredImage >}} 11 | 12 | 爆肝 20 多个小时终于打完了 QAQ 13 | 写篇指南压压惊 \_(:з」∠)\_ 14 | 15 | 寻神者 DLC 是真的难,推荐大家在完成主线剧情,做好心理准备,~~写好遗书后,~~再开启 16 | 17 | {{< spoiler >}}我操你大爷的开发者 QAQ{{< /spoiler >}} 18 | 19 | 20 | 21 | ## 开启方法 22 | 23 | ### 找一个简单钥匙 24 | 25 | 开启寻神者 DLC 需要一个「简单钥匙」,如果身上有的话可以跳过 26 | 27 | 首先来到「王国边缘」的愚人竞技场,从竞技场下方经过长椅,在长椅和尽头的温泉之间,上方有通道可以跳上去。 28 | 29 | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910127720802/3887766AB03FDE17ED254610E5333492A842F97D/) 30 | 31 | 把墙壁撸穿,可以打开一个隐藏房间 32 | 33 | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910127722487/ECB6722E2C094422AB7F31D3C51441479AB392B8/) 34 | 35 | 进入隐藏房间,可以看到一个「苍白潜伏者」,他一看到你就会跑。追上并杀死他,他身上会掉一个「简单钥匙」 36 | 37 | ### 开启「神居」 38 | 39 | 来到皇家下水道,在「吸虫之母」的家门口向上走,来到如图位置 (大概在长椅的下方),跳起来对着墙壁来一发,进入隐藏通道。 40 | 41 | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910127731980/0B267B9D66B22E341901C01D8E6E85FE0EDE11A6/) 42 | 43 | 一直往左走,直到来到一个名为「垃圾坑」的地方 44 | 45 | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910127733672/EA2C53A1B6F0F14953B8E986E4C2DE10DAB4079F/) 46 | 47 | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910127735000/65E00823B261FC2CF1AF313C8645DA683F908C9E/) 48 | 49 | 「垃圾坑」中有一个上锁的棺材,用「简单钥匙」打开后,会掉一个「神明调谐器」 50 | 51 | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910127736304/4119CD178396BC63269BC57B13C8628413FC2C69/) 52 | 53 | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910127737280/F396BFF24C1C5E02CC809B54CDECB2826E79DC42/) 54 | 55 | 此时对着棺材中那个中暑的“尸体” {{< spoiler >}}莫挨老子,老子没中暑 QAQ{{< /spoiler >}} 来一发「光之钉」,开启「神居」 56 | 57 | ## 全成就指南 58 | 59 | | 图标 | 成就 | 60 | | ------------------------------------------------------------ | ---------------------------------- | 61 | | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910127529487/9937E1FABC4F0EA2FEEBAFD0B6F20C025B52AEEC/) | **兄弟**:完成「大师万神殿」挑战 | 62 | | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910127530081/17F7D048DECF5C20BAB0A7BD11F2FAC5CACA050A/) | **灵感**:完成「艺术家万神殿」挑战 | 63 | | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910127530647/382C7998E9B0B60A850D8BDF4C7F4A515A8B3481/) | **专注**:完成「贤者万神殿」挑战 | 64 | 65 | **完成三个挑战后会解锁「骑士万神殿」** 66 | 67 | | 图标 | 成就 | 68 | | ------------------------------------------------------------ | -------------------------------------- | 69 | | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910127531198/5857AE3A16211B09755B086F37F411ADEAD38131/) | **灵魂与阴影**:完成「骑士万神殿」挑战 | 70 | 71 | **完成四个挑战后会解锁「圣巢万神殿」** 72 | 73 | | 图标 | 成就 | 74 | | ------------------------------------------------------------ | ------------------------------------ | 75 | | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910127531615/671C16432F460CDD9EFF88D5C01B4ABC7CFE2703/) | **拥抱虚空**:完成「圣巢万神殿」挑战 | 76 | 77 | ## 关于「束缚」 78 | 79 | 如果你觉得还是不过瘾,还可以通过束缚「骨钉」、「外壳」、「护符」、「灵魂」来提升难度。 80 | 81 | 在「束缚」难度中完成挑战后,会在相关挑战的入口处点亮相应的四盏灯,按「束缚」得最多的一次算 (例如束缚「骨钉」和「外壳」就只能点亮「骨钉」和「外壳」两盏灯,如果束缚了所有项目,就可以点亮全部四盏灯) 82 | 83 | **「束缚」不会影响成就** 84 | 85 | {{< spoiler >}}为了做这个实验我曾一度被打到自闭 QAQ{{< /spoiler >}} 86 | 87 | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910127612824/BD136FFE9A6F394E584F627B32F2AFB747733473/) 88 | 89 | ## 结语 90 | 91 | 就酱,我去补告告了,祝大家受难愉快(○'◡'○)ノ♥ 92 | 93 | ![img](https://steamuserimages-a.akamaihd.net/ugc/941706910124697569/9E941323DE8DFE4CBE8746FF52F92855E8807A73/) 94 | 95 | --- 96 | 97 | 原文地址:[寻神者 DLC 全成就指南 | Steam 社区](https://steamcommunity.com/sharedfiles/filedetails/?id=1526374935) 98 | 99 | 作者:还是 Mogeko ヾ(●´∇`●)ノ 100 | -------------------------------------------------------------------------------- /content/posts/zh-cn/087.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "使用 Sphinx 为 Python 生成文档的正确姿势" 3 | subtitle: 4 | date: 2021-09-20T12:44:53Z 5 | draft: false 6 | tags: ["Python", "Sphinx"] 7 | categories: ["Mogekoの最佳实践"] 8 | image: 9 | description: 10 | --- 11 | 12 | 17 | 18 | 使用一个有文档的程序 (库) 是一件幸福的事,但维护一套文档是一件痛苦的事。 19 | 20 | 为了将广大程序员从写文档的地狱中解救出来,程序员们发明了 (目前为止) 写文档的最佳实践 —— 文档代码化 —— 也就是将文档和代码写在一起,一般是通过注释的方式。文档代码化的好处这里就不再赘述了。 21 | 22 | 幸运的是 Python 是支持文档代码化的,通过 `"""` 注释。但作为 Python 文档之光的 Sphinx 做文档代码化的体验并不好。这也不能怪 Sphinx,毕竟 Sphinx 出生时,文档代码化的概念还没有被人们所熟知。 23 | 24 | 如果你在网上搜索“使用 Sphinx 为 Python 生成文档”,搜索到的方法多半是: 25 | 26 | 1. 新建文件夹 `doc(s)` 27 | 2. 在 `docs` 中使用 `sphinx-quickstart` 新建一个 Sphinx 工程 28 | 3. 配置 Sphinx 工程 29 | 4. 用 `sphinx-apidoc` 读取代码,生成 `rst` 文件 30 | 5. ... 31 | 32 | 好的,现在你不仅要写代码,还要维护文档了,非常 old school! 33 | 34 | 我们可以看出,Sphinx 并没有逃出:写代码,写文档,写代码的地狱。正确的文档代码化实践应当是: 35 | 36 | 1. 写代码,在注释中写文档 37 | 2. 通过 CI 直接从代码中生成文档 38 | 39 | 好在最新版的 `sphinx-apidoc` 基本支持这一实践 (只是有点简陋)。 40 | 41 | ## 使用 sphinx-apidoc 自动生成文档 42 | 43 | 阅读最新的 [sphinx-apidoc 文档](https://www.sphinx-doc.org/zh_CN/latest/man/sphinx-apidoc.html) 我们可以发现, `sphinx-apidoc` 实际上是可以生成一个完整的 Sphinx 工程的: 44 | 45 | ![help_F](https://mogeko.github.io/blog-images/r/087/help_F.png) 46 | 47 | 所以,其实我们并不需要 `sphinx-quickstart`,直接在 Python 工程中(使用 `-f` 强制生成): 48 | 49 | ```shell 50 | sphinx-apidoc -f -F -o docs 51 | ``` 52 | 53 | 你还可以将它配置在 Makefile 中: 54 | 55 | ```make 56 | DOCS_CMD = sphinx-apidoc 57 | PROJ_DIR = myq_spider 58 | DOCS_DIR = docs 59 | 60 | doc: $(DOCS_DIR) 61 | 62 | $(DOCS_DIR): $(PROJ_NAME) 63 | @$(DOCS_CMD) -f -F -o $@ $< 64 | 65 | html: $(DOCS_DIR) 66 | @$(MAKE) -C $< html 67 | ``` 68 | 69 | 然后直接在 Python 工程中运行 `make docs` 和 `make html` 就可以生成、编译文档了。 70 | 71 | 然后配合 CI,就可以基本实现在不维护一套独立的 Sphinx 文档的前提下,自动生成 API 文档。 72 | 73 | ## 使用模板 (进阶) 74 | 75 | 目前为止,基于 `sphinx-apidoc` 的文档代码化已经基本能用了,但并不好用。 76 | 77 | 原因在于配置文件 `conf.py` 会在每次运行 `make docs` 时刷新到初始状态。项目名称、作者姓名等信息尚且可以通过 *[OPTIONS]* 传入: 78 | 79 | ![help_aHAVR](https://mogeko.github.io/blog-images/r/087/help_aHAVR.png) 80 | 81 | 但主题怎么办?那个丑不拉几的默认主题?看多了也不怕性冷淡... 82 | 83 | 还有各种插件也没法配置,只能用默认的... 84 | 85 | 好在 *`>=2.2` 的版本*增加了模板的支持。 86 | 87 | ![help_t](https://mogeko.github.io/blog-images/r/087/help_t.png) 88 | 89 | 我们首先将生成的 `docs/conf.py` 复制一份到 `docs/_templates/conf.py_t`。 90 | 91 | 然后根据实际需要在 `docs/_templates/conf.py_t` 中修改配置。 92 | 93 | 最后在 `Makefile` 中指定存放模板的文件夹: 94 | 95 | ```make 96 | DOCS_CMD = sphinx-apidoc 97 | PROJ_DIR = myq_spider 98 | DOCS_DIR = docs 99 | 100 | doc: $(DOCS_DIR) 101 | 102 | $(DOCS_DIR): 103 | @$(DOCS_CMD) -f -F -t $@/_templates -o $@ $(PROJ_NAME) 104 | 105 | html: $(DOCS_DIR) 106 | @$(MAKE) -C $< html 107 | ``` 108 | 109 | 生成文档时,`sphinx-apidoc` 会以 `docs/_templates/conf.py_t` 作为模板生成 `docs/conf.py`,从而实现对 `docs/conf.py` 的配置。 110 | 111 | 当然你也可以复制并配置 Sphinx 安装目录中的 `templates/quickstart/conf.py_t`,以获得更好的动态灵活性。 112 | 113 | ### .gitignore 114 | 115 | 既然选择了 CI 来自动生成 API 文档,那么 `docs` 文件夹中的 Sphinx 项目似乎就有点多余。 116 | 117 | 我们可以通过 `.gitignore` 来排除它们 (只包含模板和静态文件): 118 | 119 | ```shell 120 | # Sphinx documentation 121 | docs/* 122 | !docs/_static 123 | !docs/_templates 124 | ``` 125 | 126 | ## 包含 README.rst 127 | 128 | 有时候我们会希望 Python 项目的 API 文档的首页包含本项目的 README.rst。 129 | 130 | 同样的,直接修改 `docs/index.rst` 是没用的,我们需要使用模板。 131 | 132 | 但这次不能直接复制 `docs/index.rst` 了,我们需要一点动态能力,复制并配置 Sphinx 安装目录中的 `templates/quickstart/root_doc.rst_t` 至 `docs/_templates/root_doc.rst_t`,然后修改 (找不到 Sphinx 安装目录的可以直接复制以下内容): 133 | 134 | ```rst 135 | .. {{ project }} documentation master file, created by 136 | sphinx-quickstart on {{ now }}. 137 | You can adapt this file completely to your liking, but it should at least 138 | contain the root `toctree` directive. 139 | 140 | Welcome to {{ project }}'s documentation! 141 | ==========={{ project_underline }}================= 142 | 143 | .. toctree:: 144 | :maxdepth: {{ mastertocmaxdepth }} 145 | :caption: Contents: 146 | 147 | {{ mastertoctree }} 148 | 149 | README.rst 150 | ========== 151 | 152 | .. include:: ../README.rst 153 | 154 | Indices and tables 155 | ================== 156 | 157 | * :ref:`genindex` 158 | * :ref:`modindex` 159 | * :ref:`search` 160 | 161 | 162 | ``` 163 | -------------------------------------------------------------------------------- /content/posts/zh-cn/010.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "神奇的 Magisk" 3 | date: 2017-12-02T18:00:00+08:00 4 | draft: false 5 | tags: ["Android"] 6 | categories: ["生命不息 折腾不止"] 7 | image: https://mogeko.github.io/blog-images/r/010/Magisk_Logo.png 8 | --- 9 | 10 | {{< featuredImage >}} 11 | 12 | 今天为大家介绍一款神奇的 Android 第三方接口 —— Magisk 13 | 14 | # Root —— 玩家与厂商间的博弈 15 | 16 | Android 从诞生之日起就高举着开源的大旗,这也是它成功的原因之一。而它的开放性也成功的吸引到了一大批爱折腾的人,从而诞生出了 root(此处特制 Android 中的 root)。 17 | 18 | 根据 [Wikipedia](https://zh.wikipedia.org/wiki/Root#.E8.A8.88.E7.AE.97.E6.A9.9F.E6.87.89.E7.94.A8) 的释义,root 指的是使用户取得 Android 操作系统的超级用户(Super User)许可权的技术。用户通过 root,可以越过手机制造商的限制,卸载手机制造商预装在手机中某些应用,以及运行一些需要超级用户权限的应用程序。同时,root 也可能会让手机变得“不安全”(并不是说 root 使手机变得不安全,而是一些用户的使用习惯会使 root 后的手机变得危险)。 19 | 20 | 但是从棉花糖(Android 6.0)开始,Google 基本阻止了以前版本中最流行的 root 方法 —— 即,将 su守护程序 放置到 /system 分区,并在启动时取得所需的权限。道高一尺,魔高一丈,于是就出现了 systemless 的 root 方式,因为它不采取任何方式修改 /system 分区。 21 | 22 | 出于增加安全性的考虑,Google 推出了 SafetyNet 这样的检测,以确保 Android Pay 等一些 App 的安全运行,玩家不得不在 root 权限和一些有价值的 App 之间作出选择。 23 | 24 | 这个时候 Magisk 诞生了。 25 | 26 | 27 | 28 | # Magisk 29 | 30 | ## 什么是 Magisk 31 | 32 | Magisk 是出自一位台湾学生 [@topjohnwu](https://forum.xda-developers.com/member.php?u=4470081) 开发的 Android 框架,是一个通用的第三方 systemless 接口,通过这样的方式实现一些较强大的功能。 33 | 34 | 看似很简单的一个框架,甚至与大名鼎鼎的 Xposed 框架在功能性上有点重复。很多人批评 Magisk的模块太少了,想替代 Xposed 根本不可能(在那个 Xposed Framework for Android 7.0 难产的时代,很多人将 Magisk 看是做是 Xposed 的替代品)。这是不正确的,因为 Magisk 从来没有想过要代替 Xposed ,Magisk 与 Xposed 是可以互相兼容的,你甚至可以通过 Magisk 来安装 Xposed(安装 Xposed 后就不能绕过 SafetyNet 了)。 35 | 36 | Magisk 的厉害之处在于它实现了一种绕过 SafetyNet 使用 root 的方法。 37 | 38 | **实现原理**:由于它是通过启动时在 boot 中创建钩子,把 /data/magisk.img 挂载到 /magisk,构建出一个在 system 基础上能够自定义替换,增加以及删除的文件系统,所有操作都在启动的时候完成,实际上并没有对 /system 分区进行修改(即 systemless 接口,以不触动 /system 的方式修改 /system)。 39 | 40 | ## 功能 41 | 42 | 截至目前版本(v14.0),Magisk 可以实现的功能包括: 43 | 44 | - 集成 root(MagiskSU) 45 | - root 和 Magisk 的日志功能 46 | - Magisk Hide(隐藏 Magisk 的 root 权限,针对 Snapchat、Android Pay、PokémonGo、Netflix 等) 47 | - 为广告屏蔽应用提供 systemless hosts 支持 48 | - 通过 SafetyNet 检查 49 | - Magisk 功能模块 50 | 51 | 支持的版本:Android 5.0+ 52 | 53 | ## 安装方法 54 | 55 | 安装 Magisk 需要解锁 Bootloader 并刷入第三方 Recovery。所以每个品牌的手机都或多或少的有点不一样,这里只介绍一个标准的流程,具体操作方法请自行 Google(只需要 Google 你使用的手机解锁 Bootloader 和刷入第三方 Recovery 的方法就可以了,其他的安我说的做)。 56 | 57 | 1. 解锁手机 Bootloader(BL) 58 | 方法:自行 Google 59 | 2. 刷入第三方 Recovery(例如 TWRP) 60 | 方法:自行 Google 61 | 3. 下载官方 [Magisk](https://forum.xda-developers.com/apps/magisk) 包,然后通过第三方 Recovery 刷入 62 | 方法:首先将下好的包放入手机的硬盘中(你可以使用 QQ数据线 也可以使用 XX手机助手,whatever)然后,进入第三方 Recovery(以 twrp 为例),安装刷机包 -> 找到我让你放在硬盘中的那个包(后缀为 .zip)-> 滑动滑块,开始刷机 -> 刷好后立即重启 63 | 4. 享受完整 Magisk 的 systemless root 和神奇的 Magisk 模块 64 | 重启后找到一个名为 Magisk Manager(图标是一个面具,绿色背景),这是 Magisk 的管理程序,你可以在这里下载、安装、升级、卸载你的 Magisk 和 Magisk 模块。 65 | 5. 卸载 Magisk 66 | 卸载 Magisk 有两种方法:在 Magisk Manager 中卸载,或者通过第三方 Recovery 刷入卸载包卸载。通过 Magisk Manager 卸载很好理解,通过第三方 Recovery 卸载的意思是刷一个名为 `Magisk-uninstaller.zip`的刷机包,方法和刷 Magisk 一样。两种方法我都没试过。 67 | 68 | ## 一些推荐的功能模块 69 | 70 | **App Systemizer** 71 | 72 | 这是一个能把用户 App 挂载为系统 App 的模块,如 Google Play 服务、绿色守护、蟒蛇音效等。 73 | 74 | **Magisk SELinux Permissive Script** 75 | 76 | 使 Android 的 SELinux 默认以 Permissive 运行,关于 SELinux 模式的介绍,请点击[这里](https://cn.apkjam.com/selinux.html)。 77 | 78 | **ViPER4Android FX** 79 | 80 | 大名鼎鼎的蝰蛇音效的 Magisk 模块,需要配合 VIPERFX 的管理器使用,请在 XDA 论坛搜索下载。关于[ViPER4Android](https://baike.baidu.com/item/ViPER4Android/8815475)。 81 | 82 | **Xposed** [XDA 论坛地址](https://forum.xda-developers.com/xposed/unofficial-systemless-xposed-t3388268) 83 | 84 | 强大的 Xposed 框架的 systemless 实现,关于 Xposed 的介绍点击[这里](https://cn.apkjam.com/xposed.html)。 85 | 86 | 待续… 87 | 88 | ## 一些资源 89 | 90 | 如果你不知道这么找 Magisk 或者 VIPERFX。我这里提供了一些资源。不能保证是最新的。 91 | 92 | - [Magisk_v17.1.zip](https://github.com/topjohnwu/Magisk/releases/download/v17.1/Magisk-v17.1.zip) 93 | Magisk 卡刷包,版本:17.1 94 | {{< spoiler >}}2018-11-19,再次诈一波尸{{< /spoiler >}} 95 | {{< spoiler >}}2018-02-26,诈尸更新一波卡刷包(・ω・) ノ(Magisk 的作者服兵役去了,最近应该不会有更新了){{< /spoiler >}} 96 | 97 | - [VIPERFX](https://github.com/Mogeko/blog-commits/releases/download/010/com.audlabs.viperfx_2.5.0.5.apk) 98 | ViPER4Android FX 的管理程器,版本:2.5.0.5 99 | 100 | - [ViPER4Android_full.zip](https://github.com/Mogeko/blog-commits/releases/download/010/ViPER4Android_full.zip) 101 | 我收集的蝰蛇音效的音效配置、脉冲反馈 和 DDC。完整版,质量良莠不齐 102 | 103 | - [ViPER4Android.zip](https://github.com/Mogeko/blog-commits/releases/download/010/ViPER4Android.zip) 104 | 还是音效配置、脉冲反馈 和 DDC。但这是我精选过的版本,也是目前再用的版本 105 | -------------------------------------------------------------------------------- /content/posts/zh-cn/041.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "描边灯塔插画" 3 | date: 2018-12-28T02:58:34+08:00 4 | draft: false 5 | tags: ["Adobe Illustrator"] 6 | categories: ["Adobe Illustrator 入门"] 7 | --- 8 | 13 | 14 | ![描边灯塔插画](https://mogeko.github.io/blog-images/r/041/Lighthouse.svg) 15 | 16 | 原图:[Lighthouse.ai](https://mogeko.github.io/blog-images/r/041/Lighthouse.ai) 17 | 18 | ## 以下是使用到的颜色 19 | 20 | 据说黑暗模式下体验更佳哦 |・ω・`) 21 | 22 |
23 | 边线: 24 |
25 | ▉ #313C85 26 | 结果关灯后又看不清 #313C85 了 27 | _(:з」∠)_ 28 |
29 |
30 |
31 | 底座: 32 |
33 | ▉ #9497A6 34 | ▉ #74808D 35 | ▉ #EB9558 36 | ▉ #7E808D 37 | ▉ #DBDBCE 38 | ▉ #77D9AC 39 | ▉ #B9BBC5 40 | ▉ #878997 41 |
42 |
43 |
44 | 灯塔下部: 45 |
46 | ▉ #EB9558 47 | ▉ #DBDBCE 48 | ▉ #E6E7EB 49 | ▉ #FF5266 50 | ▉ #FFDE38 51 | ▉ #F2F2EE 52 | ▉ #C87F4B 53 | ▉ #BABAAF 54 |
55 |
56 |
57 | 瞭望台: 58 |
59 | ▉ #E6E7EB 60 | ▉ #FFDE38 61 | ▉ #FFF8CC 62 | ▉ #CACBCE 63 |
64 |
65 |
66 | 背景: 67 |
68 | ▉ #F5F7F9 69 | ▉ #FFE087 70 | ▉ #FFF5B3 71 |
72 |
73 | 74 | ## 然后以下是画图的具体步骤 75 | 76 | 来源:[【零基础学Ai教程】描边灯塔插图](https://www.zcool.com.cn/article/ZODQwOTYw.html) 77 | 78 | 作者:[Ai肖博士](https://www.zcool.com.cn/u/14824754) 79 | 80 | ![000](https://mogeko.github.io/blog-images/r/041/000.jpg) 81 | 82 | ![001](https://mogeko.github.io/blog-images/r/041/001.jpg) 83 | 84 | ![002](https://mogeko.github.io/blog-images/r/041/002.jpg) 85 | 86 | ![003](https://mogeko.github.io/blog-images/r/041/003.jpg) 87 | 88 | ![004](https://mogeko.github.io/blog-images/r/041/004.jpg) 89 | 90 | ![005](https://mogeko.github.io/blog-images/r/041/005.jpg) 91 | 92 | ![006](https://mogeko.github.io/blog-images/r/041/006.jpg) 93 | 94 | ![007](https://mogeko.github.io/blog-images/r/041/007.jpg) 95 | 96 | ![008](https://mogeko.github.io/blog-images/r/041/008.jpg) 97 | 98 | ![009](https://mogeko.github.io/blog-images/r/041/009.jpg) 99 | 100 | ![010](https://mogeko.github.io/blog-images/r/041/010.jpg) 101 | 102 | ![011](https://mogeko.github.io/blog-images/r/041/011.jpg) 103 | -------------------------------------------------------------------------------- /content/posts/zh-cn/090.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "《八方旅人》支线任务:寻找父亲的旅行者克里斯(1&2)" 3 | subtitle: 4 | date: 2022-01-10T18:00:28Z 5 | draft: false 6 | tags: ["第九艺术", "OCTOPATH TRAVELER"] 7 | categories: ["关于第九艺术"] 8 | image: 9 | description: "《八方旅人》隐藏结局的前置任务之一" 10 | --- 11 | 12 | 17 | 18 | ## 旅行青年克里斯 19 | 20 | - 前置条件:初始角色主线任务的第一章 21 | - NPC:克里斯 22 | - 地图:初始角色出生点的城外 23 | 24 | --- 25 | 26 | 在开始任务**寻找父亲的旅行者克里斯**前,玩家需要先完成一个名为**旅行青年克里斯**的支线任务。这也是玩家所能接收的第一个支线任务。 27 | 28 | 这个任务的位置取决于你选择的初始角色。在完成初始角色主线任务的第一章后,走出城外,开始旅行,便会看到一个受伤的 NPC。 29 | 30 | 与之对话,他会请玩家给他一个「恢复 HP 的葡萄」。 31 | 32 | 给他即可完成任务。 33 | 34 | ## 寻找父亲的旅行者克里斯(1) 35 | 36 | - 前置条件:[旅行青年克里斯](#旅行青年克里斯) 37 | - 队伍:[欧菲莉亚 (神官)](神官) 或 [普里姆萝洁 (舞者)](舞者) 38 | - NPC: 39 | 1. 克里斯 40 | 2. 想当艺人的男子 41 | - 地图:诺布尔寇德 -> 诺布尔寇德 -东地区- -> 诺布尔寇德 42 | 43 | --- 44 | 45 | 在完成任务**旅行青年克里斯**后,来到**诺布尔寇德**。 46 | 47 | ![OCTOPATH_TRAVELER_2022_1_10_17_37_02](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_17_37_02.png) 48 | 49 | 往右边走,在城区附近与任务 NPC **克里斯**对话,触发任务。 50 | 51 | ![OCTOPATH_TRAVELER_2022_1_10_17_40_10](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_17_40_10.png) 52 | 53 | 继续往右走,在**诺布尔寇德 -东地区-**的桥洞附近,与 NPC **想当艺人的男子** 对话。 54 | 55 | 然后用[神官]或[舞者]的技能将他带到**克里斯**面前。 56 | 57 | ![OCTOPATH_TRAVELER_2022_1_10_17_40_57](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_17_40_57.png) 58 | ![OCTOPATH_TRAVELER_2022_1_10_17_41_13](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_17_41_13.png) 59 | ![OCTOPATH_TRAVELER_2022_1_10_17_41_43](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_17_41_43.png) 60 | 61 | 与**克里斯**对话,触发剧情。 62 | 63 | ![OCTOPATH_TRAVELER_2022_1_10_17_41_56](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_17_41_56.png) 64 | ![OCTOPATH_TRAVELER_2022_1_10_17_42_36](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_17_42_36.png) 65 | 66 | 任务完成。 67 | 68 | ![OCTOPATH_TRAVELER_2022_1_10_17_42_54](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_17_42_54.png) 69 | 70 | ## 寻找父亲的旅行者克里斯(2) 71 | 72 | - 前置条件:[寻找父亲的旅行者克里斯(1)](#寻找父亲的旅行者克里斯1) 73 | - 队伍:[特蕾莎 (商人)][商人] 或 [泰里翁 (盗贼)][盗贼] 74 | - NPC: 75 | 1. 克里斯 76 | 2. 行商人 77 | - 地图:(格鲁德修亚 -> 西格鲁德修亚海道)-> 月隐海道 -> 格兰波特 -> 月隐海道 78 | 79 | --- 80 | 81 | 在完成前置任务后。 82 | 83 | 首先传送到**格鲁德修亚**,然后经**西格鲁德修亚海道**来到**月隐海道**。 84 | 85 | ![OCTOPATH_TRAVELER_2022_1_10_19_34_09](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_19_34_09.png) 86 | 87 | 找到马戏团,与**克里斯**对话,触发任务。 88 | 89 | ![OCTOPATH_TRAVELER_2022_1_10_19_42_39](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_19_42_39.png) 90 | 91 | 然后来到**格兰波特** 92 | 93 | ![OCTOPATH_TRAVELER_2022_1_10_19_43_06](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_19_43_06.png) 94 | 95 | 通过[商人]或[盗贼]在**行商人**处购买/盗取「青金石」(参考价格 29,600 元)。 96 | 97 | ![OCTOPATH_TRAVELER_2022_1_10_19_43_28](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_19_43_28.png) 98 | ![OCTOPATH_TRAVELER_2022_1_10_19_43_53](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_19_43_53.png) 99 | 100 | 然后回到**月隐海道**的马戏团附近。 101 | 102 | ![OCTOPATH_TRAVELER_2022_1_10_19_46_31](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_19_46_31.png) 103 | 104 | 将「青金石」交给**克里斯**,触发剧情。 105 | 106 | ![OCTOPATH_TRAVELER_2022_1_10_19_46_40](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_19_46_40.png) 107 | ![OCTOPATH_TRAVELER_2022_1_10_19_46_53](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_19_46_53.png) 108 | ![OCTOPATH_TRAVELER_2022_1_10_19_47_11](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_19_47_11.png) 109 | 110 | 任务完成。 111 | 112 | ![OCTOPATH_TRAVELER_2022_1_10_19_48_19](https://mogeko.github.io/blog-images/r/090/OCTOPATH_TRAVELER_2022_1_10_19_48_19.png) 113 | 114 | 115 | 116 | 126 | 127 | [神官]: https://octopath.huijiwiki.com/wiki/欧菲莉亚 128 | [学者]: https://octopath.huijiwiki.com/wiki/塞拉斯 129 | [商人]: https://octopath.huijiwiki.com/wiki/泰瑞莎 130 | [剑士]: https://octopath.huijiwiki.com/wiki/奥伯里克 131 | [舞者]: https://octopath.huijiwiki.com/wiki/普蕾米罗斯 132 | [药师]: https://octopath.huijiwiki.com/wiki/阿尔芬 133 | [盗贼]: https://octopath.huijiwiki.com/wiki/提利昂 134 | [猎人]: https://octopath.huijiwiki.com/wiki/海茵特 135 | -------------------------------------------------------------------------------- /content/posts/zh-cn/083.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "在 Hugo 博客上使用 PlantUML" 3 | date: 2020-05-15T18:48:58+02:00 4 | draft: false 5 | tags: ["hugo", "mogege"] 6 | categories: ["折腾博客的二三事 "] 7 | image: 8 | subtitle: 9 | plantuml: true 10 | --- 11 | 17 | 18 | PlantUML 是一个很好用的开源工具,可以通过简单的文字描述生成**时序图,用例图,类图,活动图,组件图,状态图,对象图,部署图 ...** 等常用 UML 图。 19 | 20 | 我写博客的时候有时候也会用到 UML 图,特别是技术性文章时,但 Hugo 默认不支持 PlantUML,不过我们可以通过修改 Hugo 主题支持 PlantUML。 21 | 22 | **我开发的 [mogege](https://github.com/Mogeko/mogege#plantuml) 主题已经实现了对 PlantUML 的支持,可以直接用** 23 | 24 | ## 开发过程 25 | 26 | 支持 PlantUML 的开发过程可谓是一波三折,不记录下来对不起我牺牲的脑细胞,不想看我啰嗦的[戳这里](#在-hugo-主题中实现) 27 | 28 | 首先,我先搜索了一下,看有没有已经造好了的轮子。然后发现已经有人给 Hugo 主题 [Academic](https://github.com/gcushen/hugo-academic) 的作者提过[希望支持 PlantUML 的建议](https://github.com/gcushen/hugo-academic/issues/1110)了。看完那篇 Issue 后心瞬间凉了一半。Academic 的作者觉得 PlantUML 需要依赖 Hugo 以外的软件,这个软件还是基于 Java 开发的,操作起来太复杂了,所以拒绝了建议 29 | 30 | > Closing as PlantUML is not client side JS, also it's not currently supported by Hugo even if PlantUML has been manually installed locally: [gohugoio/hugo#796](https://github.com/gohugoio/hugo/issues/796). 31 | > 32 | > The recommendations for diagramming can be found here: 33 | > 34 | > Also, I have opened [#1111](https://github.com/gcushen/hugo-academic/issues/1111) to consider integrating Mermaid.js for generating diagrams. 35 | 36 | 就在我准备放弃时,看到了这篇文章:[Markdown native diagrams with PlantUML](https://blog.anoff.io/2018-07-31-diagrams-with-plantuml/) 37 | 38 | 这篇文章介绍了 [PlantUML 官方的 Online Server](http://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000),该服务器提供 RESTful API,你只需要将 PlantUML 代码编码,然后发送给服务器,服务器就会返回渲染好的 PNG 或 SVG 图片。VSCode 的 [PlantUML 扩展](https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml)就是基于这个方案实现的。 39 | 40 | 这种编码类似于 (但不是) Base64 编码。我们只需要用 JavaScript 捕捉并编码 PlantUML 代码块,然后发送给 PlantUML 官方的 Online Server,再将返回的 SVG 图片插入到 DOM 树中就可以了。流程如图: 41 | 42 | ```plantuml 43 | @startuml 44 | actor You 45 | "You" --> "Blog": View post 46 | "Blog" -> "PlantUML Server": Encoded PlantUML syntax 47 | "PlantUML Server" -> "Blog": Get URL of SVG/PNG image 48 | "Blog" --> "You": Show pictures in the post 49 | @enduml 50 | ``` 51 | 52 | (👆这张图就是通过 PlantUML Server 实时生成的) 53 | 54 | 官方也为这种用法给出了一个[参考实现](https://plantuml.com/zh/code-javascript-synchronous)。所以现在只需要去 NPM 上找一个轮子就好了。打开 NPM 一搜,果然有不少轮子,但几乎所有实现都是基于 Node.js 的,没有一个可以用的 QAQ 55 | 56 | ![NPM Search](https://mogeko.github.io/blog-images/r/083/npm_search.png) 57 | 58 | 就在我又双叒准备放弃时,终于在互联网的卡卡角角里找到了这个库 [jmnote/plantuml-encoder](https://github.com/jmnote/plantuml-encoder) 59 | 60 | 终于可以开工了 \_(:з」∠)\_ 61 | 62 | ## 在 Hugo 主题中实现 63 | 64 | 实现很简单,只需要在主题引用 JavaScript的地方 (我的是 `./layouts/partials/js.html`) 插入: 65 | 66 | ```html 67 | {{ if or .Page.Params.plantuml .Site.Params.plantuml }} 68 | 69 | 70 | 82 | {{ end }} 83 | ``` 84 | 85 | 第一行的 `{{ if or .Page.Params.plantuml .Site.Params.plantuml }}` 相当于两个开关,分别控制 PlantUML 在**全局**和**单个文章内**开启与否 (默认是关闭的) 86 | 87 | 全局开启 PlantUML 需要在 `config.toml` 中配置: 88 | 89 | ```toml 90 | [params] 91 | plantuml = true 92 | ``` 93 | 94 | 如果需要为单个页面开启,则在文章开头的配置区添加 95 | 96 | ```yml 97 | plantuml: true 98 | ``` 99 | 100 | 然后再文章中使用 ```plantuml 标记需要被渲染的 PlantUML 语法块 101 | 102 | ```markdown 103 | ​```plantuml 104 | PlantUML 语法块 105 | ​``` 106 | ``` 107 | 108 | ## 效果如下 109 | 110 | ```plaintext 111 | ​```plantuml 112 | @startuml 113 | Alice -> Bob: Authentication Request 114 | Bob --> Alice: Authentication Response 115 | 116 | Alice -> Bob: Another authentication Request 117 | Alice <-- Bob: Another authentication Response 118 | @enduml 119 | ​``` 120 | ``` 121 | 122 | ```plantuml 123 | @startuml 124 | Alice -> Bob: Authentication Request 125 | Bob --> Alice: Authentication Response 126 | 127 | Alice -> Bob: Another authentication Request 128 | Alice <-- Bob: Another authentication Response 129 | @enduml 130 | ``` 131 | -------------------------------------------------------------------------------- /content/posts/zh-cn/050.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Rust 中的生命周期" 3 | date: 2019-04-01T19:27:29+08:00 4 | draft: false 5 | tags: ["Rust"] 6 | categories: ["从入门 到入坟"] 7 | --- 8 | 13 | 14 | 我们在讨论 Rust 的所有权时提到了一个非常重要的概念:**生命周期** (*lifetime*),也就是引用保持有效的作用域。 15 | 16 | 这个概念与所有权结合的相当紧密,同时又与借用和引用关系很大,是属于又难啃又不得不啃的硬骨头。不过在理解后就会真真切切的体会到 Rust 中所有权、生命周期系统等一系列设计的精密。 17 | 18 | 在真正开始前,我们需要先了解一下 Rust 中的引用和借用。 19 | 20 | ## 引用和借用 21 | 22 | 引用和借用并不是 Rust 所发明的新概念。它在别的语言中也有:在 Java 中它也被称为引用 (有一点区别)、在 C++ 中它被称为**指针**,不过 Rust 的引用更安全。 23 | 24 | 我们先来看一个例子: 25 | 26 | ```rust 27 | fn main() { 28 | let s1 = String::from("hello"); 29 | 30 | let len = calculate_length(&s1); 31 | 32 | println!("The length of '{}' is {}.", s1, len); 33 | } 34 | 35 | fn calculate_length(s: &String) -> usize { 36 | s.len() 37 | } // 这里,s 离开了作用域。但因为它并不拥有引用值的所有权, 38 | // 所以什么也不会发生 39 | ``` 40 | 41 | 我们传递 `&s1` 给 `calculate_length`,同时在函数定义中,我们获取 `&String` 而不是 `String`。 42 | 43 | 这些 & 符号就是 **引用**,它们允许你使用值但不获取其所有权。 44 | 45 | ![References](https://mogeko.github.io/blog-images/r/050/trpl04-05.svg) 46 | 47 | > 与使用 `&` 引用相反的操作是 **解引用** (*dereferencing*),它使用解引用运算符,`*`。 48 | 49 | 我们将获取引用作为函数参数称为 **借用** (*borrowing*)。正如现实生活中,如果一个人拥有某样东西,你可以从他那里借来。当你使用完毕,必须还回去。 50 | 51 | ### 悬垂引用 (Dangling References) 52 | 53 | 在具有指针的语言中,很容易通过释放内存时保留指向它的指针而错误地生成一个 **悬垂指针** (*dangling pointer*),所谓悬垂指针是其指向的内存可能已经被分配给其它持有者。相比之下,在 Rust 中编译器确保引用永远也不会变成悬垂状态:当你拥有一些数据的引用,编译器确保数据不会在其引用之前离开作用域。 54 | 55 | 让我们尝试创建一个悬垂引用: 56 | 57 | ```rust 58 | fn main() { 59 | let r; 60 | { 61 | let a = 1; 62 | r = &a; 63 | } 64 | println!("{}", r); 65 | } 66 | ``` 67 | 68 | 这是无法通过编译的: 69 | 70 | ```shell 71 | error[E0597]: `a` does not live long enough 72 | --> src/main.rs:5:9 73 | | 74 | 5 | r = &a; 75 | | ^^^^^^ borrowed value does not live long enough 76 | 6 | } 77 | | - `a` dropped here while still borrowed 78 | 7 | println!("{}", r); 79 | | - borrow later used here 80 | ``` 81 | 82 | 上面代码中,当 `a` 离开作用域的时候会被释放,但此时 `r` 还持有一个 `a` 的借用,编译器中的借用检查器就会告诉你:\`a\` does not live long enough。翻译过来就是:`a` 活的不够久。这代表着 `a` 的生命周期太短,而无法借用给 `r` ,否则 `&a` 就指向了一个曾经存在但现在已不再存在的对象,这就是悬垂指针,也有人将其称为野指针。 83 | 84 | ## 生命周期 85 | 86 | 部分时候生命周期是隐含并可以推断的,正如大部分时候类型也是可以推断的一样。类似于当因为有多种可能类型的时候必须注明类型,也会出现引用的生命周期以一些不同方式相关联的情况,所以 Rust 需要我们使用泛型生命周期参数来注明他们的关系,这样就能确保运行时实际使用的引用绝对是有效的。如果你不指定生命周期,那么编译器会“强制”你这么做: 87 | 88 | ```rust 89 | struct Foo { 90 | x: &i32, 91 | } 92 | 93 | fn main() { 94 | let y = &5; 95 | let f = Foo { x: y }; 96 | 97 | println!("{}", f.x); 98 | } 99 | ``` 100 | 101 | ```shell 102 | error[E0106]: missing lifetime specifier 103 | --> src/main.rs:2:8 104 | | 105 | 2 | x: &i32, 106 | | ^ expected lifetime parameter 107 | 108 | error: aborting due to previous error 109 | ``` 110 | 111 | 上面这段代码,编译器会提示你:`missing lifetime specifier`。这是因为,`y` 这个借用被传递到了 `let f = Foo { x: y }` 所在作用域中。所以需要确保借用 `y` 活得比 `Foo` 结构体实例长才行,否则,如果借用 `y` 被提前释放,`Foo` 结构体实例就会造成悬垂指针了。所以我们需要为其增加生命周期标记: 112 | 113 | ```rust 114 | struct Foo<'a> { 115 | x: &'a i32, 116 | } 117 | 118 | fn main() { 119 | let y = &5; 120 | let f = Foo { x: y }; 121 | 122 | println!("{}", f.x); 123 | } 124 | ``` 125 | 126 | 加上生命周期标记以后,编译器中的借用检查器就会帮助我们自动比对参数变量的作用域长度,从而确保内存安全。 127 | 128 | 再比如这个例子: 129 | 130 | ```rust 131 | fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { 132 | if x.len() > y.len() { 133 | x 134 | } else { 135 | y 136 | } 137 | } 138 | 139 | fn main() { 140 | let string1 = String::from("abcd"); 141 | let string2 = "xyz"; 142 | 143 | let result = longest(string1.as_str(), string2); 144 | println!("The longest string is {}", result); 145 | } 146 | ``` 147 | 148 | 因为 `longest` 的实例返回的是一个指针, 并且这个指针与 `x` 和 `y` 都有关系。所以必须确保`x` 和 `y` 活得比 `result` 长 (或者一样长),这便是显式生命周期注释的作用。 149 | 150 | ## 相关文章 151 | 152 | - [**Rust 中的所有权**](https://mogeko.github.io/2019/042/) 153 | - [**Rust 生命周期中的一些坑**](https://mogeko.github.io/2019/051/) 154 | -------------------------------------------------------------------------------- /content/posts/zh-cn/007.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Kindle 使用技巧" 3 | date: 2017-09-30T12:57:09+08:00 4 | draft: false 5 | tags: ["Kindle"] 6 | categories: ["不知道怎么分类的分类"] 7 | image: https://mogeko.github.io/blog-images/r/007/logo.jpg 8 | --- 9 | 10 | {{< featuredImage >}} 11 | 12 | 入手 Kindle 快一年半了,当时家里人都觉得我只是一时兴起,买回来迟早要吃灰的。但没想到我断断续续的用 Kindle 看了 100 本书了!!!感觉好有成就感。 13 | 14 | 今天就结合我对 Kindle 一年多的使用,谈谈我知道的一些 Kindle 的使用技巧。 15 | 16 | 欢迎补充~~ 17 | 18 | 19 | 20 | ## 导入电纸书 21 | 22 | ### 用 USB数据线 导入 23 | 24 | 将 Kindle 用 USB数据线 连上电脑,就可以将电纸书导入到 Kindle 中。优点:**简单实用,方便快捷** 缺点:**此方法导入的电纸书只会保存到本地,不会上传到云端上,如果手贱误删了,就没了🙄;必须有电脑和 USB 数据线才能使用** 25 | 26 | 将 Kindle 连上电脑 -> 打开 Kindle 对应的磁盘 -> 打开 `documents` 这个文件夹 -> 将你准备好的电纸书拖到这个文件夹中。 27 | 28 | ![用 USB数据线 导入](https://mogeko.github.io/blog-images/r/007/send2kindle_usb.png) 29 | 30 | Kindle 支持以下文件格式: 31 | 32 | - TXT 文件 (.txt) 33 | - Mobi 格式电子书 34 | - AZW3 格式电子书 35 | - Adobe PDF (.pdf) 文档 36 | - EPUB 格式电子书(多说 OS) 37 | - UMD 格式电子书(多说 OS) 38 | - JPEG 格式的图片(多说 OS) 39 | 40 | 推荐几个找书的网站: 41 | 42 | - [ForFrigg](http://forfrigg.com/) -> 这个网站非常好用,但是需要翻墙 43 | - [ManyBooks.net](http://manybooks.net/) -> 也挺好用,但网页是英文的 44 | - [好读](http://haodoo.net/) -> 网站是中文的 45 | 46 | ### 用邮箱传书 47 | 48 | 通过邮箱也可以为 Kindle 添加电纸书。优点:**添加到 Amazone 的云上,手滑了再下一遍就可以了;不需要电脑和数据线,有网就可以使用** 缺点:**麻烦;因为要转格式,所以慢得出奇(有一次,我上传了一本 15M 的漫画,它给我转了 3 个多小时!!);最大只能支持 50M 的文件,一次性上传的邮件的附件数不能超过 25 个;不支持 AZW3、EPUB 格式的电纸书** 49 | 50 | 先去 [管理我的内容和设备](https://www.amazon.cn/manageyourkindle) 51 | `我的设备` -> 点击你想推送的设备的 `···` -> 找到 `电子邮件:xxxx@kindle.cn` 52 | ![管理我的内容和设备](https://mogeko.github.io/blog-images/r/007/get_kindle_email.png) 53 | 54 | 然后用你的电子邮箱(你的个人电子邮箱,不是 `xxxx@kindle.cn`)新建一封电子邮件。收件人填上 `xxxx@kindle.cn`,附件附上你想上传的电纸书(每个文件小于 50M,个数不超过 25 个);其他的信息都不填;发送。 55 | 然后就等吧🙄等到 Amazon 把格式转好了,就会自动推送到你的 Kindle 上。如果发生任何问题,Amazon 会发邮件告诉你。 56 | 57 | 用邮箱发送到电纸书支持的格式: 58 | 59 | - Microsoft Word (.doc, .docx) 60 | - RTF 文件 (.rtf) 61 | - HTML(.htm, .html) 62 | - TXT 文件 (.txt) 63 | - Zip, x-zip 压缩文件(不能加密) 64 | - Mobi 格式电子书 65 | - JPEG (.jpg), GIF (.gif), Bitmap (.bmp) 和 PNG (.png) 格式的图片。 66 | - Adobe PDF (.pdf) 文档 67 | 68 | ## Send to Kindle 69 | 70 | 将文章推送到 Kindle 的方法有很多,这里介绍一个通过 Kindle 官方微信服务号推送文章到 Kindle 的方法。 71 | 先关注 亚马逊 Kindle 服务号(微信号:cn_Kindle),进入公众号 -> 今日/夜有阅 -> Send to Kindle 72 | ![Send to Kindle](https://mogeko.github.io/blog-images/r/007/send_to_kindle.png) 73 | 然后按照提示绑定账号,推送~~ 74 | 75 | ## 截图 76 | 77 | ### 用 Kindle 截图 78 | 79 | 其实 Kindle 也可以截图的,很惊讶有木有!!!其实我也是偶然发现的。用 Kindle 截图很简单,只需要同时单击屏幕的 `左上角、右下角` 或 `右上角、左下角` 。 80 | 81 | ![Kindle 截图](https://mogeko.github.io/blog-images/r/007/kindle_screenshot_1.png) 82 | 83 | 屏幕会刷新一遍(闪一下),然后就截好了。 84 | 85 | ### 查看、导出截图 86 | 87 | 在 Kindle 中是无法浏览截好的图的。 88 | 89 | 我们需要把 Kindle 接上电脑。截图就存在 Kindle 这个盘的根目录中。 90 | 91 | ![查看截图](https://mogeko.github.io/blog-images/r/007/kindle_screenshot_2.png) 92 | 93 | ## 标注整理工具 Clippings.io 94 | 95 | 传送门 -> [Clippings.io](https://www.clippings.io/) 96 | 97 | 通过导入 Clippings.txt 文件来操作;Web 应用,打开浏览器就可以用,而且支持二次编辑。可以绑定 印象笔记。 98 | ![Clippings.io](https://mogeko.github.io/blog-images/r/007/clippings.io.png) 99 | 100 | ## Reabble 101 | 102 | **觉得 Kindle 自带的 体验版网页浏览器 很辣鸡** 103 | **没错,它就是个辣鸡** 104 | 105 | 但是,配合神器 Reabble 也可以将辣鸡浏览器变成最好的 RSS 阅读器。 106 | 107 | 具体的情参考这篇文章 -> [Kindle 下的 RRS 神器](https://mogeko.github.io/2017/008/) 108 | 109 | ## 格式神器 Calibre 110 | 111 | > **Calibre** 是一个自由开源的电子书软件套装,可以用来组织、存放、以及管理电子书,支持大多数的电子书格式。同时也支持与许多流行的电子书阅读器进行同步,并可能在 DRM 的限制下转换电子书的格式。 112 | > 113 | > **calibre - 维基百科**[zh.wikipedia.org/wiki/Calibre](https://zh.wikipedia.org/wiki/Calibre) 114 | 115 | Calibre 一定是我用过的最好用到电纸书管理器了,它不仅可以转格式,还可以补全电纸书信息(如:书名、作者名、封面)绝对是强迫症福利!! 116 | 117 | ![Calibre](https://mogeko.github.io/blog-images/r/007/calibre.png) 118 | 119 | ## 盖泡面 120 | 121 | 不得不说,Kindle 的大小盖泡面刚刚好 \_(:з」∠)\_ 122 | 123 | ## 高级 124 | 125 | ### Kindle 换壁纸 126 | 127 | 本来为 Kindle 换壁纸是很简单的一件事,只需要把图片放到特定的文件夹里就可以了。但在某一次更新后,原来的方法用不了了。 128 | 129 | 不过也不是没有办法,虽然要比以前的方法复杂点,但比那些需要越狱的方法不知道高到哪里去了。 130 | 131 | 只需三步 132 | 133 | 1. 下载 [屏保更新文件](https://pan.baidu.com/s/1boIbJbT),并解压。 134 | 2. 将 `/screensaver/` 中的文件替换为你想使用的图片( **裁剪为 1024x758 大小** ),命名为 `bg_medium_ssXX.png` (**XX 替换为数字,从 00 开始,不能中断** ) 135 | 3. 将文件放入 Kindle 的根目录中。 136 | 4. 断开与电脑的连接,在 Kindle 的设置中点 `更新 Kindle` 等待大概 1 分钟就大功告成了。 137 | 138 | #### 在 Kindle 上走迷宫 139 | 140 | 知乎上看到的,感觉脑洞好大,好有趣啊😂😂😂 141 | 先用 [这个网站](http://www.mazegenerator.net/) 生成 `迷宫图片` 142 | 143 | ![Maze Generator](https://mogeko.github.io/blog-images/r/007/maze_generator.png) 144 | 145 | 然后结合上文提到的换壁纸的方法,将 `迷宫图片` 设为壁纸。以后无聊了,就可以拿出 Kindle 来走迷宫,还不费电哦 (≧∇≦)b 146 | 147 | ### Kindle + 树莓派 = 迷你电脑? 148 | 149 | 这里有个大神用 Kindle 连树莓派做了个迷你电脑 -> [Kindle 有哪些鲜为人知的使用技巧?- 阿黄 的回答](https://www.zhihu.com/question/27741189/answer/85786270) 150 | 我们这些低玩看看就好 | ・ω・’) 151 | 152 | ## 参考 153 | 154 | - [Kindle 有哪些鲜为人知的使用技巧?](https://www.zhihu.com/question/27741189) 155 | - [除了看书,Kindle 还能不能看些别的东西?](https://www.zhihu.com/question/32191135) 156 | -------------------------------------------------------------------------------- /content/posts/zh-cn/000.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "安装 Ubuntu 双系统" 3 | date: 2017-08-12 4 | draft: false 5 | tags: ["GNU/Linux", "Ubuntu", "Windows"] 6 | categories: ["生命不息 折腾不止", "笨办法学 Linux"] 7 | image: https://mogeko.github.io/blog-images/r/000/logo.jpg 8 | --- 9 | 10 | {{< featuredImage >}} 11 | 12 | 在很久以前就想试一试Linux了,一直没有实践。一是觉得太麻烦,二是怕把电脑弄坏。后来实践了一次后发现,其实并没有想象中那么难,这是一个完全独立的系统,与隔壁的Windows半毛钱关系都没有。把引导搞定就不怕了。 13 | 14 | 另外,如果想长期使用; 15 | **千万不要上最新的系统!!!** 16 | bug多得一逼 17 | 18 | 19 | 20 | ## 准备工作 21 | 22 | 1. 一个 >= 4g 的U盘 23 | 2. Ubuntu 的镜像(建议使用16.04) 24 | 3. UltraISO <- 用来制作引导盘 25 | 4. EasyBCD <- 用来制作、写入引导程序(如果想用 Ubuntu 来引导 Windows 的话也可以不用) 26 | 27 | ## 正文 28 | 29 | ### 制作引导盘 & 设置硬盘分区 30 | 31 | 首先要用 UltraISO 来制作一个引导盘 32 | 33 | 先打开 UltraISO -> 文件 -> 打开 -> 选择刚刚下好的那个镜像 34 | ![UltraISO](https://mogeko.github.io/blog-images/r/000/UltraISO_1.png) 35 | 36 | 然后 启动 -> 写入硬件映象 37 | ![UltraISO](https://mogeko.github.io/blog-images/r/000/UltraISO_2.png) 38 | 39 | 不出意外的话你应该可以看到这个 40 | ![UltraISO](https://mogeko.github.io/blog-images/r/000/UltraISO_3.png) 41 | 42 | 确保你的U盘能够被识别(红色框出来的地方) 43 | 44 | 先 **格式化** 在 **写入** 等它跑完,引导盘就制作完成了 45 | 46 | 然后设置分区,为 Ubuntu 空出块地方来 47 | 如果是 Windows 10 按 Win键 + X -> 磁盘管理(Windows 7 我记不到了,自己 Google 一下) 48 | 图我忘截了 ,,ԾㅂԾ,, 这里给一个官方的教程 [如何在 Windows 中对硬盘进行分区](https://support.microsoft.com/zh-cn/help/944248) 49 | 如果压缩出来是绿色的“可用空间”可能会出问题 50 | ->-> [解决方法](https://answers.microsoft.com/zh-hans/windows/forum/windows_7-windows_install/%E7%A3%81%E7%9B%98%E5%88%86%E5%8C%BA%E8%BD%AC/bd333d12-e04d-46f8-bcd4-91973bb56cb9?auth=1) 51 | 52 | ### 开始安装 53 | 54 | 然后重启,设置从U盘启动。 55 | 每个品牌的设置方法不一样,我的是惠普的笔记本,在启动时按F9。 56 | 台式机要进 BIOS 设置,**引导完了要记得改回来**,笔记本一般是一次性的。 57 | 58 | 然后就进入了安装界面 59 | ![install](https://mogeko.github.io/blog-images/r/000/install_1.jpg) 60 | 选择 中文简体 然后选择 安装 Ubuntu 61 | 62 | 选择 我现在不想连接 WiFi 网络 63 | ![install](https://mogeko.github.io/blog-images/r/000/install_2.jpg) 64 | 65 | 这个第三方软件选不选无所谓,不影响安装 66 | ![install](https://mogeko.github.io/blog-images/r/000/install_3.jpg) 67 | 点继续后会运行一会儿 68 | 69 | **重点来了!!!(敲黑板)** 70 | 在这里,如果想用 Ubuntu 引导 Windows 的话选第一个; 71 | 如果想用 Windows 引导 Ubuntu 的话选 其他选项。。 72 | 73 | **千万别选第二个!!!除非你不想要 Windows 了** 74 | **千万别选第二个!!!除非你不想要 Windows 了** 75 | **千万别选第二个!!!除非你不想要 Windows 了** 76 | 77 | 我这里选择 其他选项 78 | ![install](https://mogeko.github.io/blog-images/r/000/install_4.jpg) 79 | 80 | 然后开始创建分区 81 | 选择 空闲 -> 左下脚的 + 号 82 | ![install](https://mogeko.github.io/blog-images/r/000/install_5.jpg) 83 | 又搞忘截图了 \_(:з)∠)\_ 图片来自 84 | 85 | Ubuntu 分区的方式有很多种,具体可以自己 Google 86 | 87 | 开始创建第一个分区,我们创建 主分区 88 | ![install](https://mogeko.github.io/blog-images/r/000/install_6.png) 89 | 主分区就是系统分区,主分区不需要太大,也不能太小。。。 90 | 大小:如果想长期使用的话建议10g以上 91 | 分区类型:主分区 92 | 分区位置:起始位置 93 | 用于:Ext4 日志文件系统 94 | 挂载点:/ 95 | 96 | 第二个分区是 Swap分区 97 | ![install](https://mogeko.github.io/blog-images/r/000/install_7.png) 98 | Swap 分区 就是 交换分区 ,一般是内存的 1 ~ 2 倍 99 | *也有种说法认为 PC 上不需要 交换分区 100 | 大小:我给了4个g 101 | 分区类型:逻辑分区 102 | 分区位置:起始位置 103 | 用于:交换空间 104 | 105 | **重点又来了!!!** 106 | 第三个分区是 Boot分区 107 | ![install](https://mogeko.github.io/blog-images/r/000/install_8.png) 108 | Boot分区 是存放 启动程序 的位置,不需要太大,200M就够了,**但一定要吧盘符记住(一般是sda + 数字),一会儿要用** 109 | 大小:200M 110 | 分区类型:逻辑分区 111 | 分区位置:起始位置 112 | 用于:Ext4 日志文件系统 113 | 挂载点:/boot 114 | 115 | 第四个分区是 Home分区 116 | ![install](https://mogeko.github.io/blog-images/r/000/install_9.png) 117 | Home目录 存放音乐、图片及下载等文件的空间 118 | 大小:剩多少给多少 119 | 分区类型:逻辑分区 120 | 分区位置:起始位置 121 | 用于:Ext4 日志文件系统 122 | 挂载点:/home 123 | 124 | **重中之重来了!!!** 125 | 到这里分区的工作就做完了,下面设置引导程序 126 | ![install](https://mogeko.github.io/blog-images/r/000/install_10.jpg) 127 | **如果想让 Ubuntu 引导 Windows,就不用设置引导器的位置,默认就好,直接点 现在安装** 128 | **如果想让 Windows 引导 Ubuntu,“安装启动引导器的设备:”选择 Boot 分区 的盘符,再点 现在安装** 129 | 130 | 选择 shanghai 131 | ![install](https://mogeko.github.io/blog-images/r/000/install_11.jpg) 132 | 133 | 注册用户  **这里设置的密码是用户密码,不是 Root密码** 134 | ![install](https://mogeko.github.io/blog-images/r/000/install_12.jpg) 135 | 136 | 键盘布局选择 汉语 -> 汉语 137 | ![install](https://mogeko.github.io/blog-images/r/000/install_13.jpg) 138 | 139 | 开始安装,喝杯茶 ε=ε=ε=(~ ̄▽ ̄)~ 140 | ![install](https://mogeko.github.io/blog-images/r/000/install_14.jpg) 141 | 等它跑完,它会提醒你重启 142 | 143 | 到这里,Ubuntu 已经安装到你的电脑里了!!!鼓掌(●’◡’●)ノ♥ 144 | 145 | ### 添加启动引导 (Windows 引导 Ubuntu) 146 | 147 | 下面重启到 Windows(如果是 Ubuntu 引导 Windows 应该会显示一个紫色的框框,让你选系统。选择 Ubuntu 。) 148 | 149 | 打开 EasyBCD 150 | 添加新条目 -> Linux/BSD -> “驱动器:”选择 /Boot 所在的分区(也就是 200M 的那个)-> 添加条目 151 | ![EasyBCD](https://mogeko.github.io/blog-images/r/000/EasyBCD_1.png) 152 | 153 | 进 编辑引导菜单 确认一下 154 | ![EasyBCD](https://mogeko.github.io/blog-images/r/000/EasyBCD_2.png) 155 | 156 | 引导器制作完成,重启 157 | ![EasyBCD](https://mogeko.github.io/blog-images/r/000/start_up.jpg) 158 | 如果能进入 Ubuntu 的桌面,就说明成功了!!! 159 | 160 |
161 | 162 | 开始你的折腾之旅吧( ̄y▽ ̄)~ 163 | -------------------------------------------------------------------------------- /content/posts/zh-cn/053.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Rust 交叉编译" 3 | date: 2019-04-18T15:08:49+08:00 4 | draft: false 5 | tags: ["Rust", "Android", "GNU/Linux"] 6 | categories: ["从入门 到入坟"] 7 | --- 8 | 13 | 14 | 事情的起因要从一个叫 [ffsend](https://github.com/timvisee/ffsend) 的软件说起。ffsend 是一个用来操作 [Firefox Send](https://send.firefox.com) 的命令行工具,而 Firefox Send 是 Mozilla 推出的一款带有“阅后即焚”功能的文件分享工具;换句话说,用 ffsend 可以很方便的在命令行中分享 2.5GB 以下的任意文件。 15 | 我希望能在 Android 手机上通过 Termux 来使用 ffsend,不过 ffsend 的 [GitHub Releases](https://github.com/timvisee/ffsend/releases) 中并没有提供任何 ARM 架构的二进制可执行文件。 16 | 17 | ![GitHub Releases](https://mogeko.github.io/blog-images/r/053/ffsend-releases_1.png) 18 | 19 | “源码都给你了,没有 ARM 架构的版本自己编译一个不就有了?” 20 | 21 | 话是这么说,不过在 Termux 中编译并不见得是个好的方案。首先,你必须要安装一个大概 200M 的 rust,然后你还要下载各种编译时依赖,大概 160M;这一切就仅仅是为了一个 13.3M 大小的小应用。幸好还只是小应用,如果是更大的项目,已手机 CPU 的那点性能可能要编译一天。 22 | 23 | 交叉编译正好可以解决这一问题。得益于 gcc 等跨平台编译器 (链接器) 和 rust 的发展,我们可以很轻松的通过交叉编译的方式在电脑上编译出能在手机上运行的版本。 24 | 25 | ## 前期准备 26 | 27 | 首先,我们需要下载编译能够在 ARM 平台运行的软件所必须的运行库,也就是 `target`。 28 | 29 | 在命令行中运行 30 | 31 | ```shell 32 | $ rustup target list 33 | aarch64-apple-ios 34 | aarch64-fuchsia 35 | aarch64-linux-android (installed) 36 | aarch64-unknown-cloudabi 37 | aarch64-unknown-linux-gnu 38 | aarch64-unknown-linux-musl 39 | arm-linux-androideabi 40 | arm-unknown-linux-gnueabi 41 | arm-unknown-linux-gnueabihf 42 | ... 43 | ``` 44 | 45 | 这会为我们列出已经安装的和可以被安装运行库。 46 | 47 | 选择我们所需要的 `aarch64-linux-android`,使用以下命令安装 48 | 49 | ```shell 50 | rustup target add aarch64-linux-android 51 | ``` 52 | 53 | 然后我们还需要安装合适的链接器来配合 `target` 工作。对于 rust 这类比较贴近于硬件的语言,Google 为开发者们提供了一套完整的开发包,也就是 Android NDK;不过 Google 并没有提供独立的交叉编译工具链,但是我们可以自己从 Android NDK 中编译一份出来 (参考[这篇文档](https://developer.android.com/ndk/guides/standalone_toolchain))。 54 | 55 | 这是我从 Android NDK 中编译出来的一份用于交叉编译的工具链,目前只支持 Linux:[GitHub Releases](https://github.com/Mogeko/android-toolchain/releases/latest) 56 | 57 | 我手机的架构是 aarch64 (arm64),所以我应该下载的工具链是 `android-toolchain-linux-x86_64-arm64.tgz` 58 | 59 | > 用 Chrome 浏览器进行下载会报错,推荐在命令行中用 `wget` 或 `curl` 等工具下载 60 | > 61 | > ```shell 62 | > $ wget https://github.com/Mogeko/android-toolchain/releases/download/4.9/android-toolchain-linux-x86_64-arm64.tgz 63 | > ``` 64 | 65 | 下载好后将其解压,然后将 `android-toolchain//bin` 放入 `$PATH` 中。 66 | 67 | 至此,前期的准备工作就完成了。 68 | 69 | ## 实验交叉编译 70 | 71 | 我们需要先确保我们安装的 rust 运行库和编译工具链能够正常工作,顺便也可以讲解以下使用 rust 交叉编译的具体流程。 72 | 73 | 我们先用 `cargo`,新建一个最简单的项目 74 | 75 | ```shell 76 | cargo new hello 77 | ``` 78 | 79 | 这个项目的作用就是输出 `Hello, World` (使用 `cargo` 新建二进制项目时的示例代码) 80 | 81 | 然后,进入目录 `hello/src`,也就是项目源码的目录。使用 `rustc` 进行编译 82 | 83 | ```shell 84 | rustc -C linker="aarch64-linux-android-gcc" --target="aarch64-linux-android" main.rs 85 | ``` 86 | 87 | 我们可以看到一个被编译好的二进制文件 `main`,将其拷贝到手机上,便可以用 Termux 运行了。 88 | 89 | 这里的命令应该很好理解,相当于告诉 `rustc` 用 `aarch64-linux-android-gcc` 作为链接器,用 `aarch64-linux-android` 作为运行库来编译 `main.rs`,这样编译出来的程序自然是能在 aarch64 (arm64) 架构下运行了。 90 | 91 | 不过一般人都不会直接用 `rustc` 来编译程序,而是用 `cargo` 来管理 rust 项目。我们也可以使用 `cargo` 来进行交叉编译,只需要在项目的根目录中新建文件 `.cargo/config`,填写上如下的内容 92 | 93 | ```toml 94 | [target.aarch64-linux-android] 95 | linker = "aarch64-linux-android-gcc" 96 | ar = "aarch64-linux-android-ar" 97 | ``` 98 | 99 | 然后使用以下命令进行编译 100 | 101 | ```shell 102 | cargo build --target="aarch64-linux-android" 103 | ``` 104 | 105 | 编译好的二进制文件在 `hello/target/aarch64-linux-android/debug` 里。 106 | 107 | 将其拷贝到 Android 手机上用 Termux 运行 108 | 109 | ![Run with Termux](https://mogeko.github.io/blog-images/r/053/termux_1.jpg) 110 | 111 | 我们可以在 `.cargo/config` 中添加多条不同 `target` 的配置,然后在编译时通过 `--target=` 参数传递给 `cargo` 来实现灵活的跨平台编译。 112 | 113 | 例如,这条配置可以编译能在 Windows 中运行的程序 (工具链需要单独下载) 114 | 115 | ```toml 116 | [target.x86_64-pc-windows-gnu] 117 | linker = "x86_64-w64-mingw32-gcc" 118 | ar = "x86_64-w64-mingw32-ar" 119 | ``` 120 | 121 | ```shell 122 | cargo build --target="x86_64-pc-windows-gnu" 123 | ``` 124 | 125 | ## 编译 ffsend 126 | 127 | 首先去 ffsend 的 GitHub Release 下载最新版 ffsend 的源码,并解压 128 | 129 | ![GitHub Releases](https://mogeko.github.io/blog-images/r/053/ffsend-releases_2.png) 130 | 131 | ```shell 132 | wget https://github.com/timvisee/ffsend/archive/v0.2.44.tar.gz 133 | tar xvzf v0.2.44.tar.gz 134 | ``` 135 | 136 | 进入文件夹 `ffsend-0.2.44`,新建文件 `.cargo/config`,配置 `target` 和工具链。 137 | 138 | ```shell 139 | [target.aarch64-linux-android] 140 | linker = "aarch64-linux-android-gcc" 141 | ar = "aarch64-linux-android-ar" 142 | ``` 143 | 144 | 安装编译所需要的依赖 145 | 146 | ```shell 147 | sudo apt install build-essential cmake pkg-config libssl-dev 148 | ``` 149 | 150 | 使用 `cargo` 进行交叉编译 151 | 152 | ```shell 153 | cargo build --target="aarch64-linux-android" --release 154 | ``` 155 | 156 | 将编译好的文件 (`ffsend-0.2.44/target/aarch64-linux-android/`) 拷贝到 Android 手机上运行即可 157 | 158 | ![Run with Termux](https://mogeko.github.io/blog-images/r/053/termux_2.jpg) 159 | -------------------------------------------------------------------------------- /content/posts/zh-cn/059.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "安装 Manjaro 双系统" 3 | date: 2019-04-30T08:12:17+08:00 4 | draft: false 5 | tags: ["GNU/Linux", "Manjaro", "Windows"] 6 | categories: ["生命不息 折腾不止", "笨办法学 Linux"] 7 | --- 8 | 13 | 14 | ## 卸载 Ubuntu 与安装 Manjaro 15 | 16 | 昨天作死,不小心把 Ubuntu 给玩坏了。 17 | 18 | 直接桌面都进不了,只得重装。 19 | 20 | 好在我装的是 Ubuntu 和 Windows 的双系统,Ubuntu 挂了还有 Windows,重装系统也比较方便。而且正好我想尝试一下天下第一的 Arch Linux,所以就试着安装了 Manjaro。 21 | 22 |
23 | 24 | 当时差点没把我吓死,等我反应过来没截图的时候都已经开始装 Manjaro 了 (*꒦ິ⌓꒦ີ) 25 | 26 | 所以截图什么的等以后有机会再补吧 (千万不要!QAQ) 27 | 28 | ## 抢救资料 29 | 30 | 首先进入 Ubuntu 的 **emergency mode** 抢救一下重要的资料。 31 | 32 | 因为一般步骤是没有这部分的所以就不详细介绍了 其实是因为没有截图不知道怎么说 |・ω・`) 33 | 34 | 简单来说就是插上 U 盘,然后进入 **emergency mode**,将重要的资料复制到 U 盘上备份。 35 | 36 | ## 卸载 Ubuntu 37 | 38 | ### 将 Grub 引导改为 BCD 引导 39 | 40 | Grub 引导就是 Ubuntu 开机时那个紫色的引导界面。 41 | ![GRUB](https://mogeko.github.io/blog-images/r/059/grub.jpg) 42 | 而 BCD 引导则是Windows 开机时那蓝色的引导界面。 43 | ![BCD](https://mogeko.github.io/blog-images/r/059/bcd.jpg) 44 | Ubuntu 默认使用 Grub 引导开机,因为卸载 Ubuntu 会连同 Grub 一同卸载,所以我们需要先将引导方式从 Grub 改为 Windows 默认的 BCD。如果你使用的是 BCD 引导只需要 `编辑引导菜单`,删掉多余的引导项即可。 45 | 46 | 首先进入 Windows,下载一个 [EasyBCD](https://neosmart.net/EasyBCD/)。 47 | 48 | 然后选择 `BCD部署`,选择正确的分区 (Windows 所在的分区),正确的 MBR配置选项,然后编写 MBR 49 | ![配置 BCD](https://mogeko.github.io/blog-images/r/059/setting-bcd_1.png) 50 | 然后 `编辑引导菜单`,将多余的引导项删掉 (没有的话就不管) 51 | ![配置 BCD](https://mogeko.github.io/blog-images/r/059/setting-bcd_2.png) 52 | 53 | ### 使用磁盘管理工具卸载 Ubuntu 54 | 55 | 修复好引导后直接将 Ubuntu 整个从硬盘中删掉就可以了。 56 | 57 | 按 `Win + X` 调出开发者菜单,选择**磁盘管理** 58 | 59 | 删掉与 Ubuntu 相关的所有分区即可 60 | ![卸载 Ubuntu](https://mogeko.github.io/blog-images/r/059/remove-ubuntu.png) 61 | 62 | ## 刻录 Manjaro 启动盘 63 | 64 | 首先去 [Manjaro 官网](https://manjaro.org)或者镜像站下载最新的 Manjaro 镜像 (我下载的是 Xfce 桌面的版本) 65 | 66 | 这里推荐去[中科大的镜像站下载](https://mirrors.ustc.edu.cn/manjaro-cd/),因为部署在国内,速度会比较快一些。 67 | 68 | 下载好 Manjaro 镜像后准备一个空的 U 盘 (不小于 4 个 G),然后下载刻录工具 [Rufus](https://rufus.ie)。 69 | 70 | 下载好后打开 Rufus,选择刚刚准备的 U 盘和镜像,然后点`开始`开始刻录。 71 | ![刻录 Manjaro](https://mogeko.github.io/blog-images/r/059/burn-manjaro.png) 72 | 如果提示你`需要下载`就下载。 73 | **如果提示你选择刻录模式选择 DD** 74 | ![刻录 Manjaro](https://mogeko.github.io/blog-images/r/059/dd-mode.png) 75 | 76 | ## 开始安装 77 | 78 | 然后重启,设置从U盘启动。 每个品牌的设置方法不一样,我的是惠普的笔记本,在启动时按F9。 台式机要进 BIOS 设置,引导完了要记得改回来,笔记本一般是一次性的。 79 | 80 | 在这个界面将语言调成 `zh_CN` 81 | 82 | 然后选择 `Boot: Manjaro.x86_64` 83 | 84 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_1.png) 85 | 86 | 然后系统会从 U 盘中以 LiveCD 的模式启动,接着会进入这个欢迎界面 (安装程序)。 87 | 88 | 安装程序默认的语言是英文,不过左上角可以将语言改成 `中文 (Chinese)` 89 | 90 | 点 `启动安装程序 (Launch installer)` 按钮开始安装。 91 | 92 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_2.png) 93 | 94 | 提示我没有联网,不管他直接下一步 95 | 96 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_3.jpg) 97 | 98 | 位置选择`上海`,然后下一步 99 | 100 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_4.jpg) 101 | 102 | 键盘布局选择 `Chinese` - > `默认`即可 103 | 104 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_5.jpg) 105 | 106 | 终于到了最重要的分区环节了! 107 | 108 | 选择第三个选项:`手动分区` 109 | 110 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_6.png) 111 | 112 | 然后在弹出的对话框中选择空余的硬盘空间,点 `创建` 创建新的分区 113 | 114 | 一共要创建 4 个分区:`主分区 (/)`、`Home 分区 (/home)`、`启动分区 (/boot)` 和 `交换分区 (linuxswap)` 115 | 116 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_7.png) 117 | 118 | 简单介绍一下每个分区的作用: 119 | 120 | - 主分区 (/):也就是系统的根目录,相当于 Windows 的 C 盘;尽可能的大,但也不需要太大,日常使用的话 200 个 G 顶天了。 121 | - Home 分区 (/home):用户目录,你的图片、视频、游戏等资料文件都放在这里的,分完三个盘后剩下的空间全给他。 122 | - 启动分区 (/boot):引导文件存放的分区,1 个 G 就够了。 123 | - 交换分区 (linuxswap):一般与内存一样大 124 | 125 | 然后这里是我的分区方案,大家可以参看一下 (总共只有 200 个 G 的硬盘空间给 Linux): 126 | 127 | **主分区 (/):** 128 | 129 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_7.1.jpg) 130 | 131 | **Home 分区 (/home):** 132 | 133 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_7.2.jpg) 134 | 135 | **启动分区 (/boot):** 136 | 137 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_7.3.jpg) 138 | 139 | **交换分区 (linuxswap):** 140 | 141 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_7.4.jpg) 142 | 143 | **分完区后别忘了将主引导记录 (boot loader) 设置为启动分区 (/boot)!!!** 144 | 145 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_7.5.png) 146 | 147 | 分完区后设置用户信息,我比较懒所以让主用户和 Root 用户公用了一个密码 148 | 149 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_8.jpg) 150 | 151 | 最后再确认一下,没有问题就可以开始安装了 (重点看分区有没有问题) 152 | 153 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_9.jpg) 154 | 155 | 然后等进度条跑完就可以了 156 | 157 | ![安装 Manjaro](https://mogeko.github.io/blog-images/r/059/install_10.jpg) 158 | 159 | ## 配置新的 BCD 引导 160 | 161 | 然后重启到 Windows,打开 EasyBCD。 162 | 163 | 为我们刚刚安装的 Manjaro 配置 BCD 引导。将`分区`指向刚刚配置好的启动分区 (/boot) 164 | 165 | ![配置 BCD](https://mogeko.github.io/blog-images/r/059/setting-new-bcd.png) 166 | 167 | 然后重启,在选系统时选择 `Manjaro` 就进入 Manjaro 系统了 168 | -------------------------------------------------------------------------------- /content/posts/zh-cn/029.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "GNOME MPV | GNU/Linux 下一个不错的流媒体播放器" 3 | date: 2018-11-20T16:52:42+08:00 4 | draft: false 5 | tags: ["GNU/Linux"] 6 | categories: ["关于软件"] 7 | image: https://mogeko.github.io/blog-images/r/029/gnome_mpv.png 8 | --- 9 | 13 | 14 | 在 GNU/Linux 下看视频向来是一件麻烦事。[**VLC**](https://www.videolan.org/index.zh.html) 太过臃肿,[**MPV**](https://mpv.io/) 又太过简 (chǒu) 陋了。 15 | 16 | 那么,有没有一款播放器能兼顾美观与内在,随便还拥有较好的易用性和较强的定制能力呢? 17 | 18 | 当然是有了!**GNOME MPV** 就是这么一款播放器,它基于 **MPV**,继承了 **MPV** 强大的编解码器,以及其恐怖的定制能力 {{< spoiler >}}脚本才是 **MPV** 的灵魂 | ・ω・’){{< /spoiler >}}。同时又拥有较为美观方便的 GUI,简直是居家旅行必备的万能播放器啊!!😂😂😂 19 | 20 | 21 | 22 |
23 | 24 | 官网: 25 | 26 | GitHub 地址: 27 | 28 |
29 | 30 | {{< featuredImage >}} 31 | 32 | ## 依赖 33 | 34 | - autotools (只在构建时依赖) 35 | - autoconf-archive (只在构建时依赖) 36 | - pkg-config (只在构建时依赖) 37 | - gcc (只在构建时依赖) 38 | - intltool (只在构建时依赖) 39 | - python2 (只在构建时依赖) 40 | - **glib2** 41 | - **gtk3** 42 | - **libmpv** 43 | - youtube-dl (可选) 44 | 45 | ## 安装 46 | 47 | ### GNU/Linux packages 48 | 49 | - Arch Linux 50 | 51 | - Arch Linux (Git): 52 | - Debian testing: 53 | - Debian unstable: 54 | - Fedora (rpmfusion): 55 | - Frugalware: 56 | - OpenSUSE: 57 | - Gentoo: 58 | - Guix: 59 | - Solus: 60 | - Ubuntu: 61 | 62 | ### Source code 63 | 64 | 在终端中运行以下命令以构建并安装 65 | 66 | ```shell 67 | ./autogen.sh && make && sudo make install 68 | ``` 69 | 70 | ## 使用 71 | 72 | ### 配置 73 | 74 | 推荐使用 **MPV** 的配置文件来对 **GNOME MPV** (及 `mpv.conf` 和 `input.conf` ) 进行配置,这样一方面可以使配置兼容 **MPV**,另一方面可定制性更高。 75 | 76 | **首选项** -> 勾选 **加载 MPV 配置文件** 和 **加载 MPV 输入配置文件** -> 定位到 `mpv.conf` 和 `input.conf` 的位置 (Linux 下一般是 `~/.config/mpv/`) 77 | 78 | 以下是我目前使用的配置文件;因为只是轻度使用,所以比较简单 79 | 80 | 更多配置请参考:[MPV 配置文件示例](https://github.com/mpv-player/mpv/blob/master/etc/mpv.conf)  [MPV 输入配置文件](https://github.com/mpv-player/mpv/blob/master/etc/input.conf) 81 | 82 | **mpv.conf:** 83 | 84 | ```ini 85 | # 没有边框 86 | ##no-border 87 | 88 | # 记住断点 89 | seve-position-on-quit 90 | 91 | # 音/字幕轨选择 92 | ## 指定优先使用音轨(DVD使用ISO 639-1两位语言代码,MKV、MPEG-TS使用ISO 639-2 三位语言代码) 93 | alang=zh,chi 94 | ## 指定优先使用字幕轨(DVD使用ISO 639-1两位语言代码,MKV、MPEG-TS使用ISO 639-2 三位语言代码) 95 | slang=zh,chi 96 | 97 | # 音/字幕轨加载方式 98 | ## 加载视频文件的外部音频文件方式。(fuzzy 加载含有视频文件名的全部音频文件) 99 | audio-file-auto=fuzzy 100 | ## 加载视频文件的外部字幕文件方式。(fuzzy 加载含有视频文件名的全部字幕文件) 101 | sub-auto=fuzzy 102 | ## 字幕编码 103 | sub-codepage=utf-8:gb18030 104 | ``` 105 | 106 | **input.conf:** 107 | 108 | ```ini 109 | # 退出方式 110 | q quit-watch-later 111 | Q quit-watch-later 112 | ESC quit-watch-later 113 | CLOSE_WIN quit-watch-later 114 | 115 | # 音量调整 116 | WHEEL_UP volume 5 117 | WHEEL_DOWN volume -5 118 | UP volume 5 119 | DOWN volume -5 120 | 121 | # 播放/暂停 122 | MBTN_LEFT cycle pause 123 | ``` 124 | 125 | ### 插件 126 | 127 | **MPV** 之所以广受好评,一个很重要的原因就是它强大的插件系统。**GNOME MPV** 基于 **MPV**,自然是继承了大把的插件,这也让 **GNOME MPV** 的可玩性提升了一个档次。 128 | 129 | #### 插件安装方法 130 | 131 | **MPV**: 将插件脚本粘贴到 `~/.config/mpv/scripts` 文件夹中 132 | 133 | **GNOME MPV**: **首选项** -> **插件** -> 选择插件脚本的路径 134 | 135 | #### 推荐几个插件 136 | 137 | 这里推荐几个我比较常用的插件。 138 | 139 | 更多插件请参考:[**MPV** 插件脚本列表](https://github.com/mpv-player/mpv/wiki/User-Scripts) 140 | 141 | **autoload.lua** 142 | 143 | 自动加载当前播放文件目录里的视频文件到播放列表,也就是自动连播。 144 | 145 | [GitHub 地址](https://github.com/mpv-player/mpv/blob/master/TOOLS/lua/autoload.lua)  [下载地址 (不保证最新)](https://github.com/Mogeko/blog-commits/releases/download/029/autoload.lua) 146 | 147 | **save-sub-delay.lua** 148 | 149 | 有时候外挂字幕时间轴不正确,调好之后,这个脚本会保存delay信息。 150 | 151 | [GitHub 地址](https://github.com/zc62/mpv-scripts/blob/master/save-sub-delay.lua)  [下载地址 (不保证最新)](https://github.com/Mogeko/blog-commits/releases/download/029/save-sub-delay.lua) 152 | 153 | **find_subtitles.lua** 154 | 155 | 自动使用 [**subliminal**](https://github.com/Diaoul/subliminal) 从字幕站匹配并下载字幕。 156 | 157 | **find_subtitles.lua 默认下载的是英文字幕,下载中午字幕需要在脚本中将 38 行的 `en` 替换换成 `zh`** 158 | 159 | 依赖: 160 | 161 | - python2 {{< spoiler >}}实际上是 subliminal 依赖 python2{{< /spoiler >}} 162 | 163 | - subliminal -> [关于 subliminal (安装方法)](https://mogeko.github.io/2018/030) 164 | 165 | [GitHub 地址](https://github.com/directorscut82/find_subtitles/blob/master/find_subtitles.lua)  [下载地址 (我调整过的版本)](https://github.com/Mogeko/blog-commits/releases/download/029/find_subtitles.lua) 166 | -------------------------------------------------------------------------------- /content/posts/zh-cn/048.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "为博客添加独立域名" 3 | date: 2019-03-28T14:39:37+08:00 4 | draft: false 5 | tags: [] 6 | categories: ["折腾博客的二三事"] 7 | --- 8 | 13 | 14 | 关于如何给部署在 GitHub Pages 上的博客添加独立域名,上网有很多教程。但是他们要么方法已经过时了,要么就没有说清楚原理,弄得我走了很多弯路。 15 | 16 | 今天我就来写一篇面向小白的教程,尽我所能讲清楚怎么做?为什么? 17 | 18 | ## 选购域名 19 | 20 | 可能很多人已经买好了域名了,你可以[跳过这部分](#GitHub 上的设置) 21 | 22 | 要想给博客绑定独立域名,首先你得拥有一个域名。首先你得去域名注册网站购买域名,如果想在国内的域名商手里购买的话我比较推荐[万网](https://wanwang.aliyun.com/),国外的话比较推荐 [GoDaddy](),因为他们分别是中国最大和世界最大的域名注册服务商。**千万不要为了贪便宜,去那些不正规的小域名商那里注册,水很深的。** 23 | 24 | 我的与域名是在 GoDaddy 买的,因为国内买不到 `.me` 的域名,而我又恰恰有点喜欢这个域名 (简短好记,还是一个英文单词,最关键的是这个单词还特别适合博客!!)。价格的话只要不是 `.com` 这样“高级货”,一般的域名都是 120 左右一年,平均下来每个月 10 块钱左右 (就当充个会员了),另外第一年一般都有很高的折扣,比如我这个 `.me` 的域名第一年就只要了我 24 (不过 WHOIS 目录中的个人信息加密需要另外收费) 25 | 26 | 具体选购过程大致就是:**搜索域名 -> 将喜欢的域名加入购物车 -> 付款 -> 购买成功**,跟去某宝买东西差不多,这里就不再赘述了。 27 | 28 | ## GitHub 上的设置 29 | 30 | 购买好域名后,首先到 GitHub 上,你部署博客的那个 Git 仓库的设置里,在 `Custom domain` 这里填上你购买的域名 31 | 32 | ![Settings on GitHub](https://mogeko.github.io/blog-images/r/048/gh_setting_CNAME.png) 33 | 34 | 或者在创建一个名为 `CNAME` 的文件放在根目录,其中的内容**只**写上你的域名,像这样 35 | 36 | ```CNAME 37 | example.com 38 | ``` 39 | 40 | 如果使用了 Travis CI 这类持续集成服务来部署博客的话推荐使用第二种方式进行设置。 41 | 42 | 如果 `Custom domain` 下方有 `Enforce HTTPS` 这个选项的话一并勾选上 43 | 44 | ![Settings on GitHub](https://mogeko.github.io/blog-images/r/048/gh_setting_HTTPS.png) 45 | 46 | GitHub 跟 Let's Encrypt 有合作,如果勾选了这个选项,Let's Encrypt 就会给你的博客签发一张 SSL 证书,免费的。 47 | 48 | ## DNS 上的设置 49 | 50 | 终于到了最关键的一步了。 51 | 52 | **现在要做的是让域名指向正确的 IP 地址,GitHub 为此提供了四条 IP,使用 [A 记录](https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F#%E8%AE%B0%E5%BD%95%E7%B1%BB%E5%9E%8B) 指向这四条 IP 地址就可以了** 53 | 54 | 这四条 IP 分别是 (来自[GitHub 的官方文档](https://help.github.com/en/articles/setting-up-an-apex-domain)): 55 | 56 | > **185.199.108.153  185.199.109.153  185.199.110.153  185.199.111.153** 57 | 58 | 你需要到你购买域名的域名商的域名管理页面进行设置,虽然不同的域名商域名管理页面不同,不过原理都是相同的。 59 | 60 | 这里以 GoDaddy 为例,进入**域名管理器 (Domain Manager) -> DNS 管理 (Manage DNS)** 61 | 62 | ![Setting on DNS](https://mogeko.github.io/blog-images/r/048/DNS_setting_1.png) 63 | 64 | 在**记录 (Record)** 项目中点击 **添加 (ADD)** 65 | 66 | ![Setting on DNS](https://mogeko.github.io/blog-images/r/048/DNS_setting_2.png) 67 | 68 |
69 |

类型 (Type):A
70 | 主机 (Host):@
71 | 指向 (Points to):185.199.108.153
72 | TTL:保持默认@ 表示顶级域名,也就是你注册的域名本身 73 |

74 |
75 | 76 | 以相同的方式配置剩下的三条 IP 地址 77 | 78 |
79 |

80 | 类型 (Type):A
81 | 主机 (Host):@
82 | 指向 (Points to):185.199.109.153
83 | TTL:保持默认
84 |

85 |
86 |
87 |

88 | 类型 (Type):A
89 | 主机 (Host):@
90 | 指向 (Points to):185.199.110.153
91 | TTL:保持默认
92 |

93 |
94 |
95 |

96 | 类型 (Type):A
97 | 主机 (Host):@
98 | 指向 (Points to):185.199.111.153
99 | TTL:保持默认
100 |

101 |
102 | 103 | 等几分钟 (刷新 DNS 缓存),然后在浏览器中输入你的域名,回车;不出意外的话你应该可以看到你的博客了。 104 | 105 | ### 设置二级域名 106 | 107 | 除了通过顶级域名进行访问外你还可以设置二级域名,例如 `www.mogeko.me` 和 `blog.mogeko.me` 108 | 109 | 仍然在**记录 (Record)** 中**添加 (ADD)** 110 | 111 | ![Setting on DNS](https://mogeko.github.io/blog-images/r/048/DNS_setting_3.png) 112 | 113 | 不过这次添加的类型 (Type) 不是 **A 记录**而是 **CNAME** 114 | 115 |
116 |

117 | 类型 (Type):CNAME
118 | 主机 (Host):www
119 | 指向 (Points to):@
120 | TTL:保持默认
121 |

122 |
123 |
124 |

125 | 类型 (Type):CNAME
126 | 主机 (Host):blog
127 | 指向 (Points to):@
128 | TTL:保持默认
129 |

130 |
131 | 132 | 此时,你不仅可以通过 `example.com` 访问你的博客,还可以通过 `www.example.com` 或 `blog.example.com` 访问到你的博客。 133 | 134 | ## 其他玩法 135 | 136 | 除了将域名绑定给博客外博客,还可以用域名干一些别的事。 137 | 138 | 比如,**使用 A 记录将 `mail.mogeko.me` 这个二级域名指向 `207.46.149.80` 就可以“搭建”一个 [临时邮箱](http://mail.mogeko.me)服务** 139 | (感谢 萌咖 | MoeClub.org 提供的服务器) 140 | 141 |
142 | 143 | 如果你还有一台拥有**公网 IP** 的服务器,可玩性就更高了! 144 | 145 | 如果有能力,你甚至可以拥有自己的[搜索引擎](https://nutch.apache.org) 146 | 147 | ## 相关文章 148 | 149 | - [**使用 Hugo + GitHub Pages 搭建个人博客**](https://mogeko.github.io/2018/018/) 150 | - [**使用 Hexo + GitHub Pages 建立自己的博客**](https://mogeko.github.io/2017/002/) 151 | - [**使用 Travis CI 自动部署 Hugo 博客**](https://mogeko.github.io/2018/028/) 152 | - [**为博客添加免费的 CDN (Cloudflare)**](https://mogeko.github.io/2019/056/) 153 | -------------------------------------------------------------------------------- /content/posts/zh-cn/028.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "使用 Travis CI 自动部署 Hugo 博客" 3 | date: 2018-11-19T11:28:18+08:00 4 | draft: false 5 | tags: ["Hugo"] 6 | categories: ["折腾博客的二三事"] 7 | --- 8 | 9 | 通过 Travis CI 来部署 Hugo 或者 Hexo 博客可能在配置的时候会麻烦一点,但配置好后确实是方便了不少。特别是对于 Hugo 这种没有部署插件的静态网站生成器,只能手动部署到 GitHub。 10 | 11 | 网上有很多关于用 Travis 自动部署 Hexo 的文章,却没看到几篇关于 Hugo,虽然原理都差不多,但细节上还是有很多容易让小白头疼的地方,所以今天我就来教教如何用 Travis 来自动部署 Hugo。 12 | 13 | 14 | 15 | ## 正文 16 | 17 | 废话不多说,我们开始吧! 18 | 19 | ### 设置代码仓库 20 | 21 | 首先确保你的 GitHub 上有这两个仓库:**用来部署博客的 `[用户名].github.io`** 和 **用来存放“源码”的 `Blog`** 22 | 23 | 这里与别的*使用 Travis 自动部署博客*教程稍微有点不同,别人家大多上将博客的**源码**放在 `[用户名].github.io` 的分支上,而不是向我一样开两个仓库 24 | 25 | 开两个仓库的好处有: 26 | 27 | - 结构更清晰。与博客相关的内容都在 **`Blog`**仓库里, **`[用户名].github.io`** 只用来提供一个 GitHub Pages 的服务 28 | - 「源码」存放在 **`master`** 分支下,`clone` 更快 {{< spoiler >}}我不知道上我的原因还是 GitHub 或是 Git 的原因,我从 GitHub clone 除 master 分支以外的分支时,下载速度贼慢,只有几百 kb 每秒,clone 一个 「源码」 都至少要半个多小时{{< /spoiler >}} 29 | 30 | ### 申请 Token 31 | 32 | 然后要去 GitHub 上申请一个新的 [personal access token](https://github.com/settings/tokens/new)。 33 | 34 | **Token description** 也就是 Token 的名字,可以随便填。然后**一定要勾选上 `repo` 上的所以项目,然后别的项目一个都不要选**。点 `Generate token` 生成 Token。 35 | 36 | ![Get Token](https://mogeko.github.io/blog-images/r/028/get_token.png) 37 | 38 | 然后记下 Token 的值,也就是我打码的那一部分 (一定要记下来,因为离开这个页面之后就没有机会再次查看了) 39 | 40 | ![Get Token](https://mogeko.github.io/blog-images/r/028/get_token_api.png) 41 | 42 | ### 设置 Travis CI 43 | 44 | 接着来到 [Travis CI](https://travis-ci.org/account/repositories),使用 GitHub 帐号登录;然后为 **`Blog`** 仓库打上 ☑,然后点 `setting`。 45 | 46 | ![设置 Travis CI](https://mogeko.github.io/blog-images/r/028/set_travis_1.png) 47 | 48 | 然后填写 **Environment Variables**。 49 | 50 | - **`Name`** 填写: `GITHUB_TOKEN` 51 | - **`Value`** 填写:刚刚在 GitHub 申请到的 Token 的值 52 | 53 | ![设置 Travis CI](https://mogeko.github.io/blog-images/r/028/set_travis_2.png) 54 | 55 | 点击 `Add` 56 | 57 | ### 编写 .travis.yml 58 | 59 | 在 **Blog** 的目录下创建并编辑一个 `.travis.yml` 文件。这个文件的作用是告诉 **Travis CI** 如何部署你的博客的 60 | 61 | ```yaml 62 | language: go 63 | 64 | go: 65 | - "1.8" # 指定Golang 1.8 66 | 67 | # Specify which branches to build using a safelist 68 | # 分支白名单限制:只有 master 分支的提交才会触发构建 69 | # branches: 70 | # only: 71 | # - master 72 | 73 | install: 74 | # 安装最新的hugo 75 | - wget https://github.com/gohugoio/hugo/releases/download/v0.51/hugo_0.51_Linux-64bit.deb 76 | - sudo dpkg -i hugo*.deb 77 | # 安装主题 78 | - git clone [你使用的主题的 Git 地址] 79 | 80 | script: 81 | # 运行hugo命令 82 | - hugo 83 | 84 | after_script: 85 | # 部署 86 | - cd ./public 87 | - git init 88 | - git config user.name "[你的名字]" 89 | - git config user.email "[你的邮箱]" 90 | - git add . 91 | - git commit -m "Update Blog By TravisCI With Build $TRAVIS_BUILD_NUMBER" 92 | # GitHub Pages 93 | - git push --force --quiet "https://$GITHUB_TOKEN@${GH_REF}" master:master 94 | # GitHub Pages 95 | - git push --quiet "https://$GITHUB_TOKEN@${GH_REF}" master:master --tags 96 | 97 | env: 98 | global: 99 | # GitHub Pages 100 | - GH_REF: [用来部署博客的 Git 地址] 101 | 102 | deploy: 103 | provider: pages # 重要,指定这是一份github pages的部署配置 104 | skip-cleanup: true # 重要,不能省略 105 | local-dir: public # 静态站点文件所在目录 106 | # target-branch: master # 要将静态站点文件发布到哪个分支 107 | github-token: $GITHUB_TOKEN # 重要,$GITHUB_TOKEN是变量,需要在GitHub上申请、再到配置到Travis 108 | # fqdn: # 如果是自定义域名,此处要填 109 | keep-history: true # 是否保持target-branch分支的提交记录 110 | on: 111 | branch: master # 博客源码的分支 112 | ``` 113 | 114 | 将上面的配置文件按照你的实际情况更改。 115 | 116 | 然后将代码提交到 **Blog 仓库** 里。等个一两分钟,就可以在 [Travis CI](https://travis-ci.org/) 上查看部署情况了 117 | 118 | 绿色 代表部署成功  黄色 代表正在部署  红色 代表部署失败  灰色 代表部署被取消 119 | 120 | ![Travis CI 部署](https://mogeko.github.io/blog-images/r/028/run_travis.png) 121 | 122 | 然后再去你的博客,如果没有出什么偏差的话就说明部署成功了 | ・ω・’) 123 | 124 | 以后的话就只需要把写好的文章推送到 **Blog 仓库** 下就可以了,就不需要再自己编译然后手动推送了 {{< spoiler >}}甚至连 Hugo 都可以不要装 | ・ω・’){{< /spoiler >}} 125 | 126 | ## 附录 以及一些坑 \_(:з)∠)\_ 127 | 128 | ### 添加 .gitignore 文件 129 | 130 | 在 Hugo 本地编译时会产生 `public` 文件夹,但是这个文件夹中的内容对于 **Blog 仓库** 来说是不需要的 (包括用来存放主题的 `themes` 文件夹和主题产生的 `resources` 文件夹也是不需要的) 131 | 132 | 我们可以用一个`.gitignore` 文件来排除这些内容 133 | 134 | 在 Blog 目录下创建并修改 `.gitignore`,然后提交到 GitHub 135 | 136 | ```shell 137 | public/* 138 | themes/* 139 | resources/* 140 | ``` 141 | 142 | ### Travis CI 的分支白名单 143 | 144 | 我给你的 `.travis.yml` 文件中有怎么一段 145 | 146 | ```yaml 147 | # Specify which branches to build using a safelist 148 | # 分支白名单限制:只有 master 分支的提交才会触发构建 149 | branches: 150 | only: 151 | - master 152 | ``` 153 | 154 | 这一段的作用是限制触发构建的分支。这在正常开发中是很重要的配置,特别是在团队 (多人) 开发的场景中。 155 | 156 | 不过这里不存在这个场景,并且如果配置错了会出很大的问题,很容易坑到小白, {{< spoiler >}}比如说我 \_(:з)∠)\_ {{< /spoiler >}}所以默认就给注释掉了。 157 | 158 | 如果你晓得这是干啥的,并且觉得有必要的话,可以考虑开启 159 | 160 | ## 相关文章 161 | 162 | - [**使用 Hugo + GitHub Pages 搭建个人博客**](https://mogeko.github.io/2018/018/) 163 | - [**为 Hugo 添加谈笑风生区 (Gitalk)**](https://mogeko.github.io/2018/024/) 164 | - [**为 Hugo 博客添加字数统计**](https://mogeko.github.io/2018/033/) 165 | - [**Leavelt 主题优化**](https://mogeko.github.io/2018/025/) 166 | - [**为博客添加独立域名**](https://mogeko.github.io/2019/048/) 167 | - [**为博客添加免费的 CDN (Cloudflare)**](https://mogeko.github.io/2019/056/) 168 | - [**为 LeaveIt 主题添加阅读进度条**](https://mogeko.github.io/2019/070/) 169 | -------------------------------------------------------------------------------- /content/posts/zh-cn/091.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "《八方旅人》隐藏结局开启方式" 3 | subtitle: 旅途的最后 4 | date: 2022-01-10T20:16:16Z 5 | draft: false 6 | tags: ["第九艺术", "OCTOPATH TRAVELER"] 7 | categories: ["关于第九艺术"] 8 | image: 9 | description: "  “——活着,就是一场旅行。”" 10 | --- 11 | 12 | 17 | 18 | > “——活着,就是一场旅行。” 19 | 20 | ## 团长和阿尔法丝,在那之后 21 | 22 | - 前置条件: 23 | 1. 完成八位主角的所有主线剧情 24 | 2. 完成支线任务[命中注定之人(1&2)](https://mogeko.me/posts/zh-cn/089) 25 | 3. 完成支线任务[寻找父亲的旅行者克里斯(1&2)](https://mogeko.me/posts/zh-cn/090) 26 | - NPC: 27 | 1. 江湖艺人团长 28 | 2. 阿尔法丝 29 | 3. 克里斯 30 | - 地图:(希·沃尔基 -> 北希·沃尔基森道)-> 西希·沃尔基森道 31 | 32 | --- 33 | 34 | 在达成所有前置条件后。通过世界地图传送到**希·沃尔基**,然后经**北希·沃尔基森道**来到**西希·沃尔基森道**。 35 | 36 | ![OCTOPATH_TRAVELER_2022_1_10_20_59_10](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_10_20_59_10.png) 37 | 38 | 在**西希·沃尔基森道**中找到**江湖艺人团长**。与之交谈,触发任务。 39 | 40 | ![OCTOPATH_TRAVELER_2022_1_10_21_03_58](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_10_21_03_58.png) 41 | 42 | 继续向右走,触发战斗。 43 | 44 | ![OCTOPATH_TRAVELER_2022_1_10_21_06_29](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_10_21_06_29.png) 45 | ![OCTOPATH_TRAVELER_2022_1_10_21_06_38](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_10_21_06_38.png) 46 | 47 | 战斗结束后,继续与**团长**和**阿尔法丝**交流,打听到**克里斯**的下落。 48 | 49 | ![OCTOPATH_TRAVELER_2022_1_10_21_07_57](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_10_21_07_57.png) 50 | 51 | 任务完成。 52 | 53 | ![OCTOPATH_TRAVELER_2022_1_10_21_08_13](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_10_21_08_13.png) 54 | 55 | ## 旅途的最后 (隐藏结局) 56 | 57 | - 前置条件:[团长和阿尔法丝,在那之后](#团长和阿尔法丝,在那之后) 58 | - NPC: 59 | 1. 江湖艺人团长 60 | 2. 克里斯 61 | - 地图:西希·沃尔基森道 -> 荷鲁布尔古战场遗址 -> 终结之门 -> 最后的演出 62 | 63 | --- 64 | 65 | 完成支线任务**团长和阿尔法丝,在那之后**后,继续与**团长**对话,触发任务。 66 | 67 | ![OCTOPATH_TRAVELER_2022_1_10_21_11_04](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_10_21_11_04.png) 68 | ![OCTOPATH_TRAVELER_2022_1_11_0_00_05](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_00_05.png) 69 | 70 | 然后打开世界地图,会发现多了一个**荷鲁布尔古战场遗址** (无法步行前往,只能通过世界地图传送)。 71 | 72 | ![OCTOPATH_TRAVELER_2022_1_11_0_00_47](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_00_47.png) 73 | ![OCTOPATH_TRAVELER_2022_1_11_0_00_33](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_00_33.png) 74 | 75 | 这块区域中没有宝箱,也没有普通敌人。沿路走到尽头,来到**终结之门**。 76 | 77 | (此地为最后的存档点,穿过**终结之门**就无法回头了) 78 | 79 | ![OCTOPATH_TRAVELER_2022_1_11_0_02_09](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_02_09.png) 80 | ![OCTOPATH_TRAVELER_2022_1_11_0_02_20](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_02_20.png) 81 | 82 | 在**终结之门**中,有八团鬼火,分别对应八位主角的主线剧情中的八个最终 Boss。 83 | 84 | 依次调查并打败它们。(战斗过程:略) 85 | 86 | ![OCTOPATH_TRAVELER_2022_1_11_0_04_41](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_04_41.png) 87 | ![OCTOPATH_TRAVELER_2022_1_11_0_04_49](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_04_49.png) 88 | 89 | 完成后,中间的最高处会打开一个门,穿过它,来到**最后的演出** 90 | 91 | 继续往上走,游戏会要求你分割队伍,因为最终 Boss 需要用两个队伍分别打 (八位主角都要用到)。 92 | 93 | ![OCTOPATH_TRAVELER_2022_1_11_0_09_31](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_09_31.png) 94 | ![OCTOPATH_TRAVELER_2022_1_11_0_10_17](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_10_17.png) 95 | ![OCTOPATH_TRAVELER_2022_1_11_0_10_38](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_10_38.png) 96 | 97 | 打倒最终 Boss,救下**克里斯**。(战斗过程:略) 98 | 99 | ![OCTOPATH_TRAVELER_2022_1_11_0_15_24](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_15_24.png) 100 | ![OCTOPATH_TRAVELER_2022_1_11_0_15_42](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_15_42.png) 101 | ![OCTOPATH_TRAVELER_2022_1_11_0_16_19](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_16_19.png) 102 | ![OCTOPATH_TRAVELER_2022_1_11_0_16_51](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_16_51.png) 103 | ![OCTOPATH_TRAVELER_2022_1_11_0_16_58](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_16_58.png) 104 | ![OCTOPATH_TRAVELER_2022_1_11_0_17_06](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_17_06.png) 105 | ![OCTOPATH_TRAVELER_2022_1_11_0_17_14](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_17_14.png) 106 | 107 | 任务完成。 108 | 109 | ![OCTOPATH_TRAVELER_2022_1_11_0_17_30](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_17_30.png) 110 | ![OCTOPATH_TRAVELER_2022_1_11_0_18_48](https://mogeko.github.io/blog-images/r/091/OCTOPATH_TRAVELER_2022_1_11_0_18_48.png) 111 | 112 | 113 | 114 | 124 | 125 | [神官]: https://octopath.huijiwiki.com/wiki/欧菲莉亚 126 | [学者]: https://octopath.huijiwiki.com/wiki/塞拉斯 127 | [商人]: https://octopath.huijiwiki.com/wiki/泰瑞莎 128 | [剑士]: https://octopath.huijiwiki.com/wiki/奥伯里克 129 | [舞者]: https://octopath.huijiwiki.com/wiki/普蕾米罗斯 130 | [药师]: https://octopath.huijiwiki.com/wiki/阿尔芬 131 | [盗贼]: https://octopath.huijiwiki.com/wiki/提利昂 132 | [猎人]: https://octopath.huijiwiki.com/wiki/海茵特 133 | -------------------------------------------------------------------------------- /content/posts/zh-cn/024.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "为 Hugo 添加谈笑风生区 (Gitalk)" 3 | date: 2018-11-16T12:57:09+08:00 4 | draft: false 5 | tags: ["Hugo"] 6 | categories: ["折腾博客的二三事"] 7 | --- 8 | 9 | {{< notice warning "warning" >}} 10 | Gitalk 可能存在[安全问题](https://github.com/gitalk/gitalk/issues/339), 建议使用 [utteranc](https://utteranc.es) 作为代替。 11 | {{< /notice >}} 12 | 13 | [Hugo](https://gohugo.io) 是一个强大的静态网页生成器,使用 go 开发。速度贼快,还有 “时时预览” 等特性。不过 Hugo 还比较年轻,没有像 [NexT](https://theme-next.iissnan.com) 那样功能强大,成熟稳定的主题。所以很多东西需要自己动手撸。 14 | 15 | 就例如评论系统。 16 | 17 | 18 | 19 | ## 关于 Gitalk 20 | 21 | ![Gitalk](https://mogeko.github.io/blog-images/r/024/gitalk.png) 22 | 23 | - 官方网址: 24 | - 在线示例: 25 | 26 | Gitalk 是一个基于 GitHub Issue 和 Preact 开发的评论插件。它支持多种语言 (包括 en、zh-CN、zh-TW、es-ES、fr),并自动判断当前语言。最重要的是 Gitalk 使用的是 GitHub Issue 的 api,不依赖任何第三方平台。也就是说,只要 GitHub 不倒闭,你的评论系统就不会被关闭。 27 | 28 | ## 添加谈笑风生区 29 | 30 | {{< notice info "Obsolete" >}} 31 | 本站目前使用的主题是 [zzo](https://github.com/zzossig/hugo-theme-zzo) 32 | {{< /notice >}} 33 | 34 | ~~本博客使用的主题是:[Leavelt](https://github.com/liuzc/LeaveIt)~~ 35 | 36 | 不同主题可能有所区别,但原理都是类似的 37 | 38 | ### 原理 39 | 40 | 众所周知,Hugo 会将 **Markdown 文档** 按照 **主题 (包括 HTML 模板、CSS、JavaScript 等)** 编译成静态网页 41 | 42 | 那么我们只需要将 Gitalk 作为一个 `
` 插入到 HTML 模板中,然后在 `config.toml` 中添加相关配置,就可以实现“谈笑风生区”了 43 | 44 | ### 创建 GitHub Application 45 | 46 | 首先要去 GitHub 上创建一个 [GitHub Application](https://github.com/settings/applications/new) 47 | 48 | ![GitHub Application](https://mogeko.github.io/blog-images/r/024/get_GitHub_Application.png) 49 | 50 | 点击创建 51 | 52 | 记下 `Client ID` 和 `Client Secret`,以后要用 53 | 54 | ![Client ID & Client Secret](https://mogeko.github.io/blog-images/r/024/get_id&secret.png) 55 | 56 | ### 添加 gitalk.html 模板 57 | 58 | 接下来为主题添加 `gitalk.html` 模板。 59 | 60 | 在主题的 `layouts/partials` 文件夹中创建 `gitalk.html` 文件,写下如下代码 61 | 62 | ```html 63 | {{ if .Site.Params.enableGitalk }} 64 |
65 | 66 | 67 | 85 | {{ end }} 86 | ``` 87 | 88 | ### 定位放 Gitalk 的位置 89 | 90 | 然后使用 Chrome 自带的 DevTools 分析一下网页结构,找到放 Gitalk 的位置 91 | 92 | ![get id or class](https://mogeko.github.io/blog-images/r/024/get_class.png) 93 | 94 | 我们可以看见已经 Leavelt 为我们预留了 “谈笑风生区” 的位置,不过里面什么东西都没有。记下该 `div` 的`class` 或者 `id` (如果你使用的主题没有预留 “谈笑风生区”,可以记下你准备放 Gitalk 的位置附近 `div` 的`class` 或者 `id`,并以此定位) 95 | 96 | 打开 VSCode,搜索包含刚刚找到的 `class` 或者 `id` 的 HTML 模板 (一般是 `single.html`) 97 | 98 | ![插入 Gitalk 模板](https://mogeko.github.io/blog-images/r/024/set_div.png) 99 | 100 | 在模板中插入`{{ partial "gitalk.html" . }}` 101 | 102 | ### 配置 config.toml 103 | 104 | 在 `config.toml` 中添加以下配置 105 | 106 | ```toml 107 | [params] 108 | enableGitalk = true 109 | 110 | [params.gitalk] 111 | clientID = "[Client ID]" # Your client ID 112 | clientSecret = "[Client Secret]" # Your client secret 113 | repo = "mogeko.github.io" # The repo to store comments 114 | owner = "Mogeko" # Your GitHub ID 115 | admin= "Mogeko" # Required. GitHub repository owner and collaborators. (Users who having write access to this repository) 116 | id= "location.pathname" # The unique id of the page. 117 | labels= "gitalk" # GitHub issue labels. If you used to use Gitment, you can change it 118 | perPage= 15 # Pagination size, with maximum 100. 119 | pagerDirection= "last" # Comment sorting direction, available values are 'last' and 'first'. 120 | createIssueManually= false # If it is 'false', it is auto to make a GitHub issue when the administrators login. 121 | distractionFreeMode= false # Enable hot key (cmd|ctrl + enter) submit comment. 122 | ``` 123 | 124 | 将 `[Client ID]` 替换为 GitHub Application 的 Client ID 125 | 126 | 将 `[Client Secret]` 替换为 GitHub Application 的 Client Secret 127 | 128 | 将 `repo` 设置为你的博客的地址 129 | 130 | 将 `owner` 和 `admin` 设置为你的 GitHub ID 131 | 132 | 更多配置请参考: 133 | 134 | 设置好后,将编译好的网站推送到 GitHub 上,不出意外的话应该就可以看见评论框了 (Gitalk 在 `hugo server` 中是不会启用的) 135 | 136 | ![Gitalk](https://mogeko.github.io/blog-images/r/024/done.png) 137 | 138 | **添加谈笑风生区后还不能立即使用,需要用你的 GitHub 账号登陆并初始化。每篇博客都要** 139 | 140 | ## 相关文章 141 | 142 | - [**使用 Hugo + GitHub Pages 搭建个人博客**](https://mogeko.github.io/2018/018/) 143 | - [**使用 Travis CI 自动部署 Hugo 博客**](https://mogeko.github.io/2018/028/) 144 | - [**为 Hugo 博客添加字数统计**](https://mogeko.github.io/2018/033/) 145 | - [**Leavelt 主题优化**](https://mogeko.github.io/2018/025/) 146 | - [**为博客添加独立域名**](https://mogeko.github.io/2019/048/) 147 | - [**为博客添加免费的 CDN (Cloudflare)**](https://mogeko.github.io/2019/056/) 148 | - [**为 LeaveIt 主题添加阅读进度条**](https://mogeko.github.io/2019/070/) 149 | -------------------------------------------------------------------------------- /content/posts/zh-cn/003.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Hexo 美化" 3 | date: 2017-08-28 4 | draft: false 5 | tags: ["Hexo"] 6 | categories: ["折腾博客的二三事"] 7 | image: https://mogeko.github.io/blog-images/r/003/logo.png 8 | --- 9 | 10 | {{< featuredImage >}} 11 | 12 | 虽然 NexT 的主题很漂亮,但问题是太受欢迎了,都快烂大街了。 13 | 好在它是一个开源项目,我们可以通过修改它的代码来个性话你的博客。 14 | 这篇教程要涉及到一些前端知识,可能没有那么 Novice friendly。 15 | 16 | **因为涉及到对 NexT 代码的修改,搞不好,可能引起 Hexo 无法工作。所以强烈建议使用 Git 对 NexT 进行备份。** 17 | 具体使用方法请自行 Google。 18 | 19 | 20 | 21 | ## 准备工作 22 | 23 | 1. 一颗能折腾的心。 24 | 2. 一定的前端知识。 25 | 26 | ## 正文 27 | 28 | ### 最简单的方法 29 | 30 | 美化你的 Hexo 的最简单方法 -> [安装我修改过的 NexT](https://github.com/Mogeko/hexo-theme-next) 31 | 在 Hexo 目录中使用命令 32 | 33 | ```shell 34 | git clone https://github.com/Mogeko/hexo-theme-next.git themes/next 35 | ``` 36 | 37 | *记得删掉原来安装过的 NexT。 38 | 39 | ### 手动美化 Hexo 40 | 41 | 如果有能力,推荐跟我一起手动改代码。 42 | 最好能明白我给你的代码都是做什么的,将来万一出了问题,也有个找到问题的方向。 43 | 44 | #### 圆形头像(头像旋转) 45 | 46 | NexT 默认的头像是方的。也不是说不好看,就是觉得不习惯,这个要看个人喜好。 47 | 在 `/source/css/_custom/custom.styl` 中添加一下代码就可以吧头像弄成圆的 48 | 49 | ```css 50 | // 圆形头像 51 | .site-author-image { 52 | border-radius: 50%; 53 | -webkit-border-radius: 50%; 54 | -moz-border-radius: 50%; 55 | transition: 1.4s all; 56 | } 57 | ``` 58 | 59 | 然后,添加以下代码可以让头像在鼠标停留时旋转 180° 60 | 61 | ```css 62 | // 头像旋转 63 | .site-author-image:hover { 64 | -webkit-transform: rotate(360deg); 65 | -moz-transform: rotate(360deg); 66 | -ms-transform: rotate(360deg); 67 | -transform: rotate(360deg); 68 | } 69 | ``` 70 | 71 | #### 点击头像跳转到 `关于我` 页面 72 | 73 | 第一次用 Next,习惯性点了一下头像,本以为会跳转到什么页面,结果什么都没有发生,才发现那根本不是超链接。加上 `关于我` 页面正好没地方放,(觉得官方把 `关于我` 页面放进 menu 里很蠢)所以决定为头像增加一个超链接,跳转到 `关于我` 页面。 74 | 首先需要新建一个 `about` 页面,在 Hexo 文件夹中使用一下命令 75 | 76 | ```shell 77 | hexo new page "about" 78 | ``` 79 | 80 | 在 `[Hexo 文件夹]/source/about/index.md` 中编辑介绍自己的内容。 81 | 82 | 然后在 `/layout/_macro/sidebar.swig` 中,用一个 `` 标签把头像包起来就可以了 83 | 像这样 84 | 85 | ```html 86 | 87 | 88 | {{ theme.author }} 91 |

{{ theme.author }}

92 |
93 | 94 | ``` 95 | 96 | ![跳转到'关于我'页面](https://mogeko.github.io/blog-images/r/003/line_about.png) 97 | **注意:href= 一定要填 `"/about/"`** 98 | 99 | #### 修改侧边滚动条的样式 100 | 101 | 同样的,看个人喜好。你可以将侧边滚动条的样式修改得和我一样,(只对 webkit 内核的浏览器有效)只需要在 `/source/css/_custom/custom.styl` 中添加 102 | 103 | ```css 104 | // 更好的侧边滚动条 105 | ::-webkit-scrollbar { 106 | width: 10px; 107 | height: 10px; 108 | } 109 | ::-webkit-scrollbar-button { 110 | width: 0; 111 | height: 0; 112 | } 113 | ::-webkit-scrollbar-button:start:increment,::-webkit-scrollbar-button:end:decrement { 114 | display: none; 115 | } 116 | ::-webkit-scrollbar-corner { 117 | display: block; 118 | } 119 | ::-webkit-scrollbar-thumb { 120 | border-radius: 8px; 121 | background-color: rgba(0,0,0,.2); 122 | } 123 | ::-webkit-scrollbar-thumb:hover { 124 | border-radius: 8px; 125 | background-color: rgba(0,0,0,.5); 126 | } 127 | ::-webkit-scrollbar-track,::-webkit-scrollbar-thumb { 128 | border-right: 1px solid transparent; 129 | border-left: 1px solid transparent; 130 | } 131 | ::-webkit-scrollbar-track:hover { 132 | background-color: rgba(0,0,0,.15); 133 | } 134 | ::-webkit-scrollbar-button:start { 135 | width: 10px; 136 | height: 10px; 137 | background: url(../images/scrollbar_arrow.png"> no-repeat 0 0; 138 | } 139 | ::-webkit-scrollbar-button:start:hover { 140 | background: url(../images/scrollbar_arrow.png"> no-repeat -15px 0; 141 | } 142 | ::-webkit-scrollbar-button:start:active { 143 | background: url(../images/scrollbar_arrow.png"> no-repeat -30px 0; 144 | } 145 | ::-webkit-scrollbar-button:end { 146 | width: 10px; 147 | height: 10px; 148 | background: url(../images/scrollbar_arrow.png"> no-repeat 0 -18px; 149 | } 150 | ::-webkit-scrollbar-button:end:hover { 151 | background: url(../images/scrollbar_arrow.png"> no-repeat -15px -18px; 152 | } 153 | ::-webkit-scrollbar-button:end:active { 154 | background: url(../images/scrollbar_arrow.png"> no-repeat -30px -18px; 155 | } 156 | ``` 157 | 158 | #### 顶部阅读进度条 159 | 160 | 这个要稍微复杂点,需要改动 4 个文件。 161 | 完成后就可以拥有向我一样的顶部阅读进度条。 162 | 163 | 首先,在`/layout/_partials/header.swig` 模板文件里加上进度条的 `div`: 164 | 165 | ```html 166 |
167 | ``` 168 | 169 | 在这个位置 170 | ![顶部阅读进度条](https://mogeko.github.io/blog-images/r/003/top_scroll_bar_1.png) 171 | 然后在`/source/css/_custom/custom.styl` 文件中为我们的进度条添加样式 172 | 173 | ```css 174 | // 顶部阅读进度条 175 | .top-scroll-bar { 176 | position: fixed; 177 | top: 0; 178 | left: 0; 179 | z-index: 9999; 180 | display: none; 181 | width: 0; 182 | height: 2px; 183 | background: #6d6d6d; 184 | } 185 | ``` 186 | 187 | 再然后,新建一个 js脚本 文件 `/source/js/src/custom/custom.js`,来控制我们的进度条。 188 | 189 | ```js 190 | $(document).ready(function () { 191 | $(window).scroll(function(){ 192 | $(".top-scroll-bar").attr("style", "width: " + ($(this).scrollTop() / ($(document).height() - $(this).height()) * 100) + "%; display: block;"); 193 | }); 194 | }); 195 | ``` 196 | 197 | 最后,将我们新建的那个 js脚本引入到模板,使其生效。 198 | 在 `/layout/_scripts/commons.swig` 中,加入 199 | 200 | ```html 201 | 'src/custom/custom.js' 202 | ``` 203 | 204 | 在这个位置 205 | 206 | ![顶部阅读进度条](https://mogeko.github.io/blog-images/r/003/top_scroll_bar_2.png) 207 | 208 | ## 相关文章 209 | 210 | - [**使用 Hexo + GitHub Pages 建立自己的博客**](https://mogeko.github.io/2017/002/) 211 | - [**使用 Hexo Hey 管理你的博客**](https://mogeko.github.io/2017/004/) 212 | - [**在你的文章中添加 B站的视频**](https://mogeko.github.io/2017/005/) 213 | - [**为博客添加独立域名**](https://mogeko.github.io/2019/048/) 214 | - [**为博客添加免费的 CDN (Cloudflare)**](https://mogeko.github.io/2019/056/) 215 | --------------------------------------------------------------------------------