mirror of
https://github.com/SouthFox-D/SouthFox-D.github.io.git
synced 2024-11-25 08:26:51 +01:00
1701 lines
481 KiB
XML
1701 lines
481 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<search>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>2023 年终总结</title>
|
||
<link href="/2023/12/2023%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%93/"/>
|
||
<url>/2023/12/2023%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%93/</url>
|
||
|
||
<content type="html"><![CDATA[<p>什么,已经要 2024 年了?!</p><span id="more"></span><h2 id="幸运"><a href="#幸运" class="headerlink" title="幸运"></a>幸运</h2><blockquote><p>And even when I might fall down,</p><p>I know my luck come back around.</p></blockquote><p>今年如果如果要选出一个关键词的话,那么就是「幸运」吧,每次找工都是海投简历快要绝望的时候「刚好」被「捞」到了。首先是三月份的实习,距离家的位置还算不远。作为一家还算大型的企业做事十分垂直,做的事多都是一些填表单之事,基本上很容易被替代。也「幸好」我有 <code>Emacs</code> ,在一大堆服务器上翻找工程文件里 blame 是谁提交的代码,在一大堆编译产物翻找定位时真得救了我的命。</p><p>这段时间就像是静止了一样:每天被闹钟逼迫着起床;然后走到附近的公交站(甚至因为这样和公交车司机混了个脸熟);半小时后下公交,然后走向大厦;等电梯(有时人太多也会选走楼梯);到工位打开电脑;工;下班后在等公交;座半小时公交; 车站下车然后回家。在一座小城找到一份对于当地人耳熟能详企业的工作,如果能一直这样下去也还算是不错吧。但因为 2023 年寒冬实在太冷,冷意已经让大多数企业都得凝住呼吸,生怕机体的热量散失。所以自然是没有什么位置留给新来者的,甚至同组的一位实习快一年的小哥都没有转正的机会,所以当时间一到,我就只好潇洒走人了。</p><p>然后七月到十月就待在家里,算是一个小小的 gap time 吧,可能这个情况会一直持续到明年,真是这样的话本篇博文可能就没有那么多内容,写到这里就应该写点什么明年展望就结笔了,但生活总是像个迷,并没有给我这种发展。</p><p>十一月还是打算「出洞」,打算呼吸点新鲜空气。但是就业市场寒冬更甚,简历比起三月份更加沉底(哪怕开启广域模式),而且临近年关,也没有什么公司打算在这时候招人,正当我已经打算放弃「回洞」时,没想到就正好 HIT 到一家了。一家「幸运」的在今年拉到投资逆流而上就正好在这时招兵买马的公司,刚好也觉得我「折腾」的一大堆东西也「不容易」所以就这么对上了。一切都是那么恰好,但就是工作地点离家超过两千公里,虽然地点当初是在招聘软件自己选的,真发生时却还是有点恍惚。就算临行前故作坚定但潜意识下估计也是一大堆思绪组成的乱麻吧,头次座飞机、一落地就要开始找中介寻找房子、在名宿和租房地点两头跑搬运整理东西、甚至为了一台炸了的服务器就这么修到凌晨三点,不敢相信报到当天我的黑眼圈该重到什么地步。不过如今我喝着热茶写出这些事也就代表一切都已落定。</p><h2 id="坚定"><a href="#坚定" class="headerlink" title="坚定"></a>坚定</h2><blockquote><p>好像大自然只支持一种理解能力,养活了四足动物就养不活禽鸟,养活了会爬的东西就养不活会飞的东西</p></blockquote><p>可能还有一件拖了很久的事「有幸」在三个月的 gap time 里想好了,那就是「坚定的自我认同」,虽然说之前的人生里一直知道这件事但是却一直没有调度它导致这个任务一直在挂起,不知道是真觉得还早还是因为一直被压抑了呢?</p><p>我作为在这跟熵的「无情之手」永恒对抗下的一个生命,从海底的那隆起的石塔中「逃脱」而出,花了几十亿年将自己的足迹散步到这个星球并永远地改变了这里且绝不停歇嗡嗡震动的玩意,到底意味着什么呢?或者「在十个当中只得一个」意味着什么呢?我想生命「幸好」不总是一样,允诺了在每次分裂复制时不同的空间,造就了生命的可塑性,或许就连作为其象征——链条底层结构都「改朝换代」了几次。</p><h2 id="展望"><a href="#展望" class="headerlink" title="展望"></a>展望</h2><p>作为「幸运」的一年,在年末找到了一份「幸运」的工作,也有时间一直做了之前一直想做的事,比如烘焙之类的,也体会到了「面多加水, 水多加面」是一件多窘迫的事。明年也没有什么特别的展望了,毕竟今年的多数事已经开始将我水豚化了,一些事情看起来很大很可怕但最后压到头上可能只是一个「橘子」,完全没有必要去付出超出的担忧。希望我明年能像我以为的这么处事不惊下去吧,不论是工作上的事、自己一个人潇洒待着抑或是打算走进一段亲密关系、不论「幸运」还是「没那么幸运」。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 随笔 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 随笔 </tag>
|
||
|
||
<tag> 年终总结 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>如何杀死一个去中心化网络?</title>
|
||
<link href="/2023/06/%E5%A6%82%E4%BD%95%E6%9D%80%E6%AD%BB%E4%B8%80%E4%B8%AA%E5%8E%BB%E4%B8%AD%E5%BF%83%E5%8C%96%E7%BD%91%E7%BB%9C%EF%BC%9F/"/>
|
||
<url>/2023/06/%E5%A6%82%E4%BD%95%E6%9D%80%E6%AD%BB%E4%B8%80%E4%B8%AA%E5%8E%BB%E4%B8%AD%E5%BF%83%E5%8C%96%E7%BD%91%E7%BB%9C%EF%BC%9F/</url>
|
||
|
||
<content type="html"><![CDATA[<p>例如联邦宇宙(<code>Fediverse</code>)。</p><p><img src="https://media.southfox.me/ipfs/bafkreiht6bsh4u5ncv3ezxbkvyinkbhqxh6sjxfnsz2vw6lifnsa3jzllq" alt="头图"></p><span id="more"></span><blockquote><p>这篇文章是一篇翻译,原文为 <a href="https://ploum.net/2023-06-23-how-to-kill-decentralised-networks.html">How to Kill a Decentralised Network (such as the Fediverse) </a></p></blockquote><p>现在是 2023 年。整个互联网都在科技巨头的帝国掌握下吗?不,因为有一些小村落还在反抗这种趋势,其中一些村落开始聚集,形成「联邦宇宙」。</p><p>随着 Twitter 和 Reddit 上的发生的争论,联邦宇宙开始获得名气和注意,一些人开始在日常生活中使用。帝国开始注意到了。</p><h2 id="资本家反对竞争"><a href="#资本家反对竞争" class="headerlink" title="资本家反对竞争"></a>资本家反对竞争</h2><p>正如 Fecebook 著名投资人 Peter Thiel 所说:“竞争是对于失败者说的”。是的,对于那些总将「市场总是对的」挂在嘴边的人来说,身处市场中却并不想要市场,他们想要垄断。自成立以来, Facebook 一直非常小心地消灭竞争对手。最简单的办法就是收购每一个可能成为竞争对手的公司。例如 Instagram、WhatsApp 被收购只是因为产品吸引了用户的注意并有可能为 Fecebook 蒙上阴影。</p><p>但联邦宇宙是买不到的。联邦宇宙是一个不同服务器通过协议(ActivityPub) 进行连接的非正式组织(informal group)。这些服务器甚至运行着不同的软件(Mastodon 是最著名的一个,但你也可以运行 Pleroma、Pixelfed、Peertube、WriteFreely、Lemmy 等)。</p><p>你无法买下一个去中心化网络!</p><p>但还有另外一种办法:让它变得无关紧要。这正是谷歌对 XMPP 所做的事。</p><h2 id="谷歌如何加入-XMPP-联盟"><a href="#谷歌如何加入-XMPP-联盟" class="headerlink" title="谷歌如何加入 XMPP 联盟"></a>谷歌如何加入 XMPP 联盟</h2><p>20 世纪末,即时通讯工具风头无限。第一个获得巨大成功的应用是 ICQ,随后是 MSN 。 MSN 就类似于今天的 Tiktok :青少年可以在没有大人陪伴下在这个世界里度过数小时或数天的时间。</p><p>因为 MSN 是微软的一部分,谷歌希望与其竞争,并于 2005 年发布了 Google Talk,并将其界面整合在 Gmail 里。请记住在那时还没有智能手机或是小体积的网页应用。应用程序必须安装在计算机上,所以 Gmail 的网页交互是开创性的。MSN 甚至在某个时间是和操作系统捆绑在一起的,很难将其卸载。与内置在操作系统的预装应用相比,在 Gmail 用网页进行构建的聊天是一种更贴近用户的方式。</p><p> 在谷歌和微软开始争夺霸权地位时,自由极客们开始尝试构建去中心化的即时通信。就像电子邮件一样,XMPP 是一种联邦协议:多个服务器之间可以通过协议互相通信,每个用户可以使用任意客户端与任意服务器上的任意用户进行通信。ActivityPub 和联邦宇宙也是这样运作的。</p><p>2006 年,Google Talk 开始实现 XMPP 兼容,谷歌正在认真考虑 XMPP 协议。2008 年,当我正在工作时,我的手机响了。在电话里,有人告诉我:“嗨,我是谷歌,我们想雇佣你。”我们打了几个电话,他们是通过 XMPP 的开发者列表找到了我,并表示正在寻找 XMPP 服务器管理员。</p><p>所以谷歌确实在加入联盟,这有多酷?这意味着每个 Gmail 用户都可以变成 XMPP 用户。这只会对 XMPP 有好处,是吗?我高兴坏了。</p><h2 id="谷歌如何杀死-XMPP"><a href="#谷歌如何杀死-XMPP" class="headerlink" title="谷歌如何杀死 XMPP"></a>谷歌如何杀死 XMPP</h2><p>当然现实没有那么美好。首先,尽管制定了 XMPP 标准,谷歌仍然在实行着自己没有任何人审查的封闭实现。事实证明,他们并不总是尊重他们正在制定的协议。他们并没有完全实现所有标准,这迫使 XMPP 的降低速度以便适应。好的功能没有在 XMPP 客户端中实现或使用,因为它们与 Google Talk 不兼容(头像功能都花了非常久时间才在 XMPP 里实装)。联邦还总会被破坏:有时是几小时或数天,谷歌服务器和常规 XMPP 服务器之间无法进行通信。XMPP 社区成为了谷歌服务器的监管员和除错员,发布违规和停机信息(我做了好几次这种事,可能这就是为什么有这份工作的原因吧)。</p><p>而且由于 Google Talk 用户远多于「真正的 XMPP」用户,因此「不关心 Google Talk 用户」的情况并不多。新人发现 XMPP 并不是 Google Talk 用户的经历让人非常沮丧,因为他们接触的大多数都是 Google Talk 用户。他们认为他们可以轻易的与 Google Talk 用户沟通,但这相当于他们在用 Google Talk 的基本版或是降级版本。典型的 XMPP 名单主要由 Google Talk 用户和一些极客组成。</p><p>在 2013 年,谷歌意识到大多数 XMPP 交互都是在 Google Talk 用户之间进行的。他们并不关心遵守没有百分之百掌握在他们手里的协议,所以他们中止了合作并宣布不进行结盟。并开始踏上一条即时通讯软件的漫长探索,从 Hangout 开始(随后是 Allo、Duo ,之后我就记不清了)。</p><p>正如预料一样,谷歌用户没有太多感受,事实上,他们什么也没意识到。最坏的情况是他们的一些联系人离线了,就这样。但对于 XMPP 联邦来说,相当于绝大多数用户凭空蒸发了一样。即使是最狂热的 XMPP 拥趸,也要创建一个谷歌帐号和朋友保持联系。请记住:对于他们来说,我们就是单纯离线了,这是我们的错。</p><p>虽然 XMPP 仍然是一个存在并且活跃的社区,但它未从这次打击中恢复过来。对谷歌投入了过高的期待导致了巨大的失望然后就这么被遗忘了。XMPP 变得小众,以至于群聊应用开始流行时(Slack、Discord),自由软件社区重新造了一个协议(Matrix)与之竞争,但群聊已经可以通过 XMPP 实现了。(免责声明:我没有研究过 Matrix 协议,所以我不知道在技术层面上与 XMPP 相比如何。我只确信它解决了类似的问题并与 XMPP 在相同的空间上竞争。)</p><p>(译按: Matrix 和 XMPP 对比在 Matrix 官网 FAQ 上就有回答(虽然被标注为过时了):<a href="https://matrix.org/docs/legacy/faq/">What is the difference between Matrix and XMPP? - FAQ</a>)</p><p>如果谷歌未加入 XMPP 或从未被视为其中的一部分,今天的 XMPP 会有所不同吗?没有人知道。但我相信它会成长的更慢,可能,更健康。它将比今天更大、更重要,它将成为默认的去中心化通讯平台。但有一点是肯定的:如果谷歌没有加入,XMPP 不会比现在更糟糕。</p><h2 id="并不是首例:微软的心机"><a href="#并不是首例:微软的心机" class="headerlink" title="并不是首例:微软的心机"></a>并不是首例:微软的心机</h2><p>谷歌对 XMPP 做的事并不新鲜。事实上,在 1998 年,微软的工程师 Vinod Vallopllil 就明确写下了一篇「削弱 OSS (译按:开源软件)攻击」的文章,其中他建议「去商品化协议和应用程序……]通过拓展这些协议或是开发新协议,我们可以拒绝 OSS 项目进入市场。</p><p>随着 Windows 2000 的发布,微软将这理论付诸实践,Windows 2000 提供了对 Kerberos 安全协议的支持。但该协议得到了拓展。这些拓展规范可以免费下载,但必须要接受禁止实现这些拓展的许可证。一旦点击「确定」,你就无法使用 Kerberos 的任何开源版本。这么做的目标就是消灭任何与之竞争的网络项目例如 Samba 。</p><p>Glyn Moody 在他的著作《Rebel Code》中讲述了这一传闻,并表明扼杀开源和去中心化项目是确有预谋的目标。它从来不是随机发生的,也不是由什么坏运气导致的。</p><p>微软还采用了类似的策略,通过专有格式(文件格式可以被视为交换数据的协议)的 Microsoft Office 来确保在办公市场的主导地位。当替代方案(OpenOffice 然后是 LibreOffice)在处理 doc/xls/ppt 格式能力变得足够好时,微软发布了一种他们称之为「开放和标准化」的新格式。格式故意弄得非常复杂(20,000 页的规范!),而且最重要的是,它是错误的。是的,标准中引入了一些错误,这意味完整实现 OOXML 格式的软件的表现将与 Microsoft Office 不同。</p><p>这些错误以及政治游说是促使慕尼黑市恢复 Linux 迁移的原因之一。所以是的,这个策略运作良好。因为如今 docx、xlsx 和 pptx 仍然是标准格式。来源:我就在那里,由慕尼黑市间接支付费用,使 LibreOffice OOXML 的渲染更接近 Microsoft 的渲染,而不是遵循规范。</p><p>后按:这种策略有一个维基百科词条:</p><ul><li><p><a href="https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish">Embrace, extend, and extinguish - wikipedia</a></p></li><li><p><a href="https://zh.wikipedia.org/wiki/%E6%8B%A5%E6%8A%B1%E3%80%81%E6%89%A9%E5%B1%95%E5%86%8D%E6%B6%88%E7%81%AD">拥抱、扩展再消灭 - 维基百科</a></p></li></ul><h2 id="Meta-和联邦宇宙"><a href="#Meta-和联邦宇宙" class="headerlink" title="Meta 和联邦宇宙"></a>Meta 和联邦宇宙</h2><p>不了解历史的人终究会重蹈覆辙,这就是现在 Meta (译按:Facebook 的公司现在改名叫 Meta 了)和联邦宇宙发生的事。 </p><p>有传言称 Meta 会实现「联邦宇宙兼容」,这意味着你可以通过 Mastodon 账户关注 Instagram 上的人。</p><p>我不知道这些传言是真是假,Meta 是否在考虑实现它。但我在 XMPP 和 OOXML 方面的经验告诉我一件事情,如果 Meta 加入联邦宇宙,Meta 将是唯一的胜者。事实上现在的反应已经让他们开始赢了:联邦宇宙在阻止 Meta 与不阻止 Meta 之间存在分歧。如果继续发生这种情况,这将意味着一个支离破碎令人沮丧的俩半式联邦,对新来者而言没有什么吸引力。</p><p>后按:这些传言得到了证实,一位来自 fosstodon.org 的 Mastodon 管理员 kev 已被邀请参加和 Meta 的非正式会议。他做出了最好的选择:他礼貌地拒绝掉了,最重要的是,公开了该电子邮件以对其用户保持透明。谢谢 kev !</p><ul><li><a href="https://fosstodon.org/@kev/110592625692688836">相关邮件截图和回复 - fosstodon.org</a></li></ul><p>我知道我们都梦想着让我们所有的朋友和家人进入到联邦宇宙上,这样我们就可以完全避免专有网络。但联邦宇宙并不寻求市场主导地位或是利润,联邦宇宙并不寻求增长。它提供了一个自由的场所。加入联邦宇宙的人都是那些寻求自由的人。如果人们还没有准备好或者并不追寻自由,那也没关系。他们有权留在专有平台上,我们不应该强迫他们进入联邦宇宙。我们不应该不惜一切代价试图容纳尽可能多的人。我们应该诚心诚意并确保人们加入联邦宇宙是因为他们想分享其背后的一些价值观。</p><p>在无脑增长、不惜一切代价的意识形态下与 Meta 竞争,我们肯定会失败。他们是这场比赛的大师,他们试图让每个人都进入他们的领域,让人们使用他们熟悉的武器与他们竞争。</p><p>联邦宇宙只能坚守阵地,通过谈论自由、道德、伦理和价值观来获胜。通过公开、非商业和非监听的方式讨论,承认目标不是去获胜。我们的目标是继续成为一个工具,一个致力于为互联网上的人类提供自由场所的工具。这是任何商业实体都不会提供的东西。</p><p><a href="https://framapiaf.org/@davidrevoy/110583258129951932">头图 by David Revoy</a></p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 随笔 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 联邦宇宙 </tag>
|
||
|
||
<tag> 翻译 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>GPG 浅尝辄止</title>
|
||
<link href="/2023/06/GPG%20%E6%B5%85%E5%B0%9D%E8%BE%84%E6%AD%A2/"/>
|
||
<url>/2023/06/GPG%20%E6%B5%85%E5%B0%9D%E8%BE%84%E6%AD%A2/</url>
|
||
|
||
<content type="html"><![CDATA[<p>成为 <code>Geek</code> 众多步的其中一步,捣鼓 <code>GPG</code> (</p><span id="more"></span><p>密码学让人掉头发,但也很重要,因为它是「普通人」们在赛博空间的基石。任何对「赛博自由」有兴趣的人都应该看过 <code>GPG</code> 之类的文章或书籍吧,相关的加密工具套件让蚂蚁也有了战胜大象的可能,所以 <code>Geek</code> 们乐于折腾这相关方面的东西也不足为奇了。</p><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>话要从哪里说起呢?思来想去发现没什么想说的,毕竟对 <code>GPG</code> 感兴趣的前置条件是对 「赛博自由」感兴趣,而「赛博自由」也是一个很难说清的东西,就像空气一样。空气当然是很重要的东西,但是去卖力「推销」空气只会让人兴趣乏乏。</p><p>所以我就单纯列列最影响我对「赛博自由」这一观点的来源了:</p><p><a href="https://zh.wikipedia.org/wiki/%E7%BD%91%E7%BB%9C%E7%8B%AC%E7%AB%8B%E5%AE%A3%E8%A8%80">网络独立宣言 - 维基百科</a></p><p>《永久记录》 - 爱德华·斯诺登</p><p><a href="https://www.gnu.org/philosophy/free-sw.zh-cn.html">什么是自由软件? - GNU</a></p><p>零零年左右的那些对互联网有着美好畅想的书籍 - 不管地摊书还是教材</p><h2 id="公钥私钥"><a href="#公钥私钥" class="headerlink" title="公钥私钥"></a>公钥私钥</h2><p><code>GPG</code> 是一个加密套件,覆盖了多种加密算法和类型,但是大家一般折腾的都是「非对称加密」的公钥私钥,简单来说公钥相当于一个带锁箱子,私钥相当于对应锁的钥匙。</p><p>大家都会把公钥发布出来,然后需要进行加密沟通时就用公钥进行加密(相当于将信件转入箱子并锁上),这样只有持有私钥(相当于对应锁的钥匙)的人才能知道内容。</p><p>如果想来点小小的数学风暴可以看:</p><p><a href="https://www.bilibili.com/video/BV1Ts411H7u9/">银行密码系统安全吗?质数(素数)到底有啥用?李永乐老师11分钟讲RSA加密算法(2018最新)</a></p><h2 id="最小系统"><a href="#最小系统" class="headerlink" title="最小系统"></a>最小系统</h2><p> <code>GPG</code> 作为密码学软件让人摸不着头脑,一大堆的相关流程让人生怵,不过从繁杂的电路中拆出一个「最小系统」还是可以的,最后系统没冒烟能用下去就没关系了……大概。</p><p><code>GPG</code> 在一众 <code>Linux</code> 发行版中应该是预装的,所以调出个终端直接用就是了,总体来说使用 <code>gpg --full-gen-key</code> 命令就能生成一个了:</p><ul><li><p>输入 <code>gpg --full-generate-key</code> 开始生成密钥。</p></li><li><p>密钥类型可以选择默认选项: 1 RSA and RSA.</p></li><li><p>密钥长度可以使用 <code>4096</code> 来得到强壮的密钥。</p></li><li><p>选择失效日期,建议 <code>2y</code> (两年)。</p></li></ul><p>按照提示继续设置个人信息,注意名称和邮件在公钥里是公开可见的,所以最好不要填入真名或是公开使用的邮箱。然后就输入一个密码,这个密码会在进行私钥操作的时候需要用到,所以尽量设计得复杂一点同时能记下来(写下来或是放到密码管理器里)。</p><p>生成完以后可以使用 <code>gpg --list-keys [生成密钥时填的邮箱地址]</code> 来列出具体的信息(也可使用 <code>-k</code> 来简写 <code>--list-keys</code> 选项):</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">例如</span> </span><br><span class="line">gpg --list-keys test@outlook.com</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">可能输出以下结果</span></span><br><span class="line">sec rsa3072 2023-01-01 [SC]</span><br><span class="line"> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</span><br><span class="line">uid [ultimate] test <test@test.com></span><br><span class="line">ssb rsa3072 2023-1-01 [E]</span><br><span class="line">ssb rsa3072 2023-1-01 [S]</span><br></pre></td></tr></table></figure><p>其中 <code>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</code> 的 40 位字符对应的是 <code>finperprint</code> (密钥指纹),在认证其它人的公钥时会用到。</p><h2 id="发布公钥"><a href="#发布公钥" class="headerlink" title="发布公钥"></a>发布公钥</h2><p>接下来就是将公钥发布出去了,具体来说用:</p><p><code>gpg --export --armor [密钥指纹] > pub_key.gpg</code> </p><p>就能将公钥导出为文件,其中 <code>--armor</code> 选项是导出为人类可读形式,可用可不用。</p><p>得到这个公钥之后就是将它发布出去,例如将文件发在网盘上分享;或是将其内容发在共享文档上(需要使用 <code>--armor</code> 选项);或是发布在博客上。</p><p>或是使用 <code>gpg --send-key [密钥指纹]</code> 命令将其发在公共 <code>keyserver</code> 上,但是默认使用的公共 <code>keyserver</code> 没有可删除性,就是说无法撤销,所以要保证生成公钥时没填入敏感信息。</p><h3 id="WKD"><a href="#WKD" class="headerlink" title="WKD"></a>WKD</h3><p>当然也有一种方式是通过 <code>WKD (Web Key Directory)</code> 方式公布自己的公钥,<code>WKD</code> 的思想很简单,就是将邮件地址的哈希串放到规范的指定位置,在使用支持 <code>WKD</code> 的客户端时就会默认从对应的地址导入公钥 (<code>GunPG 2.1.23</code> 版后默认从 <code>WKD</code> 地址导入)例如 <code>aheinecke@intevation.de</code> 的邮箱地址就对应 <code>https://intevation.de/.well-known/openPGPkey/hu/g8td9rsyatrazsoiho37j9n3g5ypp34h</code> 。</p><p>要获取 <code>WKD</code> 哈希可以使用 <code>gpg -k --with-wkd-hash [生成密钥时填的邮箱地址]</code> 命令:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">pub rsa3072 2023-01-01 [SC]</span><br><span class="line"> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</span><br><span class="line">uid [ultimate] test <test@test.com></span><br><span class="line"> ****************@test.com</span><br><span class="line">ssb rsa3072 2023-1-01 [E]</span><br><span class="line">ssb rsa3072 2023-1-01 [S]</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>其中 <code>****************</code> 那串字符串对应的就是 <code>WKD </code> 哈希。</p><p>之后可以使用 <code>gpg --export [生成密钥时填的邮箱地址] > [WKD 哈希]</code> 导出为文件,然后放到对应的服务器上,如果使用 <code>Nginx</code> 可以在邮箱对应的域名(如 <code>aheinecke@intevation.de</code> 对应 <code>intevation.de</code> 域名)配置文件下这样写:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">location /.well-known/openpgpkey/hu {</span><br><span class="line"> add_header Access-Control-Allow-Origin *;</span><br><span class="line"> alias /var/www/html/.well-known/openpgpkey/hu; #对应的具体路径</span><br><span class="line">} </span><br><span class="line">location /.well-known/openpgpkey/policy { # 可能一些旧版实现会用到这个路径</span><br><span class="line"> add_header Access-Control-Allow-Origin *;</span><br><span class="line"> alias /var/www/html/.well-known/openpgpkey/hu; #对应的具体路径</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>之后可以在其它账户或设备上使用 <code>gpg --locate-key [生成密钥时填的邮箱地址]</code> 来测试能否导入公钥(需 <code>GunPG 2.1.23</code> 及以后版本)。</p><h2 id="验证公钥"><a href="#验证公钥" class="headerlink" title="验证公钥"></a>验证公钥</h2><p>非对称加密的一个致命处就是如何保证收到的公钥真的是所发布的人呢?所以需要进行确认,最理想的做法是将公钥拷到移动设备上然后肉身跟需要交流的人碰面然后互换公钥。当然赛博空间上很难做到这一点,所以需要设立多个源进行交叉验证,例如在网盘分享公钥出来然后在博客上公布出密钥指纹;将公钥通过邮件发送然后通过电话方式通知密钥指纹等,这样才能防止可能潜在的欺骗行为。</p><p>比如我通过 <code>WKD</code> 方式发布了公钥,那么我要在博客的相关页面公布出指纹来方便他人确认。</p><h2 id="以及……"><a href="#以及……" class="headerlink" title="以及……"></a>以及……</h2><p>选用一个支持这些操作的客户端,比如 <code>Thunderbird</code> 进行加解密操作并不算太复杂,可参见自由软件基金会写的指南:</p><p><a href="https://emailselfdefense.fsf.org/zh-hans/">电子邮件加密指南 - FSF</a></p><p>当然 <code>GPG</code> 还有其它的用法比如签名或是文件加解密等,或是硬件设备之类的,但是这些就太掉入「兔子洞」了。</p><p>同时 <code>GPG</code> 作为一个加密中的 「瑞士军刀」为了广泛用途也带来了很多其它问题,所以其实更适合作为一个「兜底方案」。平常应该使用专门针对使用场景的设计方案例如文件加密使用 <a href="https://github.com/FiloSottile/age">Age</a> ,聊天使用 <a href="https://matrix.org/">Matrix</a> 等。</p><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="https://ulyc.github.io/2021/01/13/2021%E5%B9%B4-%E7%94%A8%E6%9B%B4%E7%8E%B0%E4%BB%A3%E7%9A%84%E6%96%B9%E6%B3%95%E4%BD%BF%E7%94%A8PGP-%E4%B8%8A/">2021年,用更现代的方法使用PGP(上)- Ulyc</a></li><li><a href="https://idawnlight.com/2022/gpg-key-rotation-notes/">GPG 密钥轮换小记 - <a href="https://idawnlight.com/">余光的部落格</a></a></li><li><a href="https://wiki.gnupg.org/WKD">Web Key Directory (WKD) / Web Key Service (WKS) what is the difference? - gunpgp wiki</a></li><li><a href="https://www.uriports.com/blog/setting-up-openpgp-web-key-directory/">Setting up OpenPGP Web Key Directory (WKD) - uriports</a></li><li><a href="https://www.ruanyifeng.com/blog/2013/07/gpg.html">GPG入门教程 - 阮一峰的网络日志</a></li></ul>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> GPG </tag>
|
||
|
||
<tag> 自托管 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>使用 Mastodon 作为博客的评论系统</title>
|
||
<link href="/2023/06/%E4%BD%BF%E7%94%A8%20Mastodon%20%E4%BD%9C%E4%B8%BA%E5%8D%9A%E5%AE%A2%E7%9A%84%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/"/>
|
||
<url>/2023/06/%E4%BD%BF%E7%94%A8%20Mastodon%20%E4%BD%9C%E4%B8%BA%E5%8D%9A%E5%AE%A2%E7%9A%84%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/</url>
|
||
|
||
<content type="html"><![CDATA[<p>又在博客的评论系统上左右摇摆了,就算没有人来评论。</p><span id="more"></span><p>之前写过一篇<a href="https://blog.southfox.me/2022/01/%E4%B8%BA%E5%8D%9A%E5%AE%A2%E6%94%AF%E6%8C%81%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/">使用 Giscus 作为博客评论系统</a>的文章,一年下来的使用体验感受良好,只需要经过一点点配置就能为博客嵌入一个支持 <code>Markdown</code> 支持、代码高亮、表情回应、邮件通知、数据背靠 <code>GitHub</code>的评论系统,性价比十分之高。但代价也是背靠 <code>GitHub</code> ,作为一个大商业公司「发病」是一个不断扔骰子的过程,随着时间流逝,扔出个「大发病」的概率将会趋近于必然。可能是什么「大会员」或是「API 收大费」。为了避免最坏情况发生所以有必要准备一些备选方案。</p><p>比如 <a href="https://cusdis.com/">Cusdis</a> 是我之前尝试过一阵的评论系统方案,虽然各方面都比较优秀,但是它上面的一些小小「毛刺」最终让我放弃继续使用(主要是一些样式问题),更大的原因也是我开始觉得为了一年不到十多条的评论是否有必要开一个数据库+评论系统。</p><p>所以最后是打算复用一些已经建立的应用作为博客的评论系统,例如 <a href="https://cactus.chat/">cactus</a> 评论系统就可以使用 <code>Matrix</code> 聊天协议作为博客的评论系统。不过我觉得着有点「重」了,而且 <code>Matrix</code> 主流实现 <code>Synapse</code> 对于房间、媒体管理这些支持并不算太好,要是被恶意刷请求之后很难清理干净。</p><p>所以最后将目光放向了 <code>Mastodon</code> ,现在谷歌上搜索 <code>mastodon blog comment</code> 就能搜索出很多方案,本次我也是参(tou)考(qie)整(feng)合(he)了其中两篇的解决方案:</p><p><a href="https://blog.thms.uk/2023/02/mastodon-comments">Adding comments to your blog, powered by mastodon</a></p><p><a href="https://danielpecos.com/2022/12/25/mastodon-as-comment-system-for-your-static-blog/">Mastodon as comment system for your static blog </a></p><p>主要思想就是利用 <code>Mastodon</code> 的帖子 <code>API</code> 获取一条博文下的所有回复,然后处理后插入的指定位置,并不是太复杂。</p><h2 id="实现"><a href="#实现" class="headerlink" title="实现"></a>实现</h2><p>作为一个备选方案我并没有删掉之前基于 <code>Giscus</code> 的评论方案,现在是处于共存状态。要启用基于 <code>Mastodon</code> 的方案就在文章的元数据中指定 <code>fedi_url</code> 这个变量:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><% if (item.no_comment){ %></span><br><span class="line"> <!-- no comment --></span><br><span class="line"><% } else { %></span><br><span class="line"> <% if (item.fedi_url){ %></span><br><span class="line"> <div id="comments"></span><br><span class="line"> <p id="mastodon-comments-list"></p></span><br><span class="line"> <script src="<%- url_for('./js/fedicomment.js') %>" post-url="<%- item.fedi_url %>"> async</script></span><br><span class="line"> </div></span><br><span class="line"> <noscript>Enable JavaScript to view the comments.</a></noscript></span><br><span class="line"> <% } else { %></span><br><span class="line"> <script src="https://giscus.app/client.js"</span><br><span class="line">data-*="……"</span><br><span class="line"> async></span><br><span class="line"> </script></span><br><span class="line"> <% } %></span><br><span class="line"><% } %></span><br></pre></td></tr></table></figure><p>然后引入 <code>fedicomment.js</code> 这个文件,不直接通过模板直接写入主要还是因为自己自找没趣设置了 <code>CSP</code> 禁止 <code>inline javascript</code> 。</p> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><script src="<%- url_for('./js/fedicomment.js') %>" post-url="<%- item.fedi_url %>"> async</script></span><br></pre></td></tr></table></figure><p>这一段指定了 <code>post-url</code> 这个属性,作为一个变量传入脚本文件里,参见:<a href="https://stackoverflow.com/questions/14904378/get-data-attribute-of-script-tag">Get data attribute of script tag?</a></p><p>之后在脚本文件里将作为全局变量调用:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> post_url = <span class="variable language_">document</span>.<span class="property">currentScript</span>.<span class="title function_">getAttribute</span>(<span class="string">"post-url"</span>);</span><br></pre></td></tr></table></figure><p>实际的脚本文件课参见 <code>GitHub</code> 上: <a href="https://github.com/SouthFox-D/SouthFox-D.github.io/blob/hexo/themes/freemind/source/js/fedicomment.js">fedicomment.js</a> (毕竟要是直接复制过来也太凑字数了),不过实际也是整合了前面提到的两篇参考文章。</p><h2 id="缺点"><a href="#缺点" class="headerlink" title="缺点"></a>缺点</h2><p><strong>麻烦:</strong>使用这套方案的最大特点就是要多一步操作,因为 <code>Mastodon</code> 的帖子 <code>id</code> 是根据时间戳生成的,不能提前知晓。所以得在 Mastodon 发好文然后获取帖子链接才能插入到博文这里。或许通过配置自动构建的形式使用帐号的 <code>token</code> 预先发好帖然后自动插回文件再提交是种解决办法,但是肯定少不了折腾。而且虽说是在博客上的评论系统但是不能在博客上直接评论。</p><p><strong>管理:</strong>如果不是身为站点管理员的话,那么将无法管理帖文下恶意评论,只能在站点层面的封禁才能移除评论。而且即使身为管理,想要删除单条帖文还得先进行「检举」操作标记这条帖文,然后在管理后台才能删除单条帖文的操作。</p><p><strong>限制:</strong>如果站点开启了「安全模式」的话,那么将无法直接调用帖文的 <code>API</code> ,这样自然谈不上在博客中显示评论了。</p><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><p>总体来说,对于想复用服务的人或是联邦爱好者来说可以一试,不过其实相比 <code>Mastodon</code> ,直接在博客上用 <code>Serveless</code> 函数平台服务兼容 <code>ActivityPub</code> 协议似乎是个更好的选择?不过这就相当于从依赖 <code>GitHub</code> 改为依赖其它平台了……</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
<tag> Mastodon </tag>
|
||
|
||
<tag> 联邦宇宙 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>2022年终总结</title>
|
||
<link href="/2023/02/2022%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%93/"/>
|
||
<url>/2023/02/2022%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%93/</url>
|
||
|
||
<content type="html"><![CDATA[<p>都二月份了!</p><span id="more"></span><p>今年的年终总结来得晚是因为去年末今年初得病外加农历新年无所事事浑浑噩噩打游戏,不过《开拓者:正义之怒》还是挺好玩的,一种单人跑团代餐。</p><h2 id="自托管"><a href="#自托管" class="headerlink" title="自托管"></a>自托管</h2><h3 id="回流"><a href="#回流" class="headerlink" title="回流"></a>回流</h3><p><code>2022</code> 年想必我的关键词是 <code>自托管</code> 一词了,一些常用的服务自己搭起来,在上面也费了很多功夫(不过也有很多功夫也是处于一种折腾了最后没怎么用的状态)。虽然前几年自己也在上面折腾过一些东西,不过这次面向到整个互联网感觉还是很不一样的,让我体会到了零几年的教科书绘声绘色介绍互联网的感觉,整个人类的宝库……和远在天涯海角的人……联系……</p><p>小时候被妈妈带着的时候,通过企业很早就接触到了互联网,第一个打开的网站好像是什么小游戏网站吧,太小了!甚至连当初的情绪都不记得了,新奇?幸福?还是对滑鼠的小球更感兴趣?然后也因为实在没办法去照料,小学一年级就开始全宿制。这个年纪根本就没有全宿制的安排,都是宿管阿姨在照料。不过我似乎也挺乐在其中,可能我就是那样一种自己能陪自己玩的人吧。</p><p>就在这时侯除了玩沙坑也就只能读读书了,或许是这时的书深深影响了我吧,书中对互联网的畅想搭配上蜻蜓点水般的体验,造就了我对于互联网不切实际的幻想。可惜现在互联网成为了大家眼中时好时坏的工具,像是在一望无际的荒原中行走。</p><p>没想到二十年后早期互联网的感觉又冒出来了,也许就互联网也像时尚界一样,二十年来一次回流吧。</p><h3 id="若水"><a href="#若水" class="headerlink" title="若水"></a>若水</h3><p>自托管的好处就是数据在自己手中了,当然实际情况还是要打个问号,甚至惊叹号的。因为自托管面临的问题实在太多了,其中一个方面只要碰上一次「大失败」就要黯灭。但是谁叫这种自在感就是令人舒畅呢?在避无可避的「大失败」来临前再作弄一阵子吧。</p><h2 id="Emacs"><a href="#Emacs" class="headerlink" title="Emacs"></a>Emacs</h2><p>当然还有一件事就是找到了一个能折腾好久的「玩具」,<code>Emacs</code>。对此也没有什么好说的,因为这一年的博客百分之八十都在谈它。当然很多时候是假喜欢,很多东西都没有深入了解过,但没关系,它就在那里,直到我再也忍受不了它的毛病为止,我应该还能在摆弄上几年吧。</p><h2 id="面纱"><a href="#面纱" class="headerlink" title="面纱"></a>面纱</h2><p>严格来讲,去年定下的目标和展望都没有实现多少,关爱身体啦、认清「现实」啦、磨炼技术啦等等,不过其实回头来看,盯着石像上的面纱,还是舞动了几分的。世界依然朦胧,但我已在月色下盯着湖面发呆,即使挨不到清晨的到来,此刻还算不赖。但是随着世界终于回归正轨,今年还是要稍微「正常」一下,至少为一个目标所努力。</p><p>2022 年,对我来说是失去的一年,就像「失去的十年」一样(气候变化上的说法),大家在扯皮中丧失希望,嘟囔着十年什么事都没干成,世界末日已经来临。但回过头来看世界并没有被毁灭,在一地鸡毛里,一些希望正在发展。</p><p>没有毁灭,但是问题依然存在,但随着绝望的潮水退去,踩在「正常」的大地上……或许回想起几年后的场景,没来头闲逛时发现当时的痕迹我一拍脑门想到,「啊,当时的水位~竟然有这么高吗?」</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 随笔 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 随笔 </tag>
|
||
|
||
<tag> 年终总结 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>Emacs 使用再记(3)</title>
|
||
<link href="/2023/01/Emacs-%E4%BD%BF%E7%94%A8%E5%86%8D%E8%AE%B0%EF%BC%883%EF%BC%89/"/>
|
||
<url>/2023/01/Emacs-%E4%BD%BF%E7%94%A8%E5%86%8D%E8%AE%B0%EF%BC%883%EF%BC%89/</url>
|
||
|
||
<content type="html"><![CDATA[<p>两种喜欢的事遇到一起,多是一件美事啊。</p><span id="more"></span><p>折腾 <code>Emacs</code> 最重要就是开心,而能开心的事莫过于想实现的功能已经提前有人去实现了,这时候只要愉快导包就好了。</p><h2 id="Mastodon"><a href="#Mastodon" class="headerlink" title="Mastodon"></a>Mastodon</h2><p><a href="https://codeberg.org/martianh/mastodon.el">Mastodon.el</a> 是一个 <code>Emacs</code> 平台的 <code>Mastodon</code> 客户端,为什么啥事都要用 <code>Emacs</code> 来实现呢?因为只要将文字送入 <code>Emacs</code> 解析,那么就能够和其它包进行联动,这可是很诱人的事啊。</p><h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><p><code>Mastodon.el</code> 也已经上传到了 <code>MELPA</code> 上面,可以直接进行安装。使用时只要指定实例地址和用户名:</p><figure class="highlight lisp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">(<span class="name">setq</span> mastodon-instance-url <span class="string">"https://social.instance.org"</span></span><br><span class="line"> mastodon-active-user <span class="string">"example_user"</span>)</span><br></pre></td></tr></table></figure><p>然后直接 <code>M-x mastodon</code> 运行指令,然后就会往剪贴板复制一串授权地址,粘贴到登陆的了实例浏览器进行打开,获取授权码再复制回 <code>Emacs</code> 就能完全授权了。</p><h3 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h3><p>当然如果是使用 <code>Doom emacs</code> 配置集的话,自带的 <code>vim</code> 按键绑定会覆盖掉 <code>mastodon.el</code> 的自带按键设定,所以还是得自己设置一下。</p><figure class="highlight lisp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line">(<span class="name">map!</span> <span class="symbol">:leader</span></span><br><span class="line"> <span class="symbol">:prefix</span> (<span class="string">"o"</span>)</span><br><span class="line"> <span class="symbol">:desc</span> <span class="string">"Mastodon"</span> <span class="string">"M"</span> #'mastodon)</span><br><span class="line"></span><br><span class="line">(<span class="name">map!</span> <span class="symbol">:after</span> mastodon</span><br><span class="line"> <span class="symbol">:map</span> mastodon-mode-map</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"[ ["</span> #'mastodon-tl--goto-prev-toot</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"] ]"</span> #'mastodon-tl--goto-next-toot</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"g k"</span> #'mastodon-tl--previous-tab-item</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"g j"</span> #'mastodon-tl--next-tab-item</span><br><span class="line"></span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"q"</span> #'kill-current-buffer</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"Q"</span> #'kill-buffer-and-window</span><br><span class="line"></span><br><span class="line"> <span class="comment">;;; timelines</span></span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"#"</span> #'mastodon-tl--get-tag-timeline</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"A"</span> #'mastodon-profile--get-toot-author</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"F"</span> #'mastodon-tl--get-federated-timeline</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"H"</span> #'mastodon-tl--get-home-timeline</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"L"</span> #'mastodon-tl--get-local-timeline</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"N"</span> #'mastodon-notifications-get</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"O"</span> #'mastodon-profile--my-profile</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"P"</span> #'mastodon-profile--show-user</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"T"</span> #'mastodon-tl--thread</span><br><span class="line"></span><br><span class="line"> <span class="comment">;;; toot actions</span></span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"K"</span> #'mastodon-toot--bookmark-toot-toggle</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"R"</span> #'mastodon-toot--toggle-boost</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"c"</span> #'mastodon-tl--toggle-spoiler-text-in-toot</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"C"</span> #'mastodon-toot--copy-toot-url</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"o"</span> #'mastodon-url-lookup</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"d"</span> #'mastodon-toot--delete-toot</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"D"</span> #'mastodon-toot--delete-draft-toot</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"f"</span> #'mastodon-toot--toggle-favourite</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"r"</span> #'mastodon-toot--reply</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"u"</span> #'mastodon-tl--update</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"v"</span> #'mastodon-tl--poll-vote</span><br><span class="line"></span><br><span class="line"> <span class="comment">;;; toot!</span></span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"t"</span> #'mastodon-toot</span><br><span class="line"></span><br><span class="line"> <span class="comment">;;; mastodon additions</span></span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"S"</span> #'mastodon-search--search-query</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"V F"</span> #'mastodon-profile--view-favourites</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"V B"</span> #'mastodon-profile--view-bookmarks</span><br><span class="line"> <span class="symbol">:n</span> <span class="string">"V L"</span> #'mastodon-tl--view-list-timeline</span><br><span class="line"> )</span><br></pre></td></tr></table></figure><p>第一处就是使用 <code>SPC o M</code> 来打开 <code>mastodon.el</code> 这个包,实现快速摸鱼,第二处设置则是照虎画猫其他人的<a href="https://github.com/coutego/evil-collection/blob/master/modes/mastodon/evil-collection-mastodon.el">配置</a>来实现的,虽然没看文档(坏习惯),但是猜测 <code>:map mastodon-mode-map</code> 是选择指定那个模式下的按键配置,<code>:n</code> 是覆盖 <code>vim</code> 那个模式下的按键绑定,<code>n</code> 应该是普通模式。</p><p>按键绑定改来改去,要在不影响原本的 <code>hjkl</code> 和 <code>wby</code> 常用指令还要做到方便(自己)记忆还是有点难的,毕竟能兼容了原本按键绑定进行复制粘贴起也比较好操作。</p><p>总体来看还是倾向于一个补充,毕竟 <code>Emacs</code> 网络相关的操作确实不太行,跟 <code>Web</code> 端确实是不能比的,但是能够快速摸鱼外加和其它包联携的潜力(比如打开收藏夹进行进行分析;直接拷贝嘟文内容送入待办等),还要啥自行车呢。</p><h2 id="Matrix"><a href="#Matrix" class="headerlink" title="Matrix"></a>Matrix</h2><p>接下来就是聊天了,其实作为和 <code>Emacs</code> 同一个时代的产品,<code>IRC</code> 自然是支持众多的,不过我已经选择另一款聊天协议了 <a href="https://matrix.org/">Matrix</a> 。</p><h3 id="安装-1"><a href="#安装-1" class="headerlink" title="安装"></a>安装</h3><p>虽然也有一些包支持但是现在还在积极开发的也就 <a href="https://github.com/alphapapa/ement.el">ement.el</a> 其作者 <code>alphapapa</code> 也是有名的 <code>Emacs</code> 使用者了,写了很多流行的包。</p><p><code>ement.el</code> 现在也是上传到了 <code>GNU ELPA</code> 可以直接进行安装,但是实现起来那叫一个坑多啊,虽然大部分都是自己的问题。</p><p>安装后首先要登陆,但发现一直登陆不上去,之后排查是自己的 <a href="https://matrix-org.github.io/synapse/latest/delegate.html#well-known-delegation">Delegation</a> 功能没有加上 <code>https://</code> 例如 <code>return 200 '{"m.homeserver": {"base_url": "synapse.matrix.org"}}'; </code> ,应该是 <code>return 200 '{"m.homeserver": {"base_url": "https://synapse.matrix.org"}}';</code> 。</p><p>没有做到这一点导致 <code>ement.el</code> 发起的链接不成功,虽然很想指责一下是包的健壮性不足但姑且还是把责任揽到自己身上吧……</p><p>登陆之后发现解密不了加密消息,看说明才发现是 <code>ement.el</code> 不原生支持加密功能,想想也对,想支持得用 <code>ELisp</code> 去造轮子太麻烦了(当然我觉得主要原因是作者对于用 <code>Matrix</code> 发送加密消息没什么兴趣)。</p><h3 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h3><p>不过还有曲线救国方案就是用 <a href="https://github.com/matrix-org/pantalaimon">pantalaimon</a> ,一个代理程序,可以将加密消息解密提供给其它不支持加密的客户端使用。</p><p>安装上可以直接用 <code>pip</code> 进行安装 <code>pip install pantalaimon</code> 之后得编辑 <code>~/.config/pantalaimon/pantalaimon.conf</code> 下的配置文件指定实例地址和相关配置。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">[配置名称,随便填]</span><br><span class="line">Homeserver = https://实例地址</span><br><span class="line">ListenAddress = localhost</span><br><span class="line">ListenPort = 8009</span><br><span class="line">VerifySessions = False</span><br><span class="line">UseKeyring = False</span><br><span class="line">IgnoreVerification = True</span><br></pre></td></tr></table></figure><p>注意如果启用了 <a href="https://matrix-org.github.io/synapse/latest/delegate.html#well-known-delegation">Delegation</a> 功能的话实例地址得填真正使用的服务地址。后面三行是不断试错加进去的,因为这个程序真的是缺文档,所以也不清楚对实际运行有没有影响。</p><p>之后再启动程序 <code>pantalaimon --log-level debug</code> ,但是现在还没有真正运行,首先在 <code>Emacs</code> 里进行登陆并且指定使用的地址:</p><p>按下 <code>M-S ;</code> 运行指定本地反代的地址的指令:</p><figure class="highlight lisp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">(<span class="name">ement-connect</span> <span class="symbol">:uri-prefix</span> <span class="string">"http://localhost:8009"</span>)</span><br></pre></td></tr></table></figure><p>然后输入帐号密码进行登陆,看日志应该能发现有所输出,等待到数据同步后 <code>Emacs</code> 显示了房间列表后。切换到另一个已经登陆的客户端上应该能发现两个设备进行登陆,一个叫 <code>pantalaimon</code> 另一个是随机字符串是 <code>ement.el</code> 使用的。两个都显示未支持加密功能。这时先用 <code>Emacs</code> 进入一个开启加密的房间然后用 <code>ement-room-send-message</code> 指令发送一条消息,理所当然的不会成功,因为 <code>pantalaimon</code> 还没通过验证,但现在应该会显示 <code>pantalaimon</code> 设备变成支持加密的未知设备了。</p><p>这时在开启一个终端输入 <code>panctl</code> 指令进入控制,参考<a href="https://www.cogitri.dev/posts/10-pantalaimon-setup/">这篇文章</a>进行验证操作 ,具体来说就是用指令 <code>start-verification @自己帐号:自己实例 @自己帐号:自己实例 已经登陆的设备的设备号</code> 发起验证,然后用那一个已经登陆的设备确实验证请求开启交叉验证……其中可能会卡住或许要多发起几次。</p><p>确实 <code>emoji</code> 匹配后就使用 <code>confirm-verification @自己帐号:自己实例 @自己帐号:自己实例 已经登陆的设备的设备号</code> 指令验证 <code>pantalaimon</code> 设备。转过头去 <code>Emacs</code> 里再尝试发起加密房间的消息查看是否成功。</p><h3 id="再配置"><a href="#再配置" class="headerlink" title="再配置"></a>再配置</h3><p>之后如果希望将 <code>pantalaimon</code> 作为系统服务开机自启的话就发现不行,会遇到相关总线问题,因为其中一些 <code>pyDbus</code> 什么的调用导致无法挂在后台吧。</p><p>权宜之计是按照这个<a href="https://github.com/matrix-org/pantalaimon/issues/144#issuecomment-1345473181">说法</a>手动编辑 <code>pantalaimon</code> 包下的 <code>ui.py</code> 文件关闭 <code>UI</code> 功能:</p><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">UI_ENABLED = <span class="literal">False</span></span><br></pre></td></tr></table></figure><p>然后就能当作 <code>service</code> 进行管理理,代价就是无法使用 <code>panctl</code> 命令,不过只要没有再配置的需求还是能接受的,或是从一开始就使用 <code>Docker</code> 然后按照这<a href="https://github.com/matrix-org/pantalaimon/issues/144#issuecomment-1376163550">说法</a>进行配置。</p><h3 id="再再配置"><a href="#再再配置" class="headerlink" title="再再配置"></a>再再配置</h3><p>然后记得配置</p><figure class="highlight lisp"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">(<span class="name">setq</span> ement-save-sessions <span class="literal">t</span>)</span><br></pre></td></tr></table></figure><p>将会话数据保留下来,要不然每次登陆都会新申请一个设备,每开一次 <code>Emacs</code> 来这样一次那很快就要达到上百个设备了。</p><p>配置此选项后关闭 <code>Emacs</code> 应该能注意到关闭 <code>Emacs</code> 会将会话数据写入,没有的话还得重启 <code>Emacs</code> 使用<code>(ement-connect :uri-prefix "http://localhost:8009")</code> 指令再登陆几次。检查 <code>ement-sessions-file</code> 变量是否有被设置,默认是 <code>"~/.cache/ement.el"</code> ,到该路径检查,有没有设置反代地址和保存了相关 <code>token</code> ,有的话就万事大吉了,之后也可以直接用 <code>ement-connect</code> 直接登陆,因为反代地址已经保存了所以也不用再去特意指定。</p><h3 id="再再再配置"><a href="#再再再配置" class="headerlink" title="再再再配置"></a>再再再配置</h3><p>跟 <code>mastodon.el</code> 问题一样,<code>Doom emacs</code> 的按键绑定会覆盖掉相关绑定,不过我想将上面让人头大的解决掉按键绑定就不是什么难题了。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>两款常用服务配置下来那就挺让人舒适的了,快速刷轴摸鱼,聊天也可以在 <code>Emacs</code> 实现,主要优点是不走 <code>Web</code> 端的话,资源是比较省的,不用再加载几兆几十兆的脚本外加浏览器吃掉的内存了,两种喜欢的事加起来,多是一件美事啊。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
<tag> Matrix </tag>
|
||
|
||
<tag> Mastodon </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>Arch 系统随便用暨 Emacs 使用再记(2)</title>
|
||
<link href="/2022/12/Arch%E7%B3%BB%E7%BB%9F%E9%9A%8F%E4%BE%BF%E7%94%A8%E6%9A%A8Emacs%E4%BD%BF%E7%94%A8%E5%86%8D%E8%AE%B0%EF%BC%882%EF%BC%89/"/>
|
||
<url>/2022/12/Arch%E7%B3%BB%E7%BB%9F%E9%9A%8F%E4%BE%BF%E7%94%A8%E6%9A%A8Emacs%E4%BD%BF%E7%94%A8%E5%86%8D%E8%AE%B0%EF%BC%882%EF%BC%89/</url>
|
||
|
||
<content type="html"><![CDATA[<p>我还挺喜欢用 <code>Manjaro</code> 的,就喜欢这种低人一等的感觉。</p><span id="more"></span><p>反正系统相关的我也不懂啦,用着玩的,不想对这些 <code>Linux</code> 发行版使用什么个排序算法争出个最优。用 <code>Manjaro</code> 单纯就是安装方便同时教程好找点……不过最近(二十天前),当我更新包时突然开始报错「<code>libssl3.0</code> 未找到。」去网上搜发现五六天前 <code>Manjaro</code> 论坛就有此问题,但也只是捕风捉影并没有实际解决方案。</p><p>之后电脑新开一些应用已经打不开了,在终端里也只会一直显示库错误,估计系统已经成为一个僵尸了,一旦重新启动估计就会立马爆炸吧(重新启动果然如此,连终端环境都进不了)。</p><p>没办法,重装吧!对于这种问题向来我都是重装解决一切问题的,心想这次还是不要用 <code>KDE</code> 了,试试其它桌面环境吧,结果没想到 <code>Manjaro</code> 系统安装程序会卡在最后一步安装系统引导上(现在想来应该是智熄操作没有选到 <code>UEFI</code> 选项导致的)。</p><h2 id="Arch-随便用"><a href="#Arch-随便用" class="headerlink" title="Arch 随便用"></a>Arch 随便用</h2><h3 id="懒不动"><a href="#懒不动" class="headerlink" title="懒不动"></a>懒不动</h3><p>那么既然已经装不下了那就换个口味吧,换成更上游的 <code>Arch</code> 。之前一直没用 <code>Arch</code> 的原因就是系统安装没有提供一个图形化界面,就觉得很麻烦,不过查 <code>wiki</code> 时发现现在会附带一个 <code>archinstall</code> 程序辅助安装,那么就尝试用用看吧,能这么惬意决定重装也是因为大部分数据都是放在另一快数据盘上,是和系统盘分开的。</p><p>第一时间就发现的是 <code>Arch</code> 的镜像挺小的,1G 还不到,但之后就发现为什么是这样了。因为只包括了基本的组件,要成为一个能用系统的东西还得从网上下,在运行 <code>archinstall</code> 还要需求联网还卡住了几分钟的我才顿悟到……</p><p>不过说是辅助安装但也只是一个选项菜单而已,方便选择磁盘之类的,不过总比没有好吧,选好系统环境、额外包、挂载目录进行安装……最后报错识别不了另一个盘的某个分区,又不是在安装的盘上为什么还要去管其它盘上的事啊,重试了几次后依然卡在这里,没办法,想懒懒不动了,只好自己手动装了。</p><h3 id="随便装"><a href="#随便装" class="headerlink" title="随便装"></a>随便装</h3><p>手动装就一步一步自己慢慢盯着了,看着 <code>wiki</code> 再顺便开几个教程帖,之后慢慢对着下来,无非就是选择分区然后挂载点之类的(我这种大懒狐一个 <code>/</code> 就够了),然后选择速度快的镜像站把基础系统组件还有网络管理包之类的装上去就完事了。</p><p>之后 <code>unmount</code>,重启,噔噔噔……新系统就来了,不过没有选择桌面环境所以显示的还是挺「刻板印象里的黑客风」黑黢黢命令窗口。桌面环境想了想还是选择 <code>GNOME</code> 吧,没错,我就喜欢卡又多 <code>BUG</code> 低人几等的感觉,只能说习惯的力量还是惊人的,本来其实还想体验 <code>i3</code> 环境来着但是到现在一次都没打开过(</p><p>安装重新登陆后,一个毛坯房 <code>GNOME</code> 环境就出来了,看看系统占用,发现真的挺轻量的,内存占用在 1.5G 左右,只有 <code>Manjaro</code> 一半左右。感想就是 <code>Minecraft</code> 热门整合包和自己配整合包吧,现在自用的这款系统还是有点缺东少西,比如最重要的代理和 <code>Emacs</code> 了。</p><h3 id="随便折腾"><a href="#随便折腾" class="headerlink" title="随便折腾"></a>随便折腾</h3><p>代理的事因为相关软件挂在 <code>yay</code> 上,但是安装 <code>yay</code> 要自己构建下一大堆 <code>GO</code> 相关东西而又需要代理环境,经典先有鸡还是先有蛋了属于是,不过好在可以用其它设备开放的代理环境救救急,这时候才发现 <code>Manjaro</code> 默认把 <code>yay</code> 集成到了自己的源中是有理由的……</p><p>安装 <code>yay</code> 后就能愉快的继续偷 <code>Arch</code> 的……嘶,我现在就是 <code>Arch</code> 系统了,所以是光明正大来用!</p><h4 id="编辑器"><a href="#编辑器" class="headerlink" title="编辑器"></a>编辑器</h4><p>首先是使用 <code>neovim</code> ,<code>Emacs</code> 这位大爷还是等所有东西都搞定了在把祂请过来吧。</p><h4 id="字体"><a href="#字体" class="headerlink" title="字体"></a>字体</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo pacman -S noto-fonts-cjk</span><br></pre></td></tr></table></figure><p>庞大的汉字在计算机世界还是要折腾一番的,不下中文字体开个浏览器就全是口口口的豆腐框了,所以要 <code>noto(fu)</code> 字体来拯救一下。</p><h4 id="输入法"><a href="#输入法" class="headerlink" title="输入法"></a>输入法</h4><p>好在在之前系统自爆前把 <code>Rime</code> 的配置文件抢救了下来,所以直接使用相应包:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo pacman -S fcitx5-im fcitx5-rime</span><br></pre></td></tr></table></figure><p>然后编辑 <code>/etc/environment</code> 文件,添加以下几行</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">GTK_IM_MODULE=fcitx</span><br><span class="line">QT_IM_MODULE=fcitx</span><br><span class="line">XMODIFIERS=@im=fcitx</span><br><span class="line">SDL_IM_MODULE=fcitx</span><br><span class="line">GLFW_IM_MODULE=ibus</span><br></pre></td></tr></table></figure><p>然后重新登录就好了,反正 <a href="https://wiki.archlinuxcn.org/wiki/Fcitx5">ArchWiki</a> 是这么说的,之后把之前备份的 <code>Rime</code> 配置覆盖回 <code>~/.local/share/fcitx5/rime</code> 里就好了,使用的方案是 <a href="https://github.com/mutoe/rime">双拼自然码方案</a>和 <a href="https://github.com/Bambooin/rimerc">rimerc</a> ,毕竟没有网络词和大公司的算法加持,想要加快输入速度只能从自己的手法上入手了。</p><h4 id="按键绑定"><a href="#按键绑定" class="headerlink" title="按键绑定"></a>按键绑定</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo pacman -S gnome-tweak-tool</span><br></pre></td></tr></table></figure><p>突然发现 <code>Gnome tweak</code> 里面的 <code>Keyboard & Mouse</code> 里有一个 <code>Emacs Input</code> 选项,打开它后就能在操作系统里实现 <code>Emacs Keybinding</code> 了,就 <code>C-a</code> 将光标移动到行首这种的,真实 <code>Emacs EveryWhere</code> 了。然后 <code>/usr/share/themes/Emacs/gtk-2.0-key/gtkrc</code> 文件是具体的配置,可以让猫猫来看具体定义了哪些按键(我是指,<code>cat</code> 命令……)</p><h4 id="窗口切换"><a href="#窗口切换" class="headerlink" title="窗口切换"></a>窗口切换</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo pacman -S gnome-shell-extensions</span><br></pre></td></tr></table></figure><p>然后在 <code>gnome-extensions</code> 开启 <code>Window List</code> 选项,这样就能像 <code>Win</code> 系统一样显示一个任务栏在窗口底部,如果这不是默认启用的我真想不到平常使用 <code>GNOME</code> 是怎么切换窗口的?难道这是 <code>Win</code> 系统带来的我永远摆脱不了的烙印?</p><h4 id="钥匙环儿"><a href="#钥匙环儿" class="headerlink" title="钥匙环儿"></a>钥匙环儿</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo pacman -S gnome-keyring</span><br></pre></td></tr></table></figure><p>我一般使用 <code>Nextcloud</code> 的桌面客户端来同步数据的,如果缺少这个就会无限首次重新需求登录,似乎 <code>Minecraft</code> 启动器也会有这个问题,所以还是得装的。</p><h4 id="其它"><a href="#其它" class="headerlink" title="其它"></a>其它</h4><p>其它的有了 <code>yay</code> 也挺容易装了比如 <code>oh-my-zsh</code> 之类的,看情况调个顺眼的用用,</p><p>其中 <code>keyd</code> 这个应用可以改键,把 <code>Esc</code> 和 <code>Caps</code> 调换之类的,虽然 <code>GNOME</code> 里有什么组件能改不过我也是路径依懒惯了……</p><h2 id="Emacs"><a href="#Emacs" class="headerlink" title="Emacs"></a>Emacs</h2><p>终于最后就是把这位神请回来了,</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo pacman -S emacs-nativecomp ripgrep</span><br></pre></td></tr></table></figure><p>虽然完全搞不懂但是听说加了 <code>nativecomp</code> 会让运行速度有改善的样子,之后克隆下来 <code>doomemacs</code> 的配置仓库,将之前的备份过的配置文件放入 <code>~/.doom</code> 里,然后开始安装,之后就只能等了,几百个包安装编译啥的估计要登上十多分钟。</p><h3 id="邮件"><a href="#邮件" class="headerlink" title="邮件"></a>邮件</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yay -S mu isync</span><br></pre></td></tr></table></figure><p>参照<a href="https://blog.lazkani.io/posts/email-setup-with-isync-notmuch-afew-msmtp-and-emacs/">这篇文章</a>完成 <code>mbsync(isync)</code> 设定,然后 <code>mbsync -a</code> 拉取邮件,然后参照<a href="https://liujiacai.net/blog/2021/03/05/emacs-love-mail-feed/">这篇文章</a>完成 <code>mu4e</code> 配置(<code>mu4e</code> 在 <code>doomemacs</code> 也有相应配置可启用),然后:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">export XAPIAN_CJK_NGRAM=true</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">只需要执行一次 init,可以指定多个邮件地址</span></span><br><span class="line">mu init --my-address your-mail@qq.com --my-address your-mail@gmail.com -m ~/.mail</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">index 在每次收取邮件后都需要执行,mu4e 可以配置自动执行</span></span><br><span class="line">mu index</span><br></pre></td></tr></table></figure><p>就能为邮件建立索引,之后在 <code>Emacs</code> 里使用 <code>Spc o m </code> 即可打开 <code>mu4e</code> 界面进行使用了。</p><h3 id="Latex"><a href="#Latex" class="headerlink" title="Latex"></a>Latex</h3><p><code>Emacs</code> 里预览公式需要 <code>latex</code>,使用</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo pacman -S texlive-langextra</span><br></pre></td></tr></table></figure><p>安装 <code>texlive</code> 发行版同时还要指定是 <code>extra</code> 包才能应付公式预览。</p><h3 id="Emacs-everywhere"><a href="#Emacs-everywhere" class="headerlink" title="Emacs everywhere"></a>Emacs everywhere</h3><p>类似于空间文里的随身空间,直接在任意能输入文字的地方启动一个 <code>Emacs</code> 编辑器,这样就不用离开自己的安乐窝了。</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo pacman -S xclip xdotool xorg-xprop xorg-xwininfo</span><br></pre></td></tr></table></figure><p>然后在 <code>gnome</code> 里指定一个快捷键绑定上 <code>emacsclient --eval "(emacs-everywhere)"</code> 就能想用就用 <code> Emacs</code> 这个随身编辑器了。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
<tag> 系统 </tag>
|
||
|
||
<tag> Arch </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>Emacs再记(1):传教二度</title>
|
||
<link href="/2022/08/Emacs%E5%86%8D%E8%AE%B0%EF%BC%881%EF%BC%89%EF%BC%9A%E4%BC%A0%E6%95%99%E4%BA%8C%E5%BA%A6/"/>
|
||
<url>/2022/08/Emacs%E5%86%8D%E8%AE%B0%EF%BC%881%EF%BC%89%EF%BC%9A%E4%BC%A0%E6%95%99%E4%BA%8C%E5%BA%A6/</url>
|
||
|
||
<content type="html"><![CDATA[<p>论都 2022 年了为什么要用 Emacs 。</p><span id="more"></span><p><code>Emacs</code> 最早可以追溯到 <code>1975</code>年,经过多年发展诞生了许多分支,不过现在都是特指 <code>GNU Emacs</code>,时间没有葬送这款软件,直至现在也有不少人在使用它。</p><h2 id="Emacs-之世界观"><a href="#Emacs-之世界观" class="headerlink" title="Emacs 之世界观"></a>Emacs 之世界观</h2><p>经过将近一年的使用,我对于 <code>Emacs</code> 也有了更多的了解,索性再写一遍第(1)篇吧。</p><p><code>Emacs</code> ,其<a href="https://www.gnu.org/software/emacs/">官网</a>对它的描述是:一个可拓展的、客制化的自由(免费)文本编辑器—and more。当然这么多天用下来,我发现其实 <code>Emacs</code> 本质并不是一个文本编辑器,因为它有一片自己的世界……</p><p>举个不恰当的例子来说,其它文本编辑器里编辑文本像是挥舞武器,安装一个插件并运用其功能像是吟唱一个魔法,其底层实现方式大家都一样,之间的区别不是很大。</p><p>而 <code>Emacs</code>,表面看是挥舞武器,但实际是因为心中有战斗的决心所以才能具现一把专属武器并战斗,表面上看是吟唱魔法,但实际上是因为其所在世界是一个失落的高科技世界,吟唱魔法其实是在和空中散落的纳米单元进行沟通然后由单元实现具体效果……虽然最后 <code>Emacs</code> 和其他文本编辑器实现了同样效果,但是它们的「世界观」是有根本不同的。</p><h2 id="自由"><a href="#自由" class="headerlink" title="自由"></a>自由</h2><p>查看 <code>Emacs</code> 代码仓库就能发现,其构成代码有近六成是由一个叫作 <code>Emacs Lisp</code> 的语言构成的,<code>Emacs</code> 以其说是一款文本编辑器倒不如说是作为 <code>Emacs Lisp</code> 的运行环境,打开软件那出现的窗口和菜单,是 <code>Emacs</code> 自己不断修改自己的体现。</p><p>这样的实现方式,更是让 <code>Emacs</code> 对于用户的态度和其他编辑器有很大不同,再举个不恰当的例子来说:</p><p>其它文本编辑器就像一个人类:</p><ul><li><p>想要其它功能的话请指定,比如沟通语言从英语切换成汉语……什么?想要克林贡语,不好意思,没有,请自行查询插件商店吧。</p></li><li><p>商店里没有?请自己参照接口标准自行实现一个吧?什么,你还想要修改大脑的核心功能?不可能!太危险了!</p></li><li><p>真想要修改大脑核心功能的话,请自行修改「源代码」去。</p></li></ul><p><code>Emacs</code>:</p><ul><li>犹如一个不定形的阿米巴变形虫,时刻不停在蠕动、变形……</li><li>想要切换到特定功能?好啊好啊,请自行在「配置文件」里指定吧……</li><li>没有想要的功能?那请自行在「配置文件」里实现具体功能吧……等我重载之后就能看到新功能了……</li><li>想干预一个核心功能?随便……</li></ul><p>所以对于 <code>Emacs</code> 来说,它不像其他软件的 <code>.ini</code> <code> .env</code> 一样,只能附加几个参数或者在 <code>A</code> 和 <code>B</code> 已有的功能切换,在 <code> Emacs</code> 里,没有 <code>C</code> 功能,你可以自行在「配置文件」里实现,因为「配置文件」即是「源代码」,因为 <code>Emacs</code> 是在那旧时代下诞生的软件,它完全信任用户。</p><h2 id="混乱"><a href="#混乱" class="headerlink" title="混乱"></a>混乱</h2><p>当然自由的代价就是导致了其黑魔法满天飞,大魔法师用着呼风唤雨,而学徒却看着一大堆选择摸不着头脑。</p><p>不过随着社区的聚集,现在也出现了 <a href="https://www.spacemacs.org/">Spacemacs</a> 和 <a href="https://github.com/doomemacs/doomemacs">Doom emacs</a> 这样的整合网上优秀第三方包和配置的配置集,新手直接使用的话可以在一开始时就能体验到 <code>Emacs</code> 生态里的大部分优秀功能。</p><h2 id="低效"><a href="#低效" class="headerlink" title="低效"></a>低效</h2><p>建立在 <code>Emacs Lisp</code> 上的 <code>Emacs</code> 其一大特征就是……慢……当然大多数场景不会感受到,但是出现了这个情况就真的有点锻炼耐心了。而且 <code>Emacs</code> 说好听点是历史悠久,难听点就是历史包袱过重了,一些上古代码散落在各处,非常高效地拖慢了 <code>Emacs</code> 在一些场景的性能让其低效(感谢 <code>Emacs</code> 让我在 2022 年体会到了多图杀猫的效果)。</p><h2 id="甜美错觉"><a href="#甜美错觉" class="headerlink" title="甜美错觉"></a>甜美错觉</h2><p>如果在多了解一点的话,可能就会发现很多人都在吐槽 <code>Emacs</code> 用着像是一款操作系统一样,收发电子邮件、记录笔记、安排待办、写代码、甚至进行聊天。因为 <code>Emacs</code> 其「万物皆文本」的哲学,代码是文本,笔记和待办也是,甚至文件列表或是菜单栏也是(文本定义九宫格.jpg),也借助于 <code>Emacs Lisp</code> 的灵活性,只要你能想到有关于文字的编辑功能,你就能够去实现。</p><p>而且这些功能都做为一个包被 <code>Emacs</code> 载入,所以这些功能还能进行联动,比如将待办里的任务作为电子邮件发送,将文件夹内的全文搜索结果裁剪为笔记,在笔记中嵌入可以执行的代码……因为这就是 <code>Emacs</code> ,虽然实现的过程中可能像是在布满乐高的地板上赤脚行走,让人痛苦不堪感到沮丧,或许在 <code>Emacs</code> 里实现还不如直接用专用软件效果来得好,但是 <code>Emacs</code> 它就是让人产生了这样的错觉:</p><blockquote><p>我们必须实现,我们必将实现。</p></blockquote><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><p><a href="https://nyk.ma/posts/emacs-intro/">Emacs 自力求生指南 ── 前言</a></p><p><a href="https://github.com/redguardtoo/mastering-emacs-in-one-year-guide/blob/master/guide-zh.org">一年成为Emacs高手 (像神一样使用编辑器)</a></p><p><a href="https://manateelazycat.github.io/emacs/2018/12/11/study-emacs.html">怎么学习 Emacs ? 达到真正融汇贯通的境界? </a></p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
<tag> Emacs </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>如何改变自己</title>
|
||
<link href="/2022/08/%E5%A6%82%E4%BD%95%E6%94%B9%E5%8F%98%E8%87%AA%E5%B7%B1/"/>
|
||
<url>/2022/08/%E5%A6%82%E4%BD%95%E6%94%B9%E5%8F%98%E8%87%AA%E5%B7%B1/</url>
|
||
|
||
<content type="html"><![CDATA[<p>基本就是 Kurz 的视频的梳理:</p><p><a href="https://www.bilibili.com/video/BV1334y1j7DD">【Kurz】如何改变自己的人生?@青知字幕组-哔哩哔哩</a></p><p><a href="https://www.youtube.com/watch?v=75d_29QWELk">Change Your Life – One Tiny Step at a Time - Youtube</a></p><span id="more"></span><p><img src="https://media.southfox.me/ipfs/bafkreigayiupw7d5gg5pterrb3o6j4p23lyzqdn63ud3fs5ggj3tujuiya?filename=image.png" alt="img"></p><p>当今互联网充斥着各种成功学金句、传说和鸡汤,要是你没做成什么事,那么一切都是你的错!</p><p>但事实是做出改变就是一件艰难的事。</p><h1 id="丛林比喻"><a href="#丛林比喻" class="headerlink" title="丛林比喻"></a>丛林比喻</h1><p><img src="https://media.southfox.me/ipfs/bafkreid4btr3e35nhnzkmvwn7g3dwqjozr3qgxi4iyxrhiucuefm4uv5oa?filename=image.png" alt="img"></p><p>外部环境就像是一片错综复杂犹如迷宫般的雨林,在里面生活可是件很累的事,还需耗费大量的精力。所以经过千万年的进化,人类的大脑开始学会走捷径。</p><p><img src="https://media.southfox.me/ipfs/bafkreidth26bi54ritzgzi3srdszk73jmr66b4dqd3dg3sciqhtsgtsfli?filename=image.png" alt="img"></p><p>所做出的每一次相同的决定,就像是在雨林中的一个位置上走了一遍,当走的次数多了,大脑就开始重视起这条路径。这条路径就开始变成了一条舒适又高效的道路了,走起这条路来那真是不带任何犹豫的……</p><p>如果自己想要做的事仍是一片丛林,那么有什么事已经成为高速路了呢?</p><ul><li>看到手机就开始下意识的解锁</li><li>躺床上看手机看到深夜哪怕在后半夜叹道自己今天依旧在浪费时间</li><li>每次到吃饭的地方总会选择同一家餐馆然后点同样的菜</li></ul><p>随着年龄的增长,所建造的高速路也不断增多,所以说年纪越大越不容易改变,因为又有谁能富有强大的拓荒精神抛下高效且安全的高速路,去面对未知且危险的丛林呢?</p><h1 id="例行和习惯"><a href="#例行和习惯" class="headerlink" title="例行和习惯"></a>例行和习惯</h1><p><img src="https://media.southfox.me/ipfs/bafkreicp5345w6vp443dm7lwzx6su7swv5llcnzhtbqit6mujqzgjtquqi?filename=image.png" alt="img"></p><p>例行(惯例)是指按照一定步骤去做的事物,例如按照菜谱煮菜、初学开车等,当为一件例行投入大量时间和精力重复多次后,那么……</p><p><img src="https://media.southfox.me/ipfs/bafkreicqlnedjdzsqlthhitfrnzidshbit4jvf2qpodn2zkkpgj2tscwo4?filename=image.png" alt="img"></p><p>这件例行就会成为一个习惯,习惯是自然发生的,做一件习惯的事不用说服自己,因为……它就是习惯。例如上十年经验的开车、解锁手机并打开某一个社交 APP 等。</p><h2 id="幼儿和导师"><a href="#幼儿和导师" class="headerlink" title="幼儿和导师"></a>幼儿和导师</h2><p><img src="https://media.southfox.me/ipfs/bafkreido3ak6xul5duhfc2nbo3pkwxpk2g4sod7fpe7a2rsqxz4qjtffii?filename=image.png" alt="img"></p><p>人们总会沉溺在自己的坏习惯中无法自拔,事后又后悔不已,那是因为习惯的背后是由一个「幼儿」所掌握,眼里只有现在马上就能得到的满足。</p><p>而很不幸现代社会能马上产生满足事物太多了,袋装薯片、榜上有名的 APP 。沉溺其中也不是件丢人的事,因为它们背后可是站着无数聪明才智之人,重要的是认识到通过自己的意志力战胜这些人是一件困难的事,要思考如何规避避免硬碰硬(例如寻找是否有其它可替代客户端,能否关闭推荐功能或是私人推送功能)。</p><p><img src="https://media.southfox.me/ipfs/bafkreiaq253nj6nbgf6mlwdcrv2qp3oswgit62qhljxvpbd7itzrphlffa?filename=image.png" alt="img"></p><p>而惯例既是由一个「导师」所掌握的,需要消耗珍贵的意志力去计划并执行,意志力通常在一天内都是宝贵的不可再生资源且通常都不能提升上限(尤其对于有 ADHD 特质的人来说)。</p><h2 id="我们联合!"><a href="#我们联合!" class="headerlink" title="我们联合!"></a>我们联合!</h2><p><img src="https://media.southfox.me/ipfs/bafkreia4eg5li2opfoaacxkvi3c6yu3hxuuvbcx23e46lpomnph5nux5gq?filename=image.png" alt="img"></p><p>「幼儿」是亿万年生物进化路上一直伴随着我们的模块,它对于生物的生存至关重要。「导师」是人类千万年来为了适应社会活动进化出来的模块,它很高效且精妙,但也像游戏中的某些武器一样,开不了几下火就会过热。<br>如果需要改变自己,让「幼儿」和「导师」一起为你工作,那么「导师」该如何规划道路的路线,让「幼儿」如何能最小抵抗得为道路完成做努力……</p><h3 id="专注于小目标"><a href="#专注于小目标" class="headerlink" title="专注于小目标"></a>专注于小目标</h3><p><img src="https://media.southfox.me/ipfs/bafkreigz6njoj6ikeeulg63bidoty3fn4t6b4vbycjnhd3fonkmkcecroa?filename=image.png" alt="img"></p><p>不要让躺在待办里的事物是一件吓人的目标,应该是一件每天结束时都能感到有所进展的小目标。让「导师」制定的目标也能像「幼儿」所执行的习惯那样能感到满足感和低抵抗感。</p><p>比如「每天写下五张卡片笔记」或是「每天早上十个深蹲」等。</p><h3 id="易于触发"><a href="#易于触发" class="headerlink" title="易于触发"></a>易于触发</h3><p><img src="https://media.southfox.me/ipfs/bafkreibrke4la2t5qj7lzq6h4jk625zqnn2zzdhjwl4hze5mrngtyai34m?filename=image.png" alt="img"></p><p>这通常来说也是最核心的一步了,如何找到一个触发?习惯的执行需要一个触发,比如看到手机、走到一家餐馆等,而自我决定的触发通常是以闹钟为多数。</p><p>而对于有 ADHD 特质的人来说,能否准确地实施呢?克服 ADHD 特质最需要一个强有力的外在结构也是如此……</p><p>营造一个专用的环境和空间大概有助于此,比如划分出一个专门做这件事的空间,并好好整理一下周围的杂物(杂乱的事物将导致分心的几率大大增加),划分出专门娱乐和学习专用空间(即使缺乏空间也可以在虚拟意义上实现,比如安装两个浏览器,并尽量让自己在学习时只能用专用浏览器)。</p><h3 id="每天重复"><a href="#每天重复" class="headerlink" title="每天重复"></a>每天重复</h3><p>最难的一步,要让例行转为习惯那需要 15~250 天的时间,很多时候坚持不下来就会让一切照旧……还要加上一些自暴自弃的情绪……</p><h3 id="改进"><a href="#改进" class="headerlink" title="改进"></a>改进</h3><p><img src="https://media.southfox.me/ipfs/bafkreigronwruqfwukkhsimsbnlfw6q2mxbeymrib6bsxilgtqyxst2pue?filename=image.png" alt="img"></p><p>在实行的过程也并不是苦修,得尽量让做事的自己少点抵抗,例如放点喜欢的音乐,在跑步时听自己最喜欢的博客等。</p><h1 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h1><p><img src="https://media.southfox.me/ipfs/bafkreiab7e4ivqewy2kfjvz3kofwh7pf3coax5z27tx6u2xvs7h2wwti4q?filename=image.png" alt="img"></p><p>哪怕只是做出了微小的改变,也是往理想的自己靠近一步,改进没有终点,只有方向。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 随笔 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 随笔 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>Gitea:一款自托管的 Git 服务</title>
|
||
<link href="/2022/07/Gitea:%E4%B8%80%E6%AC%BE%E8%87%AA%E6%89%98%E7%AE%A1%E7%9A%84-Git-%E6%9C%8D%E5%8A%A1/"/>
|
||
<url>/2022/07/Gitea:%E4%B8%80%E6%AC%BE%E8%87%AA%E6%89%98%E7%AE%A1%E7%9A%84-Git-%E6%9C%8D%E5%8A%A1/</url>
|
||
|
||
<content type="html"><![CDATA[<p>别忘了泡上一杯茶!</p><span id="more"></span><h2 id="绕不开的存在"><a href="#绕不开的存在" class="headerlink" title="绕不开的存在"></a>绕不开的存在</h2><p>当然,谈到 <code>Git</code> 服务时,肯定绕不过 <code>GitHub</code> 。为什么要大费周章自建呢?<code>GitHub</code> 不好吗?</p><p>是很好,但是也没那么好,因为:</p><ul><li><code>GitHub</code> 是一家商业公司,那么首先盈利肯定是首要目的,为了不倒闭,指不准未来哪天就变质了。</li><li>同上,如果还是个自由软件爱好者的话,想必 <code>GitHub</code> 最近一些事件带来的臭味也不必我再提了……</li><li><code>Git</code> 是分布式的,那么选择同样也是……不知道现在还有多少人还傻傻认为 <code>Git</code> 和 <code>GitHub</code> 是一体的呢?</li></ul><p>也可参见 <a href="https://sfconservancy.org/GiveUpGitHub/">GiveUpGitHub</a> 一文章。</p><h2 id="Gitea"><a href="#Gitea" class="headerlink" title="Gitea"></a>Gitea</h2><p><code>Gitea</code> 是一个用 <code>Go</code> 编写、面向自建的、轻量级的 <code>Git</code> 服务。其安装十分便捷,直接下载个可执行文件也可快速搭建起来,当然为了后续跟其它服务联动,还是用 <code>docker-compose</code> 方便点。</p><p>话不多说,新建一个文件夹然后往里建 <code>docker-compose.yml</code> 文件并写入以下配置:</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">"3.7"</span></span><br><span class="line"></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line"> <span class="attr">gitea:</span></span><br><span class="line"> <span class="attr">image:</span> <span class="string">gitea/gitea:latest</span></span><br><span class="line"> <span class="attr">container_name:</span> <span class="string">gitea</span></span><br><span class="line"> <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br><span class="line"> <span class="attr">environment:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">USER_UID=1000</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">USER_GID=1000</span></span><br><span class="line"> <span class="attr">volumes:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">./data/gitea:/data</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">/etc/timezone:/etc/timezone:ro</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">/etc/localtime:/etc/localtime:ro</span></span><br><span class="line"> <span class="attr">ports:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">"127.0.0.1:3000:3000"</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">"2222:22"</span></span><br><span class="line"> <span class="attr">networks:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">cicd_net</span></span><br><span class="line"></span><br><span class="line"> <span class="attr">drone:</span></span><br><span class="line"> <span class="attr">container_name:</span> <span class="string">drone</span></span><br><span class="line"> <span class="attr">image:</span> <span class="string">drone/drone:latest</span></span><br><span class="line"> <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br><span class="line"> <span class="attr">depends_on:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">gitea</span></span><br><span class="line"> <span class="attr">environment:</span></span><br><span class="line"> <span class="comment"># https://docs.drone.io/server/provider/gitea/</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_DATABASE_DRIVER=sqlite3</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_DATABASE_DATASOURCE=/data/database.sqlite</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_GITEA_SERVER=https://my.git.server/</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_GIT_ALWAYS_AUTH=false</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_RPC_SECRET=changeme...</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_SERVER_PROTO=https</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_SERVER_HOST=https://cicd.git.server</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_GITEA_CLIENT_ID=changeme...</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_GITEA_CLIENT_SECRET=changeme...</span></span><br><span class="line"> <span class="attr">ports:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">"127.0.0.1:3001:80"</span></span><br><span class="line"> <span class="attr">volumes:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">/var/run/docker.sock:/var/run/docker.sock</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">./data/drone:/data</span></span><br><span class="line"> <span class="attr">networks:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">cicd_net</span></span><br><span class="line"></span><br><span class="line"> <span class="attr">drone-runner:</span></span><br><span class="line"> <span class="attr">container_name:</span> <span class="string">drone-runner</span></span><br><span class="line"> <span class="attr">image:</span> <span class="string">drone/drone-runner-docker:latest</span></span><br><span class="line"> <span class="attr">restart:</span> <span class="string">unless-stopped</span></span><br><span class="line"> <span class="attr">depends_on:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">drone</span></span><br><span class="line"> <span class="attr">environment:</span></span><br><span class="line"> <span class="comment"># https://docs.drone.io/runner/docker/installation/linux/</span></span><br><span class="line"> <span class="comment"># https://docs.drone.io/server/metrics/</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_RPC_PROTO=http</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_RPC_HOST=drone</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_RPC_SECRET=changeme...</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_RUNNER_NAME="action-runner"</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_RUNNER_CAPACITY=2</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_RUNNER_NETWORKS=cicd_net</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_DEBUG=false</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">DRONE_TRACE=false</span></span><br><span class="line"> <span class="attr">networks:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">cicd_net</span></span><br><span class="line"> <span class="attr">volumes:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">/var/run/docker.sock:/var/run/docker.sock</span></span><br><span class="line"></span><br><span class="line"><span class="attr">networks:</span></span><br><span class="line"> <span class="attr">cicd_net:</span></span><br><span class="line"> <span class="attr">name:</span> <span class="string">cicd_net</span></span><br></pre></td></tr></table></figure><p>因为预想场景是私人自用,所以选择了 <code>SQlite3</code> 数据库,觉得别扭可以自己改掉……</p><p>然后准备两个域名,这里用 <code>my.git.server</code> 域名指定用来运行 <code>Gitea</code> 服务的域名,一个 <code>cicd.git.server</code> 域名用来指定运行后续的自动构建服务的域名(可选)。</p><p>首先为 <code>my.git.server</code> 域名设定<code>DNS</code> 后申请证书,<code>certbot certonly --nginx -d my.git.server</code></p><p>,申请后写入 <code>nginx</code> 配置:</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#不要忘了替换成自己的域名</span></span><br><span class="line"><span class="section">server</span> {</span><br><span class="line"> <span class="attribute">listen</span> <span class="number">80</span>;</span><br><span class="line"> <span class="attribute">listen</span> [::]:<span class="number">80</span>;</span><br><span class="line"> <span class="attribute">server_name</span> my.git.server;</span><br><span class="line"></span><br><span class="line"> <span class="section">location</span> /.well-known/acme-challenge {}</span><br><span class="line"> <span class="section">location</span> / {</span><br><span class="line"> <span class="attribute">return</span> <span class="number">301</span> https://<span class="variable">$host</span><span class="variable">$request_uri</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="section">server</span> {</span><br><span class="line"> <span class="attribute">listen</span> <span class="number">443</span> ssl http2;</span><br><span class="line"> <span class="attribute">listen</span> [::]:<span class="number">443</span> ssl http2;</span><br><span class="line"> <span class="attribute">server_name</span> my.git.server;</span><br><span class="line"></span><br><span class="line"> <span class="attribute">access_log</span> /var/log/nginx/access.log;</span><br><span class="line"> <span class="comment">#root /home/plume/Plume/ ;</span></span><br><span class="line"></span><br><span class="line"> <span class="attribute">ssl_certificate</span> /etc/letsencrypt/live/my.git.server/fullchain.pem;</span><br><span class="line"> <span class="attribute">ssl_certificate_key</span> /etc/letsencrypt/live/my.git.server/privkey.pem;</span><br><span class="line"></span><br><span class="line"> <span class="comment"># for ssl conf: https://cipherli.st/</span></span><br><span class="line"> <span class="attribute">ssl_protocols</span> TLSv1.<span class="number">2</span> TLSv1.<span class="number">3</span>;<span class="comment"># Requires nginx >= 1.13.0 else use TLSv1.2</span></span><br><span class="line"> <span class="attribute">ssl_prefer_server_ciphers</span> <span class="literal">on</span>;</span><br><span class="line"> <span class="attribute">ssl_dhparam</span> /etc/letsencrypt/ssl-dhparams.pem;<span class="comment"># openssl dhparam -out /etc/letsencrypt/ssl-dhparam.pem 4096</span></span><br><span class="line"> <span class="attribute">ssl_ciphers</span> ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;</span><br><span class="line"> <span class="attribute">ssl_ecdh_curve</span> secp384r1; <span class="comment"># Requires nginx >= 1.1.0</span></span><br><span class="line"> <span class="attribute">ssl_session_timeout</span> <span class="number">10m</span>;</span><br><span class="line"> <span class="attribute">ssl_session_cache</span> shared:SSL:<span class="number">10m</span>;</span><br><span class="line"> <span class="attribute">ssl_session_tickets</span> <span class="literal">off</span>; <span class="comment"># Requires nginx >= 1.5.9</span></span><br><span class="line"> <span class="attribute">ssl_stapling</span> <span class="literal">on</span>; <span class="comment"># Requires nginx >= 1.3.7</span></span><br><span class="line"> <span class="attribute">ssl_stapling_verify</span> <span class="literal">on</span>; <span class="comment"># Requires nginx => 1.3.7</span></span><br><span class="line"> <span class="attribute">resolver</span> <span class="number">9.9.9.9</span> <span class="number">80.67.169.12</span> valid=<span class="number">300s</span>;</span><br><span class="line"> <span class="attribute">resolver_timeout</span> <span class="number">5s</span>;</span><br><span class="line"> <span class="attribute">add_header</span> Strict-Transport-Security <span class="string">"max-age=63072000; includeSubDomains; preload"</span>;</span><br><span class="line"> <span class="attribute">add_header</span> X-Frame-Options DENY;</span><br><span class="line"> <span class="attribute">add_header</span> X-Content-Type-Options nosniff;</span><br><span class="line"> <span class="attribute">add_header</span> X-XSS-Protection <span class="string">"1; mode=block"</span>;</span><br><span class="line"> <span class="comment">#如果不想显示外链图片可把 img-src 一栏改掉</span></span><br><span class="line"> <span class="attribute">add_header</span> Content-Security-Policy <span class="string">"default-src 'self'; img-src *; frame-ancestors 'self'; frame-src https:"</span>;</span><br><span class="line"></span><br><span class="line"> <span class="section">location</span> / {</span><br><span class="line"> <span class="attribute">proxy_pass</span> http://localhost:3000/;</span><br><span class="line"> <span class="attribute">proxy_set_header</span> Host <span class="variable">$http_host</span>;</span><br><span class="line"> <span class="attribute">proxy_set_header</span> X-Real-IP <span class="variable">$remote_addr</span>;</span><br><span class="line"> <span class="attribute">proxy_set_header</span> X-Forwarded-For <span class="variable">$proxy_add_x_forwarded_for</span>;</span><br><span class="line"> <span class="attribute">proxy_set_header</span> X-Forwarded-Proto <span class="variable">$scheme</span>;</span><br><span class="line"> <span class="attribute">client_max_body_size</span> <span class="number">50m</span>;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>之后 <code>nginx -s reload</code> 重载配置,然后 <code>docker-compose up -d gitea</code> 把 <code>Gitea</code> 服务启动,之后前往 <code>my.git.server</code> 地址进行配置并新建一个管理员账户。</p><h3 id="Drone"><a href="#Drone" class="headerlink" title="Drone"></a>Drone</h3><p>到此服务就基本可用了,但是我相信很多人割舍不下 <code>GitHub</code> 的一个原因就是因为它的 <code>Actions</code> 很香。不过可以选择 <code>Drone</code> ,一个同样用 <code>GO</code> 编写的、轻量级的自动构建服务,也可以让体验往 <code>GitHub Actions</code> 靠拢。</p><p>首先为 <code>cicd.git.server</code> 域名申请证书并写入 <code>nginx</code> 配置文件,配置文件可复用上面的,只需要更改相关域名和 <code>nginx</code> 配置文件里的 <code>location /</code> 里的 <code>proxy_pass</code> 端口号就行(本例子是 <code>3001</code>)。</p><p>之后为 <code>Drone</code> 和 <code>Gitea</code> 联动做准备,登陆自己 <code>Gitea</code> 实例的帐号→设置→应用→创建新的 OAuth2 应用程序,应用名称随意填(本例子填 drone),重定向 URI 填入 <code>https://cicd.git.server/login</code> (替换成自己的域名)。</p><p>点击创建应用→会生成一个客户端 ID 和一个客户端密钥→替换到上述 <code>docker-compose.yml</code> 里 <code>drone</code> 一栏的 <code>DRONE_GITEA_CLIENT_ID</code> 和 <code>DRONE_GITEA_CLIENT_SECRET</code> 。</p><p>之后再使用 <code>openssl rand -hex 16</code> 命令生成一串随机字符串给 <code>DRONE_RPC_SECRET</code> 使用(有两个地方需要替换)。</p><p>确认无误后使用 <code>docker-compose up -d</code> 启动全部服务,之后前往 <code>https://cicd.git.server</code> 地址查看是否正常运行,是的话点击登陆,看是否能够和 <code>Gitea</code> 进行联动,如果显示错误请检查是否与上述配置一致(例如我之前就遇到了无法验证的错误,排查后发现是某个路径多带了一个 <code>/</code> 导致之后生成的验证路径出错,去掉 <code>/</code> 之后就正常了)。</p><h3 id="仓库操作"><a href="#仓库操作" class="headerlink" title="仓库操作"></a>仓库操作</h3><p>因为宿主机的 <code>22</code> 端口已被占用,所以克隆或者 <code>PUSH</code> 仓库使用的端口应该为 <code>2222</code>,觉得别扭也有其他教程教如何与宿主机共用端口,我就不折腾了(反正 <code>Just work!</code> )。</p><p>还有如果为网站使用了 <code>Cloudflare</code> 之类的 <code>CDN</code> 服务的话,那么 <code>SSH</code> 协议也是不能用的,得用网站域名下的真实 <code>IP</code> 地址克隆或 <code>PUSH</code> 仓库。</p><p>如果像我什么都没改的话,想要克隆仓库就会得到这么一个奇怪的地址:</p><p><code>git clone ssh://git@机子真实IP:2222/用户名/仓库名.git</code></p><p>反正 <code>Just work</code> !</p><h3 id="一个案例"><a href="#一个案例" class="headerlink" title="一个案例"></a>一个案例</h3><p>那么接下来就讲讲我用这套服务的案例吧,自动生成文件并推送一个 <code>HUGO</code> 博客。</p><p>首先为仓库根目录写下 <code>.drone.yml</code> 文件:</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">kind:</span> <span class="string">pipeline</span></span><br><span class="line"><span class="attr">name:</span> <span class="string">build</span></span><br><span class="line"></span><br><span class="line"><span class="attr">steps:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">build</span></span><br><span class="line"> <span class="attr">image:</span> <span class="string">klakegg/hugo:alpine</span></span><br><span class="line"> <span class="attr">commands:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">hugo</span></span><br><span class="line"></span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">deploy</span></span><br><span class="line"> <span class="attr">image:</span> <span class="string">node</span></span><br><span class="line"> <span class="attr">environment:</span></span><br><span class="line"> <span class="attr">CLOUDFLARE_API_TOKEN:</span></span><br><span class="line"> <span class="attr">from_secret:</span> <span class="string">api_token</span></span><br><span class="line"> <span class="attr">CLOUDFLARE_ACCOUNT_ID:</span></span><br><span class="line"> <span class="attr">from_secret:</span> <span class="string">account_id</span></span><br><span class="line"> <span class="attr">commands:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">npm</span> <span class="string">install</span> <span class="string">-g</span> <span class="string">wrangler</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">npx</span> <span class="string">wrangler</span> <span class="string">pages</span> <span class="string">publish</span> <span class="string">public</span> <span class="string">--project-name</span> <span class="string">项目名</span> <span class="string">--commit-dirty=true</span></span><br></pre></td></tr></table></figure><p>可以见到和 <code>GitHub Actions</code> 的配置还是挺像的,琢磨琢磨还是挺快上手的。</p><p>其中 <code>steps</code> 指定了所需步骤,<code>image</code> 指定了需要什么样的 <code>docker</code> 镜像,第一栏拉取了 <code>klakegg/hugo</code> 镜像并使用 <code>hugo</code> 命令生成静态文件。</p><p>之后是 <code>deploy</code> 一栏里的 <code>environment</code> ,像 <code>GitHub</code> 一样,密钥相关可以使用 <code>secret</code> 功能导入到环境变量中,可在自己的 <code>cicd.git.server</code> →相关仓库→ <code>Settings</code> → <code>Secrets</code> 里进行导入。</p><p>接下来使用 <code>node</code> 镜像安装了个 <code>wrangler</code> 包,这是 <code>Cloudflare Pages</code> 部署要用的,如果也用 <code>Cloudflare Pages</code> 部署的话可以参考:</p><p><a href="https://developers.cloudflare.com/workers/wrangler/commands/#pages">Wrangler pages commands</a></p><p><a href="https://developers.cloudflare.com/workers/wrangler/ci-cd/">Running Wrangler in CI/CD</a></p><p>PS:不得不吐槽相关操作首先必须要用 <code>project create</code> 命令里的 <code>--production-branch</code> 显式指定部署分支否则接下来的部署都会被识别为预览而不会真正部署到……被这个坑卡了好一会……</p><p>之后再进行相关操作后应该能看见自己 <code>Gitea</code> 实例也有小绿勾了(小红叉也行,至少证实自动部署服务有在用了)!</p><h3 id="加主题"><a href="#加主题" class="headerlink" title="加主题"></a>加主题</h3><p>默认主题还挺程序员风格的,既然都自建了,肯定要加点主题快乐一下了。</p><p>以<a href="https://codeberg.org/Freeplay/Gitea-Modern/">现代主题</a>为例。</p><p>如果是以上面的配置文件搭建起来的话要在自己文件夹下找到 <code>./data/gitea/gitea</code> 路径,并在里头新建 <code>public/css</code> 下 <code>wget https://codeberg.org/Freeplay/Gitea-Modern/raw/branch/main/Gitea/theme-gitea-modern.css</code> 获取主题文件。</p><p>之后再编辑 <code>./data/gitea/gitea/conf/app.ini</code> 文件,在最后面加上:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">请自己想象下……</span><br><span class="line">因为现在我服务器炸了……</span><br></pre></td></tr></table></figure><p>之后再用 <code>docker-compose down</code> 和 <code>docker-compose up -d</code> 重启服务。</p><h3 id="安全"><a href="#安全" class="headerlink" title="安全"></a>安全</h3><p>如果没有相关要求,请务必关闭实例的注册功能。</p><p>参见,<a href="https://imlonghao.com/59.html">记一次自建 Gitea + Drone 实例被挖矿的经历</a></p><p>也是修改 <code>./data/gitea/gitea/conf/app.ini</code> 里的:</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">请自己查阅……</span><br><span class="line">因为我现在服务器炸了</span><br></pre></td></tr></table></figure><p>之后再用 <code>docker-compose down</code> 和 <code>docker-compose up -d</code> 重启服务,然后再检查站点是否关闭了注册入口。</p><h3 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h3><p><a href="https://blog.ruanbekker.com/blog/2021/03/09/cicd-with-droneci-and-gitea-using-docker-compose/">CICD With DroneCI and Gitea Using Docker Compose</a></p><p><a href="https://docs.gitea.io/en-us/">Gitea Docs</a></p><p><a href="https://docs.drone.io/">Drone Docs</a></p><p><a href="https://tech.ray247k.com/blog/202106-drone-cicd-3-advanced-cron-job/">透過 Drone 建立自動部署流程,部署排程設定與權限管理 - 薛丁格的工程師</a></p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
<tag> 建站 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>二二年六月梦记</title>
|
||
<link href="/2022/06/%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%85%AD%E6%9C%88%E6%A2%A6%E8%AE%B0/"/>
|
||
<url>/2022/06/%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%85%AD%E6%9C%88%E6%A2%A6%E8%AE%B0/</url>
|
||
|
||
<content type="html"><![CDATA[<p>能做梦说明我是终于有睡饱了……</p><span id="more"></span><h2 id="6-14-中"><a href="#6-14-中" class="headerlink" title="6-14 中"></a>6-14 中</h2><h3 id="预兆"><a href="#预兆" class="headerlink" title="预兆"></a>预兆</h3><p>我在一个广场上,一些人就站在其中,广场中间有一个大号喷泉。<br>我跟着某个人去见……某个人……那个人一见我就立马用手搓着我的脸,我回应了几句,期间他嘴里漏出了几句中文。我问到,你懂中文?<br>他回应道:“我爷爷后半辈子在太原生活。”<br>然后他又仔细端详着我的脸,我说:“看相不应该是南方盛行的东西吗?”,他只打了个哈哈就应付过去了。看完相后,他拉着我走起了步伐,不像跳舞,像是……禹步?但是我还是有时像跳舞一样被他一手用手拉着。结束后,他大声疾呼:“大干旱,大旱灾之象啊!”,然后就跑开了。<br>我只觉得他的语言有点神经,八亿年之久的大干旱?比几百万年的卡尼期洪积事件还要离谱哩,望着广场喷涌的喷泉,我这样想到……</p><h3 id="干旱来临"><a href="#干旱来临" class="headerlink" title="干旱来临"></a>干旱来临</h3><p>随后就是旱灾来临了,倒是都是躺下的人,可能还有几个还能哀嚎,其他人已经毫无动静了……广场中间的喷泉早已干涸,或许只有中间的泥土还保有几丝湿润。喷泉中躺倒着一人,我望向他,就似乎看到了当时的景象——别死在喷泉里!会污染的!会污染的!滚出去……<br>我只想找到那个预言家,他去哪儿了?</p><h3 id="幕后"><a href="#幕后" class="headerlink" title="幕后"></a>幕后</h3><p>巨大的六角形机器浮在空中,然后一道细小的白光闪了出去,打向不远处的另一个六角形,但是一道强光爆发出来,把白光弹回了原六角形处……<br>一个类似控制式的地方……屏幕亮了起来。<br>“我们已知晓你所做的破坏活动!还接连破坏了七个地区……严惩……”<br>然后似乎被某人关掉了,那人连线上了另外一个人,另一个人似乎类似鳄鱼,但是脸确有像阶梯状,非常古怪。控制室内的人叫鳄鱼人把身份信息发过来好进行伪装,说是要这样才能糊弄过那些追查过来的人,看起来那鳄鱼人是什么纳税大户吗?</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>Magit使用随记暨Emacs随记(3)</title>
|
||
<link href="/2022/06/magit%E4%BD%BF%E7%94%A8%E9%9A%8F%E8%AE%B0%E6%9A%A8Emacs%E9%9A%8F%E8%AE%B0%EF%BC%883%EF%BC%89/"/>
|
||
<url>/2022/06/magit%E4%BD%BF%E7%94%A8%E9%9A%8F%E8%AE%B0%E6%9A%A8Emacs%E9%9A%8F%E8%AE%B0%EF%BC%883%EF%BC%89/</url>
|
||
|
||
<content type="html"><![CDATA[<p><code>magit</code> 是个好东西。</p><span id="more"></span><p><code>Magit</code> 是一个 <code>Emacs</code> 的包,将一大堆长又长的 <code>Git</code> 指令封装成了按键操作,对于受够了了在终端下按够了 <code>TAB</code> 键的人来说,是一种解放,无怪 <code>Magit</code> 的评价在整个 <code>Emacs</code> 生态里评价那么好了。</p><h2 id="Git"><a href="#Git" class="headerlink" title="Git"></a>Git</h2><p><code>Magit</code> 是建立在 <code>Git</code> 上的,意味着要使用得先对 <code>Git</code> 有一定了解,<a href="https://book.douban.com/subject/27133267/">Pro Git</a> 是一本不错的入门书,而且做为一本「开源」书籍,也很容易在网上找到可在线浏览的方式。</p><h3 id="奇怪比喻"><a href="#奇怪比喻" class="headerlink" title="奇怪比喻"></a>奇怪比喻</h3><p><code>Git</code> 的精髓在于它的设计,工作区、暂存区以及版本库,用 <code>Git</code> 进行工作一般如下所示(图出自 Pro Git)。</p><p><img src="https://media.southfox.me/ipfs/bafkreidcpqxgpknpmc5nmtjqzulncjwfdauiorlt6lcggxfswjh36rjelq"></p><p>用小学生写作业做比喻的话,草稿纸即是工作区,做好相关计算后把结果誊抄到作业本上,作业本既是暂存区(<code>Index</code>、<code>Stage</code>),最后确认无误后即可把作业本放入书包,书包既是版本库了。</p><p><code>Git</code> 的设计给了使用者操作上的灵活,却也让人感到冗长,设置别名可以缓解这种情况,不过还是没有优化到单键操作的 <code>Magit</code> 偷懒偷得多。</p><h2 id="Magit"><a href="#Magit" class="headerlink" title="Magit"></a>Magit</h2><h3 id="一般流程"><a href="#一般流程" class="headerlink" title="一般流程"></a>一般流程</h3><p>在 <code>Doom Emacs</code> 下,使用 <code>SPC g g</code> 即可选择一个 <code>Git</code> 仓库(如果已经打开了一个 <code>Git</code> 仓库的的文件即可直接打开当前仓库下的 <code>Magit</code> 界面)打开 <code>Magit</code> 界面。</p><p><img src="https://media.southfox.me/ipfs/bafkreiele2ihm55y4rbemvz4dojlnukapibj4zn5isssj2x5huqsq76qdq"></p><p>在 <code>Magit</code> 界面下,可以很方便看到工作区发生变动的文件(Unstaged changes),以及已经加入到暂存区的文件(Staged changes)。</p><p><img src="https://media.southfox.me/ipfs/bafkreicttv7rkuzq5ishn6x3lix4rwdtkka7dubm5rjh67teehgcbh7nzy"></p><p>光标在某个文件上时,按下 <code>TAB</code> 即可展示文件的变动,按下回车即可直接跳转到文件进行编辑,按下 <code>s</code> 即可将文件暂存,对处于暂存区文件按下 <code>u</code> 即可取消暂存(<code>S</code> 和 <code>U</code> 则是应用于全体文件)。忘掉 <code>git add xxx</code> 吧,谁会怀念它?</p><p>确认暂存区的改动后即可进行提交(commit)将其送入版本库了,对应的快捷键是 <code>c</code>,对于很多复杂的 <code>Git</code> 操作附带了很多选项来完成,<code>Magit</code> 把能用的操作都罗列了出来,做到了看菜下饭。</p><p>对于提交(commit) 操作,其里面常用的有:</p><ul><li><code>- s</code> 或 <code>- S</code> 附上签名消息或使用 <code>GPG</code> 进行签名认证。</li><li><code>c</code> 进行 <code>commit</code> 操作,之后会打开一个新区域输入消息,输入完毕后用 <code>C-c C-c</code> 进行确认(<code>C-c C-k</code> 为取消提交)。</li><li><code>a</code> 进行 <code>--amend</code> 操作,即为重新进行提交操作,适用于提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了的情况。</li></ul><p>实际用习惯了之后基本就是无脑操作了,比如使用 <code>p p</code> 快捷键,即可直接推送到默认的分支上,如果要进行其他操作比如推送到其他分支上,那么按一下 <code>p</code> 之后再看信息提示进行操作也不会太难。</p><p>对于更多操作,按下 <code>?</code> 即可进入提示菜单,或是翻阅 <code>Magit</code> 的<a href="https://magit.vc/manual/magit.html">手册</a>了解更多操作。</p><h3 id="从实战到跑路"><a href="#从实战到跑路" class="headerlink" title="从实战到跑路"></a>从实战到跑路</h3><p>现在来说说我拿 <code>Magit</code> 实际干过的事吧,</p><p>首先是要心动,看上了其他分支的功能,打算抄抄作业,那么第一件事就是把对方仓库克隆下来。在 <code>Magit</code> 界面按下 <code>M</code> 即可进入 <code>Remote</code> 界面,按下 <code>a</code> 添加,输入名称以及仓库地址来添加一个 <code>Remote</code> 。</p><p>接着开始检索对方仓库的提交,检出自己需要的提交,按下 <code>l</code> 打开 <code>log</code> 界面,按下 <code>- F</code> 搜索提交消息,之后输入想检索的提交消息,例如 <code>exclusive list</code>,再按下 <code>o</code> ,选择搜索其他(other)分支的历史记录,选择之前添加的 <code>Remote</code> 仓库的分支。</p><p><img src="https://media.southfox.me/ipfs/bafkreiduuqcpezsvunsggij4gfahdn53kxiacwewsbmciglk62v44yoane"></p><p>可以看到搜索出了相关的三条结果,从最旧的开始合并,将光标移动到最旧的提交,按下 <code>A A</code> 进行一次 <code>cherry-pick</code> 。</p><p><img src="https://media.southfox.me/ipfs/bafkreifkslyzgyvcm5zkapevoxkrnkdubh7uwbwwjjpjrkmwur43k4ji7i"></p><p>啊啊啊……!一大堆冲突,毕竟这次的提交很老旧了,是三年前的提交,发生变化很正常……</p><p>感叹一句没有银弹,<code>Git</code> 对于冲突也从不僭越,会去自作主张搞定。所以只能自己上了,对于这种老旧的提交,可以前去 <code>GitHub</code> 的那次提交消息里查看改动了哪些文件,再前去最新版本文件下仔细比对最新的样子是什么。当然 <code>Magit</code> 同时也提供了一个命令 <code>magit-log-buffer-file</code>(<code>SPC g L</code>)查看当前文件下有那些提交,</p><p><img src="https://media.southfox.me/ipfs/bafkreied5lnnuofc7isxw3ufrg6j7gbs4ptzs27pkuxq54tcicnltl3k5e" alt="检出更改"></p><p>不过用这种方式查看双方提交记录的话,得先 <code>Stash</code> 修改再切换到对方分支查看历史记录又切换回来,感觉挺麻烦……所以我就先用 <code>GitHub</code> 查看历史了,或许有更快速方便的方法?</p><p>总之,确定该怎样合并后即可进入 <code>Unstaged changes</code> 上的任一文件按下 <code>E</code> 打开 <code>Ediff</code> 选单,再按下 <code>m</code> 解决冲突。</p><p><img src="https://media.southfox.me/ipfs/bafkreie5it6wivelcnp63l34epa377lijrksptmodz7nwsb7325n4g4zsq"></p><p>进入冲突选单后,用 <code>n</code> 键跳转到下一冲突处(<code>p</code> 为上一个),接着按下 <code>a</code> 或 <code>b</code> 选择保留那一方的修改,这次的提交要结合两者,所以首先选择一方,然后用 <code>SPC w k</code> 将焦点移动到上方文件编辑区进行编辑,编辑完后再用 <code>SPC w j</code> 将焦点移回 <code>Ediff</code> 区。处理完全部冲突后,按下 <code>q</code> 退出,再处理其他文件的冲突。</p><p>处理完全部冲突后,按下 <code>c c</code> 进行一次提交,之后按下 <code>p p</code> 推送到 <code>GitHub</code> 上,祈祷部署能够成功吧!</p><p>如果想要合并的提交不是那么久远的话,可以用 <code>Y</code> 按键对应的 <code>Cherries</code> 操作来检出自己想要的提交,虽然我没用过(</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> Emacs </tag>
|
||
|
||
<tag> Git </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>我拿Emacs做什么暨Emacs随记(2)</title>
|
||
<link href="/2022/05/%E6%88%91%E6%8B%BFEmacs%E5%81%9A%E4%BB%80%E4%B9%88%E6%9A%A8Emacs%E9%9A%8F%E8%AE%B0%EF%BC%882%EF%BC%89/"/>
|
||
<url>/2022/05/%E6%88%91%E6%8B%BFEmacs%E5%81%9A%E4%BB%80%E4%B9%88%E6%9A%A8Emacs%E9%9A%8F%E8%AE%B0%EF%BC%882%EF%BC%89/</url>
|
||
|
||
<content type="html"><![CDATA[<p>大概也算是卡片笔记法的介绍?</p><span id="more"></span><blockquote><p><strong>提醒</strong>:本文作者用上下列的方法也不是很久,甚至这篇文章还能算做第一个正式产出,所以……请谨慎判断。</p></blockquote><h2 id="卡片笔记"><a href="#卡片笔记" class="headerlink" title="卡片笔记"></a>卡片笔记</h2><h3 id="卡片笔记法解决了什么?"><a href="#卡片笔记法解决了什么?" class="headerlink" title="卡片笔记法解决了什么?"></a>卡片笔记法解决了什么?</h3><p>在空白处写涂涂写写、划重点、摘抄、不断翻阅资料,但是最后感觉还是学废了,到头来还是什么也没学到,或者记了一大堆笔记但是却成了一个坟墓,每次到里面想要提取点东西简直痛不欲生……</p><p>因为不断的阅读书籍并没有对学习产生帮助,反而因为<strong>曝光效应</strong>而更有害(曝光效应:当我们熟悉某事物的时候,我们还会对其越发喜欢,相信自己理解了,<strong>但是熟悉不等同于理解</strong>)。</p><p>卡片笔记法就是针对这种情况而产生的。</p><h3 id="卡片笔记法该怎么做?"><a href="#卡片笔记法该怎么做?" class="headerlink" title="卡片笔记法该怎么做?"></a>卡片笔记法该怎么做?</h3><p>我目前所使用的工作流是这样的:</p><ul><li>阅读材料,写下关键词或者想法和页数。(闪念笔记)</li><li>结束阅读后,通过关键词重构当时的话语,并通过页数返回当时的段落,对照着材料<strong>转写</strong>成自己的话语录入到笔记系统中。(文献笔记)</li><li>当天结束前,浏览自己的所写的文献笔记,思考它能和自己的课题、兴趣、兴趣有何关联。(永久笔记)</li></ul><h4 id="闪念笔记"><a href="#闪念笔记" class="headerlink" title="闪念笔记"></a>闪念笔记</h4><p>闪念笔记可以……在任何地方开记,餐巾纸、手机、记事本等,只是写下几个关键字而已,并标上页数,结束完阅读后,再通过关键词思索当时的想法,之后通过页数方便返回对照材料。</p><p>此举是为了增加想法的<strong>必要难度</strong>,边阅读、边听课、边看视频边记笔记实在太简单,就像在沙地上浅浅地写字一样,太容易模糊了……而通过记下关键词和页数,再回忆起当时所想记的,这样(大概)就提升了想法的<strong>存储强度</strong>。</p><h4 id="文献笔记"><a href="#文献笔记" class="headerlink" title="文献笔记"></a>文献笔记</h4><p>文献笔记最重要的是用<strong>自己的话</strong>简洁得写下阅读材料中的观点。</p><p>之所以强迫用自己的话转写,是因为只有这样做才能更好地理解材料里的观点,一味摘抄是不行的……</p><h4 id="永久笔记"><a href="#永久笔记" class="headerlink" title="永久笔记"></a>永久笔记</h4><p>永久笔记是通过浏览前几步写下的笔记所产生的,卡片笔记盒的思想就是:</p><blockquote><p>一个想法或者笔记只有在它的上下文才有意义,而它的上下文不一定是它在文章中的出处。所以卡片笔记法是要让笔记与不同上下文聚集起来并起到相应的作用。</p></blockquote><p>其中永久笔记应该是<strong>原子化</strong>的,即应该在没有上下文的情况下也能解释的清楚,这样才能更好的和其他相同的笔记组合成「分子」、「复杂化合物」。</p><p>所以为了更好地产生想法,每天划出一部分时间是去回顾是必要的(当然我也老是忘掉)。</p><h3 id="Carry-on"><a href="#Carry-on" class="headerlink" title="Carry on!"></a>Carry on!</h3><blockquote><p>简单,简单,简单啊!我说,最好你的事只两件或三件,不要一百件或一千件;不必计算一百万,半打不是够计算了吗,总之,账目可以记在大拇指甲上就好了。不必一天三餐,如果必要,一顿也够了;不要百道菜,五道够多了; – 《瓦尔登湖》</p></blockquote><p>卡片笔记法并不复杂,实践起来只要选用一个专门对此进行优化过的软件就好了,<code>Notion</code>、<code>obsidian</code>、<code>org-roam</code> 等都可以,我选用的是基于 <code>Emacs</code> 的 <code>org-roam</code> 。</p><p>过于复杂的工作流会马上消磨掉自己的耐心,而做事从来不能凭着虚无缥缈的「专注力」去完成,同时卡片笔记法所产生的笔记也让我觉得能在实实在在的做了某事,这样在对抗「不确定性」这一大怪兽面前也能有底气几分。</p><p>卡片笔记法也不是什么银弹,不能指望换用软件就能产生很好的效果,比如说卡片笔记法里重要的一点既是用自己的话去转写阅读材料的话语,没了解这一点,换软件后还把软件当成原文摘抄、文章剪辑之地,那么无非是又造了个坟墓,只不过是卡片式的。</p><h2 id="任务管理"><a href="#任务管理" class="headerlink" title="任务管理"></a>任务管理</h2><p>任务管理也是我拿 <code>Emacs</code> 所做的事,并且他的表现也比较优秀,稍微设置一些模板就能表现的很好。</p><h3 id="番茄工作法"><a href="#番茄工作法" class="headerlink" title="番茄工作法"></a>番茄工作法</h3><p>番茄工作法,即在做事时划分一段专门用来做<strong>一件事</strong>的时间,期间不允许做其他事,以期达到更好的做事效果。</p><h3 id="蔡格尼克效应"><a href="#蔡格尼克效应" class="headerlink" title="蔡格尼克效应"></a>蔡格尼克效应</h3><p>蔡格尼克走近一家餐馆,发现服务员游刃有余得在多个顾客间间穿梭并记下点单且上菜,吃罢饭后,蔡格尼特发现忘记取大衣并折返,还想顺道称赞一下服务员的能力,但她惊讶的发现服务员竟然表示完全不记得她来过了!服务员表示干这一行的都把注意力集中在点单上面了……</p><p>蔡格尼特对此事做了研究发现:</p><blockquote><p>相较于已经完成的工作,人们比较容易记得未完成的,或是被打断的工作。这就是为什么我们的注意力很容易被未完成任务的想法所干扰,而不管这些想法的重要性如何。得益于蔡格尼克的后续研究,我们还知道,其实我们并不一定要完成任务才能说服我们的大脑停止思考它们,我们所要做的就是把想法写下来,让大脑相信它会在之后被妥善处理。至于任务是真的被完成了,还是通过记下笔记而推迟了,大脑并不会区分。</p></blockquote><h3 id="Just-do-it"><a href="#Just-do-it" class="headerlink" title="Just do it!"></a>Just do it!</h3><p>而具体的工作流,就是我会专门在一天的开始的时候,通常是泡咖啡的时候打开电脑,开始把今天要干的麻烦事写下来(我同时也把 <code>Emacs</code> 设置成开机启动了,打开电脑就是打开 <code>Emacs</code>)。等到有晚上有时间了,我会把想做的事进行分解,以期降低自己的抵抗心理(例如<code>写一篇文章</code>的任务看起来太困难了,但把它分解成<code>收集材料</code>、<code>思考结构</code>、<code>完成初稿</code>等就容易一点了)。</p><h2 id="Emacs"><a href="#Emacs" class="headerlink" title="Emacs"></a>Emacs</h2><p>啊,甜美的 <code>Emacs</code> 。</p><h3 id="org-roam"><a href="#org-roam" class="headerlink" title="org-roam"></a>org-roam</h3><h4 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h4><p>安装很简单,在配置文件中 <code>~/.doom.d/init.el</code> 中的 <code>org</code> 模块里加上 <code>roam2</code> 再 <code>sync</code> 一下就好了。</p><figure class="highlight lisp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">(<span class="name">org</span></span><br><span class="line"> +roam2) <span class="comment">; organize your plain life in plain text</span></span><br></pre></td></tr></table></figure><h4 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h4><figure class="highlight lisp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">;; org-roam</span></span><br><span class="line">(<span class="name">setq</span> org-roam-directory <span class="string">"~/Nextcloud/Note/org-roam"</span>)</span><br><span class="line">(<span class="name">setq</span> org-roam-capture-templates</span><br><span class="line"> '((<span class="string">"m"</span> <span class="string">"main"</span> plain</span><br><span class="line"> <span class="string">"%?"</span></span><br><span class="line"> :if-new (file+head <span class="string">"main/${slug}.org"</span></span><br><span class="line"> <span class="string">"#+title: ${title}\n"</span>)</span><br><span class="line"> :immediate-finish <span class="literal">t</span></span><br><span class="line"> :unnarrowed <span class="literal">t</span>)</span><br><span class="line"> (<span class="string">"r"</span> <span class="string">"reference"</span> plain <span class="string">"%?"</span></span><br><span class="line"> :if-new</span><br><span class="line"> (file+head <span class="string">"reference/${title}.org"</span> <span class="string">"#+title: ${title}\n"</span>)</span><br><span class="line"> :immediate-finish <span class="literal">t</span></span><br><span class="line"> :unnarrowed <span class="literal">t</span>)</span><br><span class="line"> (<span class="string">"a"</span> <span class="string">"article"</span> plain <span class="string">"%?"</span></span><br><span class="line"> :if-new</span><br><span class="line"> (file+head <span class="string">"articles/${title}.org"</span> <span class="string">"#+title: ${title}\n#+filetags: :article:\n"</span>)</span><br><span class="line"> :immediate-finish <span class="literal">t</span></span><br><span class="line"> :unnarrowed <span class="literal">t</span>)))</span><br></pre></td></tr></table></figure><p>其中 <code>org-roam-directory</code> 是放置笔记文件的路径,我把它设置到了 <code>Nextcloud</code> 的同步目录下,这样换台电脑也能快速查看笔记。</p><p>而 <code>org-roam-capture-templates</code> 是配置笔记的模板,<code>main</code> 是对应的是 <code>永久笔记</code>,<code>reference</code> 对应的是 <code>文献笔记</code>,<code>article</code> 可以对应的产出文章,虽然我这篇是直接在博客文件夹下写的(</p><h4 id="具体使用"><a href="#具体使用" class="headerlink" title="具体使用"></a>具体使用</h4><p>经过模板配置后,按下 <code>SPC n r f</code> 输入一个不存在的标题就是新建一个笔记了,再按下提前配置好的键指定是哪类笔记。</p><p>按下 <code>SPC n r i</code> 既是在正文中插入一条笔记链接,<code>SPC n r r</code> 既是打开显示双向链接的菜单,能帮助我更好地查看笔记之间的联系。</p><p>而通过 <code>SPC n r a</code> 即可随机跳转到一条笔记上,方便我回顾笔记(可惜我太菜了不知道怎么设置成过滤成只显示仅某一类笔记orz)。</p><p>同时 <code>org-roam</code> 里还附带了一个日志功能,可以像 <code>Logseq</code> 那样写日志,其前缀是 <code>SPC n r d</code>,但由于太长我一般都是通过 <code>M-x</code> 来进行选择对应功能的,现在我的一些想法和梦记都是录入到其中的。</p><p>而对于文献笔记,因为没琢磨透 <code>Emacs</code> 相关文献管理包怎么用,那我就用自带的大纲模式进行折腾了,具体就是用各个标题层级对应书的不同目录,并在最后加上页码,这样也方便我进行回读。</p><p><img src="https://media.southfox.me/ipfs/bafkreidapw5bcu6ix2nxxi7uhbaiwnc23nukqfyzububigmk4hfcancc3u"></p><h4 id="连接"><a href="#连接" class="headerlink" title="连接"></a>连接</h4><p><code>org-roam</code> 第 2 个大版本将里面的链接机制换成了基于 <code>org-mode</code> 的 <code>link</code>,所以让 <code>org-roam</code> 有了跟其他基于文章的双链笔记不同的,有更加精细的操控能力了。</p><p>在某个标题使用 <code>org-id-get-creat</code> 就可以把这个标题转换为一个新的卡片笔记了,既使它仍在一篇文章中,这样一篇挤满不同卡片的文件我可以叫他为 <code>卡片桌</code>,可以方便的排列展示各个卡片笔记。</p><p>而把 <code>org-link-search-must-match-exact-headline</code> 的值设置成 <code>nil</code>,那么可以编辑链接,设成 <code>[[roam-id:xxx-xxx-xxx-xxx::关键字][描述文本]]</code> 即自动跳转到所选笔记的第一个匹配关键词上,不得不感叹 <code>Emacs</code> 对于文字处理的底蕴之深……</p><h4 id="加密"><a href="#加密" class="headerlink" title="加密"></a>加密</h4><p>选择了同步意味数据会放到他人的服务器上,所以一些东西不加密实在不放心,所幸其自带了一个包 <code>epa</code> 可以完成加密工作,或是在模板中设置成 <code>xxx.org.gpg</code> 格式就会自动进行加密……当然因为加密设定必须要设置一个同步密钥,对于互相连接的卡片笔记非常不方便(一打开菜单输入四五次加密密码谁受得了啊),所幸其 <code>epa</code> 包里有仅加密一片文本区域的命令 <code>epa-encrypt-region</code>,事先选择好一片文本区域执行此命令,再指定密码即可执行加密了。</p><h4 id="MORE"><a href="#MORE" class="headerlink" title="MORE!"></a>MORE!</h4><p>当然还有其他的扩展包可以用,比如 <code>org roam ui</code>,这个包可以分析笔记文件形成一个网页,让 <code>Emacs</code> 用户也能享受到其他双链笔记软件的那个「花里胡哨」的链接分析图。</p><p><img src="https://media.southfox.me/ipfs/bafkreicodyiisf7hstovxpkw5excjlmdltlxgjjqbvsghrhmrfxc5hrytm"></p><h3 id="任务管理-1"><a href="#任务管理-1" class="headerlink" title="任务管理"></a>任务管理</h3><p><code>Emacs</code> 自带了个 <code>org-mode</code>,是做任务管理的一把好手,当然要提前配置好任务模板。</p><h4 id="任务模板"><a href="#任务模板" class="headerlink" title="任务模板"></a>任务模板</h4><figure class="highlight lisp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">;; org-capture</span></span><br><span class="line">(<span class="name">setq</span> org-agenda-files '(<span class="string">"~/Nextcloud/gtd/inbox.org"</span></span><br><span class="line"> <span class="string">"~/Nextcloud/gtd/gtd.org"</span></span><br><span class="line"> <span class="string">"~/Nextcloud/gtd/tickler.org"</span>))</span><br><span class="line"></span><br><span class="line">(<span class="name">after!</span> org</span><br><span class="line"> (<span class="name">setq</span> org-capture-templates '((<span class="string">"t"</span> <span class="string">"Todo [inbox]"</span> entry</span><br><span class="line"> (file+weektree <span class="string">"~/Nextcloud/gtd/inbox.org"</span>)</span><br><span class="line"> <span class="string">"* TODO %i%?"</span>)</span><br><span class="line"> (<span class="string">"T"</span> <span class="string">"Tickler"</span> entry</span><br><span class="line"> (file+headline <span class="string">"~/Nextcloud/gtd/tickler.org"</span> <span class="string">"Tickler"</span>)</span><br><span class="line"> <span class="string">"* %i%? \n %U"</span>))))</span><br></pre></td></tr></table></figure><p>其中 <code>org-agenda-file</code> 是设置将哪些文件拉入到日历视图的计算中,<code>org-agenda</code> 视图可以很方便地查看任务分布情况,当然可设可不设。<br><code>org-capture-templates</code> 是设置任务模板,要用 <code>after!</code> 关键字括起来用延后加载以免被默认配置覆盖掉,其中我将 <code>Todo</code> 的格式设成了 <code>weektree</code> 的格式,这会将任务归类成 <code>年-XX周-星期X</code> 的格式,方便进行定位以及用 <code>org-archive-subtree</code> 的命令将已完成的任务存档。<br>更多关于任务模板的相关介绍可看<a href="https://www.zmonster.me/2018/02/28/org-mode-capture.html">这里</a>。</p><h4 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h4><p>这样配置下来,使用 <code>SPC X</code> 即可打开一个缓冲,按下 <code>t</code> 即可选择预先配置的 <code>Todo</code> 模板,接下来输入任务名称,按下 <code>C-c C-c</code> 即可将缓冲中的内容送入文件,同时关闭缓存。这个过程不需要去打开其他文件,适合在一个工作流中突然想起某事而花最小的打断代价去写下代办事项。</p><h4 id="移动端使用"><a href="#移动端使用" class="headerlink" title="移动端使用"></a>移动端使用</h4><p>目前我在安卓端上使用的是 <code>[Orgzly](https://f-droid.org/packages/com.orgzly/)</code> 搭配 <code>Nextcloud</code> 进行任务同步,利用小组件功能也能方便一览待办(就是小组件的刷新是个问题)。</p><h3 id="番茄钟"><a href="#番茄钟" class="headerlink" title="番茄钟"></a>番茄钟</h3><h4 id="安装-1"><a href="#安装-1" class="headerlink" title="安装"></a>安装</h4><p>在 <code>~/.doom.d/init.el</code> 中加上 <code>pomodoro</code> 即可。</p><figure class="highlight lisp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">(<span class="name">org</span></span><br><span class="line"> +roam2</span><br><span class="line"> +pomodoro) <span class="comment">; organize your plain life in plain text</span></span><br></pre></td></tr></table></figure><h4 id="使用-1"><a href="#使用-1" class="headerlink" title="使用"></a>使用</h4><p>在一个待办标题上使用 <code>SPC t t</code> 即可开启番茄计时,默认二十五分钟倒计时,还附带一个有点浮夸的敲钟音效(</p><p><img src="https://media.southfox.me/ipfs/bafkreieirqmdin4xhx57druv47vt64goyjbohwbumuahq5z5xg3y7bjxke"></p><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ol><li><a href="https://jethrokuan.github.io/org-roam-guide/">How I Take Notes with Org-roam</a></li><li>卡片笔记写作法:如何实现从阅读到写作</li><li><a href="https://mp.weixin.qq.com/s/jM6OoQLxKE4dT_ZWLibowA">用“卡片笔记写作法”读《卡片笔记写作法》 译者现身说法并完整示范 | 学习骇客 </a> </li><li><a href="https://www.zmonster.me/2018/02/28/org-mode-capture.html">强大的 Org mode(4): 使用 capture 功能快速记录</a></li></ol>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> Emacs </tag>
|
||
|
||
<tag> 随记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>Emacs随记(1)</title>
|
||
<link href="/2022/04/Emacs%E9%9A%8F%E8%AE%B0%EF%BC%881%EF%BC%89/"/>
|
||
<url>/2022/04/Emacs%E9%9A%8F%E8%AE%B0%EF%BC%881%EF%BC%89/</url>
|
||
|
||
<content type="html"><![CDATA[<p>小心,传教士来了.jpg</p><span id="more"></span><p><code>Emacs</code>,一款诞生于 <code>1975</code> 年的开源软件,时间并没有葬送这款软件,直至现在也依然也有不少“奇怪”的人在日常使用它。</p><h2 id="Why"><a href="#Why" class="headerlink" title="Why?"></a>Why?</h2><p>讲为什么要使用 <code>Emacs</code> 不如先讲讲为什么不用 <code>Emacs</code>。</p><ul><li>它对 <code>Win</code> 系统支持不是很友好</li><li>全按键操作很劝退从微机课学起电脑的“现代”信息原住民</li><li>如果说 <code>Vim</code> 是小众编辑器,那么 <code>Emacs</code> 更是小众中的小众,导致很多东西都要自己去翻找</li><li>经常出现一些让人恼火的小问题,结合上点更让人吐血</li></ul><p>还不够劝退吗?那为什么我还要用 <code>Emacs</code> 呢?</p><ul><li>它的内存占用,4G 的电脑也带的动,我是受够了套壳框架带来的吃内存大户了……浏览器 + <code>VS Code</code> 已经挤得我电脑动弹不得了。</li><li>它的哲学,如果说 <code>Linux</code> 的哲学是一切皆文件,那么 <code>Emacs</code> 的哲学就是对于文本的操控了,将电子邮件导入到待办事项,把即时通讯里的通天记录裁剪到收藏里,就连近些火热的双链也有人去实现……因为这些都是“文本”,所以他们就可以被 <code>Emacs</code> 各个包处理。这些功能要让其他软件去实现,非得用上不同软件拼凑不可,同时他们之间的联系也很脆弱,全看软件开发者是否开放……</li><li>它的智慧,虽然我现在也是摸索着用了一段时间,到现在也才是打开次数跟 <code>VS Code</code> 持平的状态,不过我也足以感受到其中的“智慧”了,它确实很适合培养所谓的“计算机素养”,哪怕用它的人中很多并不是程序员。</li></ul><h2 id="Why-Doom-Emacs?"><a href="#Why-Doom-Emacs?" class="headerlink" title="Why Doom Emacs?"></a>Why Doom Emacs?</h2><p>现在我在用的是 <a href="https://github.com/hlissner/doom-emacs">Doom Emacs</a> ,他们之间的关系有点像是 <code>Minecraft</code> 和 <code>整合包</code> 之间的关系,原版生存固然足够好玩且富有深度了,但还是太朴素了,想弄点更大的乐子那自然是往里灌上一众 <code>MOD</code> 了。而配好一整套相关 <code>MOD</code> 的即是整合包了,<code>Doom Emacs</code> 在各种配置整合包里算得上是高效和……轻量?(毕竟我也没用过其他的配置)</p><p>同时其中还附带了 <code>evil</code> 这个包,可以让 <code>Emacs</code> 用上 <code>Vim</code> 的操作,想想这确实挺“邪恶”,<code>Emacs</code> 和 <code>Vim</code> 之间的“圣战”一直打得昏天暗地,谁知其中竟然分裂出一个教派结合了两方?也确实不愧于 <code>Doom</code> 之名啊……</p><p>能蹭上 <code>Vim</code> 的操作也是好事,因为 <code>Vim</code> 的相关资料比 <code>Emacs</code> 多上许多,比较好找到相关资料,也避免了 <a href="https://zh.wikipedia.org/zh-hans/Emacs#Emacs%E5%B0%8F%E6%8B%87%E6%8C%87">Emacs 小拇指</a>症状。</p><h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><p><code>Emacs</code> 在各种 <code>Linux</code> 发行版自带的包管理应该能轻松找到(<code>Mac OS</code> 应该也能简单安装到),安装后运行一次就会生成 <code>~/.emacs.d</code> 路径下的文件夹。</p><p>确认文件夹存在后运行:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">git clone --depth 1 https://github.com/hlissner/doom-emacs ~/.emacs.d</span><br><span class="line"></span><br><span class="line">~/.emacs.d/bin/doom install</span><br></pre></td></tr></table></figure><p>其中安装会到 <code>GitHub</code> 下载一两百个包,所以提前配置好一个科学网络环境是必须的……</p><p>安装结束后,运行后并且……!</p><h3 id="存活下来"><a href="#存活下来" class="headerlink" title="存活下来"></a>存活下来</h3><h4 id="按键缩写"><a href="#按键缩写" class="headerlink" title="按键缩写"></a>按键缩写</h4><p>大部分资料都遵循以下缩写——</p><table><thead><tr><th>Emacs 功能键</th><th>缩写</th><th>对应键盘按键(PC/Mac)</th></tr></thead><tbody><tr><td>Space</td><td>Spc</td><td>Space(空格)</td></tr><tr><td>Control</td><td>C</td><td>Ctrl / Control</td></tr><tr><td>Meta</td><td>M</td><td>Alt / Option</td></tr><tr><td>Shift</td><td>S</td><td>Shift / Shift</td></tr></tbody></table><p>例如:</p><p> <code>Spc .</code> 是先按下 <code>空格</code> 键<strong>再</strong>按下 <code>.</code> 键。</p><p><code>M-x</code> 是按下 <code>Alt</code> 键<strong>同时</strong>按下 <code>x</code> 键。</p><h4 id="实际操作"><a href="#实际操作" class="headerlink" title="实际操作"></a>实际操作</h4><p>对于入门而言,使用 <code>S .</code> 即可打开文件管理,之后就可以选择一个文件进行打开了。</p><p><code>Vim</code> 编辑模式可能对于入门来说也是有点痛苦,不过初始时掌握 <code>i</code> 和 <code>:w</code> 也够用了。</p><p>不用特地去记快捷键,使用 <code>M-x</code> 搜索相应的命令大部分足够了,当知道自己在高频使用某个命令,那么这时候才稍微用一下快捷键并记忆就足够了。</p><p>找到自己想要的功能用兴趣做导向是最优的,<code>org-mode</code> 就是个不错的选择。</p><h4 id="参考教程"><a href="#参考教程" class="headerlink" title="参考教程"></a>参考教程</h4><p><a href="https://github.com/overmind1980/oeasyvim">Vim 教程 - Oeasy</a></p><p><a href="https://www.youtube.com/playlist?list=PLhXZp00uXBk4np17N39WvB80zgxlZfVwj">Doom Emacs 视频教程 - Zaiste Programming</a> <a href="https://space.bilibili.com/432142040/channel/seriesdetail?sid=432482">B 站搬运</a></p><p><a href="https://github.com/redguardtoo/mastering-emacs-in-one-year-guide/blob/master/guide-zh.org">一年成为Emacs高手 (像神一样使用编辑器)</a></p><p><a href="https://manateelazycat.github.io/emacs/2018/12/11/study-emacs.html">怎么学习 Emacs ? 达到真正融汇贯通的境界? </a></p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>先写成这样吧,下篇大概会写点 <code>org-roam</code> 和 <code>org-mode</code> 相关配置……不过也得等我自己先折腾了,有东西能写了才能写……</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> Emacs </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>搭建Matrix即时通信服务</title>
|
||
<link href="/2022/04/%E6%90%AD%E5%BB%BAMatrix%E5%8D%B3%E6%97%B6%E9%80%9A%E4%BF%A1%E6%9C%8D%E5%8A%A1/"/>
|
||
<url>/2022/04/%E6%90%AD%E5%BB%BAMatrix%E5%8D%B3%E6%97%B6%E9%80%9A%E4%BF%A1%E6%9C%8D%E5%8A%A1/</url>
|
||
|
||
<content type="html"><![CDATA[<p>总之稍微记录一下。</p><span id="more"></span><ul><li><p>事先约定 <code>matrix.org</code> 是前端地址 <code>synapse.matrix.org</code> 是后端地址,实际请改成自己的……具体为啥这么做可以看<a href="https://matrix-org.github.io/synapse/latest/delegate.html">官方文档</a>,如果嫌麻烦也可以不启用这功能……</p></li><li><p>新建文件夹,在里面新建一个 <code>docker-compose.yml</code> 文件,往里写入</p></li></ul><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#也感谢糖喵提供的配置文件~</span></span><br><span class="line"><span class="attr">version:</span> <span class="string">"3.4"</span></span><br><span class="line"></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line"> <span class="attr">synapse:</span></span><br><span class="line"> <span class="attr">hostname:</span> <span class="string">matrix</span></span><br><span class="line"> <span class="attr">image:</span> <span class="string">matrixdotorg/synapse:latest</span></span><br><span class="line"> <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line"> <span class="attr">container_name:</span> <span class="string">matrix_server</span> </span><br><span class="line"> <span class="attr">depends_on:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">db</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">redis</span></span><br><span class="line"> <span class="attr">ports:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">"127.0.0.1:8001:8008"</span></span><br><span class="line"> <span class="attr">volumes:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">./synapse/data:/data</span></span><br><span class="line"> <span class="attr">networks:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">synapse_network</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">external_network</span></span><br><span class="line"> <span class="attr">healthcheck:</span></span><br><span class="line"> <span class="attr">test:</span> [<span class="string">"CMD-SHELL"</span>, <span class="string">"curl -s localhost:8008/health || exit 1"</span>]</span><br><span class="line"></span><br><span class="line"> <span class="attr">db:</span></span><br><span class="line"> <span class="attr">image:</span> <span class="string">postgres</span></span><br><span class="line"> <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line"> <span class="attr">container_name:</span> <span class="string">matrix_db</span></span><br><span class="line"> <span class="attr">volumes:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">./synapse/db:/var/lib/postgresql/data</span></span><br><span class="line"> <span class="attr">environment:</span></span><br><span class="line"> <span class="attr">POSTGRES_USER:</span> <span class="string">synapse</span></span><br><span class="line"> <span class="attr">POSTGRES_PASSWORD:</span> <span class="string">随便什么密码</span></span><br><span class="line"> <span class="attr">POSTGRES_DB:</span> <span class="string">synapse</span></span><br><span class="line"> <span class="attr">POSTGRES_INITDB_ARGS:</span> <span class="string">"--encoding='UTF8' --lc-collate='C' --lc-ctype='C'"</span></span><br><span class="line"> <span class="attr">networks:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">synapse_network</span></span><br><span class="line"> <span class="attr">healthcheck:</span></span><br><span class="line"> <span class="attr">test:</span> [<span class="string">"CMD"</span>, <span class="string">"pg_isready"</span>, <span class="string">"-U"</span>, <span class="string">"synapse"</span>]</span><br><span class="line"></span><br><span class="line"> <span class="attr">redis:</span></span><br><span class="line"> <span class="attr">image:</span> <span class="string">redis:6.0-alpine</span></span><br><span class="line"> <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line"> <span class="attr">container_name:</span> <span class="string">matrix_redis</span> </span><br><span class="line"> <span class="attr">volumes:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">./synapse/redis:/data</span></span><br><span class="line"> <span class="attr">networks:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">synapse_network</span></span><br><span class="line"> <span class="attr">healthcheck:</span></span><br><span class="line"> <span class="attr">test:</span> [<span class="string">"CMD"</span>, <span class="string">"redis-cli"</span>, <span class="string">"ping"</span>]</span><br><span class="line"></span><br><span class="line"><span class="attr">networks:</span></span><br><span class="line"> <span class="attr">synapse_network:</span></span><br><span class="line"> <span class="attr">internal:</span> <span class="literal">true</span></span><br><span class="line"> <span class="attr">external_network:</span></span><br></pre></td></tr></table></figure><ul><li>之后运行 <code>docker-compose run --rm -e SYNAPSE_SERVER_NAME=前端地址 synapse generate</code> 命令生成配置文件,之后检查在 <code>./synapse/data</code> 路径下是否有叫 <code>homeserver.yaml</code> 的配置文件,编辑配置文件 <code>nano ./synapse/data/homeserver.yaml</code></li></ul><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 重点改以下配置</span></span><br><span class="line"><span class="attr">server_name:</span> <span class="string">"matrix.org"</span></span><br><span class="line"></span><br><span class="line"><span class="attr">public_baseurl:</span> <span class="string">https://synapse.matrix.org/</span></span><br><span class="line"></span><br><span class="line"><span class="attr">serve_server_wellknown:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="attr">database:</span></span><br><span class="line"> <span class="attr">name:</span> <span class="string">psycopg2</span></span><br><span class="line"> <span class="attr">txn_limit:</span> <span class="number">10000</span></span><br><span class="line"> <span class="attr">args:</span></span><br><span class="line"> <span class="attr">user:</span> <span class="string">synapse</span></span><br><span class="line"> <span class="attr">password:</span> <span class="string">docker</span> <span class="string">配置写的随便什么密码</span></span><br><span class="line"> <span class="attr">database:</span> <span class="string">synapse</span></span><br><span class="line"> <span class="attr">host:</span> <span class="string">db</span></span><br><span class="line"> <span class="attr">port:</span> <span class="number">5432</span></span><br><span class="line"> <span class="attr">cp_min:</span> <span class="number">5</span></span><br><span class="line"> <span class="attr">cp_max:</span> <span class="number">10</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#database:</span></span><br><span class="line"><span class="comment"># name: sqlite3</span></span><br><span class="line"><span class="comment"># args:</span></span><br><span class="line"><span class="comment"># database: /data/homeserver.db</span></span><br><span class="line"><span class="comment">#↑注释掉使用 sqlite3 的配置</span></span><br><span class="line"></span><br><span class="line"><span class="attr">redis:</span></span><br><span class="line"> <span class="comment"># Uncomment the below to enable Redis support.</span></span><br><span class="line"> <span class="comment">#</span></span><br><span class="line"> <span class="attr">enabled:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Optional host and port to use to connect to redis. Defaults to</span></span><br><span class="line"> <span class="comment"># localhost and 6379</span></span><br><span class="line"> <span class="comment">#</span></span><br><span class="line"> <span class="attr">host:</span> <span class="string">redis</span></span><br><span class="line"> <span class="attr">port:</span> <span class="number">6379</span></span><br></pre></td></tr></table></figure><ul><li>之后再启动服务,<code>docker-compose start</code></li><li>编辑 <code>matrix.org</code> 的 <code>nginx</code> 配置文件加入以下配置</li></ul><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"> <span class="section">location</span> /.well-known/matrix/client {</span><br><span class="line"> <span class="attribute">return</span> <span class="number">200</span> <span class="string">'{"m.homeserver": {"base_url": "synapse.matrix.org"}}'</span>;</span><br><span class="line"> <span class="attribute">default_type</span> application/json;</span><br><span class="line"> <span class="attribute">add_header</span> Access-Control-Allow-Origin *;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="section">location</span> /.well-known/matrix/server {</span><br><span class="line"> <span class="attribute">return</span> <span class="number">200</span> <span class="string">'{"m.server": "synapse.matrix.org:443"}'</span>;</span><br><span class="line"> <span class="attribute">default_type</span> application/json;</span><br><span class="line"> <span class="attribute">add_header</span> Access-Control-Allow-Origin *;</span><br><span class="line"> }</span><br><span class="line"><span class="comment">#注意替换自己的前端后端地址</span></span><br></pre></td></tr></table></figure><ul><li>新建 <code>synapse.matrix.org</code> 的 <code>dns</code> ,指向服务器地址,再 <code>certbot certonly --nginx -d synapse.matrix.org</code> 申请证书</li><li>新建一个 <code>synapse.matrix.org</code> 的配置文件</li></ul><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">server</span> {</span><br><span class="line"> <span class="attribute">listen</span> <span class="number">443</span> ssl http2;</span><br><span class="line"> <span class="attribute">listen</span> [::]:<span class="number">443</span> ssl http2;</span><br><span class="line"></span><br><span class="line"> <span class="attribute">server_name</span> synapse.matrix.org;</span><br><span class="line"></span><br><span class="line"> <span class="attribute">ssl_certificate</span> /etc/letsencrypt/live/synapse.matrix.org/fullchain.pem;</span><br><span class="line"> <span class="attribute">ssl_certificate_key</span> /etc/letsencrypt/live/synapse.matrix.org/privkey.pem;</span><br><span class="line"></span><br><span class="line"> <span class="comment"># Various TLS hardening settings</span></span><br><span class="line"> <span class="comment"># https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html</span></span><br><span class="line"> <span class="attribute">ssl_protocols</span> TLSv1.<span class="number">2</span> TLSv1.<span class="number">3</span>;</span><br><span class="line"> <span class="attribute">ssl_prefer_server_ciphers</span> <span class="literal">on</span>;</span><br><span class="line"> <span class="attribute">ssl_ciphers</span> ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;</span><br><span class="line"> <span class="attribute">ssl_session_timeout</span> <span class="number">10m</span>;</span><br><span class="line"> <span class="attribute">ssl_session_cache</span> shared:SSL:<span class="number">10m</span>;</span><br><span class="line"> <span class="attribute">ssl_session_tickets</span> <span class="literal">on</span>;</span><br><span class="line"> <span class="attribute">ssl_stapling</span> <span class="literal">on</span>;</span><br><span class="line"> <span class="attribute">ssl_stapling_verify</span> <span class="literal">on</span>;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="section">location</span> <span class="regexp">~ ^(/_matrix|/_synapse/client)</span> {</span><br><span class="line"> <span class="comment"># note: do not add a path (even a single /) after the port in `proxy_pass`,</span></span><br><span class="line"> <span class="comment"># otherwise nginx will canonicalise the URI and cause signature verification</span></span><br><span class="line"> <span class="comment"># errors.</span></span><br><span class="line"> <span class="attribute">proxy_pass</span> http://127.0.0.1:8001;</span><br><span class="line"> <span class="attribute">proxy_set_header</span> X-Forwarded-For <span class="variable">$remote_addr</span>;</span><br><span class="line"> <span class="attribute">proxy_set_header</span> X-Forwarded-Proto <span class="variable">$scheme</span>;</span><br><span class="line"> <span class="attribute">proxy_set_header</span> Host <span class="variable">$host</span>;</span><br><span class="line"></span><br><span class="line"> <span class="comment"># Nginx by default only allows file uploads up to 1M in size</span></span><br><span class="line"> <span class="comment"># Increase client_max_body_size to match max_upload_size defined in homeserver.yaml</span></span><br><span class="line"> <span class="attribute">client_max_body_size</span> <span class="number">500M</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">}</span><br></pre></td></tr></table></figure><ul><li>重载 <code>nginx</code> 配置文件,<code>nginx -s reload</code></li><li>之后去<a href="https://federationtester.matrix.org/">检查服务</a>(需科学)输入自己的前端地址 <code>matrix.org</code> 检查是否正常</li><li>用 <code>docker-compose exec synapse /bin/bash</code> 进入 <code>synapse</code> 容器</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">cd data</span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash">注册新用户</span></span><br><span class="line">register_new_matrix_user -c homeserver.yaml http://localhost:8008 </span><br><span class="line"><span class="meta prompt_">#</span><span class="language-bash">注册完后用 <span class="built_in">exit</span> 退出容器</span></span><br><span class="line">exit</span><br></pre></td></tr></table></figure><ul><li>完成后用任意一个客户端登陆即可使用,注意登陆用的地址是后端地址 <code>synapse.matrix.org</code></li></ul>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>EFK:日志 All in one……?</title>
|
||
<link href="/2022/04/EFK-%E6%97%A5%E5%BF%97-All-in-one/"/>
|
||
<url>/2022/04/EFK-%E6%97%A5%E5%BF%97-All-in-one/</url>
|
||
|
||
<content type="html"><![CDATA[<p>突然发现自己搭的应用似乎上了两位数了。</p><span id="more"></span><p>其中也不乏一些日志大户,每次排错时都要自己进去用日志命令脑死 <code>PgUp, PgDn</code> 一页一页翻找吗?</p><p>刚好最近看的书里提出了一种日志管理实现:<code>ELK</code>,即 <code>Elasticsearch, Logstash, Kibana</code> 三种开源应用的简称,其中:</p><p><code>Elasticsearch</code>:负责给日志数据产生索引,方便检索。</p><p><code>Logstash</code>:接收并处理日志,方便其他应用使用。</p><p><code>Kibana</code>:一个展示前端,有酷炫的一众图表模板用来可视化数据。</p><p>似乎名头一直都在很多年了,使用起来似乎比较重量级,不知道有没有其他更轻量的实现……不过我也找不到其他实现就先这么用吧……</p><h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><p>因为搭建的应用以 <code>Docker</code> 居多,其中默认支持的日志方式有 <code>Fluentd</code>,所以就用这个代替 <code>Logstash</code> 了,所以是 <code>EFK</code> 方案。</p><p><code>Fluentd</code> 采用包安装的方式安装,毕竟要用它处理宿主机上的一些日志,就不考虑塞到 <code>Docker</code> 里折腾自己了。</p><h3 id="前期准备"><a href="#前期准备" class="headerlink" title="前期准备"></a>前期准备</h3><p>参见<a href="https://docs.fluentd.org/installation/before-install">官网文档</a>:</p><h4 id="安装-chrony"><a href="#安装-chrony" class="headerlink" title="安装 chrony"></a>安装 chrony</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt-get install chrony</span><br></pre></td></tr></table></figure><p>此步骤是为了日志消息能有更准确的时间戳的样子?</p><h4 id="调高文件描述符"><a href="#调高文件描述符" class="headerlink" title="调高文件描述符"></a>调高文件描述符</h4><p>执行</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ulimit -n</span><br></pre></td></tr></table></figure><p>命令,要是显示 <code>1024</code> 的话,那么就得调高一点,防止文件描述符用完报错,</p><p>编辑 <code>/etc/security/limits.conf</code> 文件,在最后面加上:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">root soft nofile 65536</span><br><span class="line">root hard nofile 65536</span><br><span class="line">* soft nofile 65536</span><br><span class="line">* hard nofile 65536</span><br></pre></td></tr></table></figure><p>之后重启,再次执行</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ulimit -n</span><br></pre></td></tr></table></figure><p>命令,显示 <code>65536</code> 即可成功。</p><h4 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h4><p>其他的网络调优懒得搞了……问就是摸了!</p><h3 id="安装-Fluentd"><a href="#安装-Fluentd" class="headerlink" title="安装 Fluentd"></a>安装 Fluentd</h3><p>用的是 <code>Ububtu 20.04</code> ,参照<a href="https://docs.fluentd.org/installation/install-by-deb">官方文档</a>,执行</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -fsSL https://toolbelt.treasuredata.com/sh/install-ubuntu-focal-td-agent4.sh | sh</span><br></pre></td></tr></table></figure><p>而且里面的版本描述是用大版本号的英文描述的,还得我翻<a href="https://zh.wikipedia.org/zh/Ubuntu">维基</a>查,好好用阿拉伯数字不好嘛……</p><h3 id="安装-EK"><a href="#安装-EK" class="headerlink" title="安装 EK"></a>安装 EK</h3><p>这里就用 <code>Docker</code> 省点力了……</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">'3'</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line"> <span class="attr">elasticsearch:</span></span><br><span class="line"> <span class="attr">image:</span> <span class="string">elasticsearch:tag</span></span><br><span class="line"> <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line"> <span class="attr">ports:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">"127.0.0.1:9200:9200"</span></span><br><span class="line"> <span class="attr">environment:</span></span><br><span class="line"> <span class="attr">ES_JAVA_OPTS:</span> <span class="string">"-Xmx256m -Xms256m"</span></span><br><span class="line"> <span class="attr">ELASTIC_PASSWORD:</span> <span class="string">"you_password"</span></span><br><span class="line"> <span class="attr">http.cors.enabled:</span> <span class="string">"true"</span></span><br><span class="line"> <span class="attr">http.cors.allow-origin:</span> <span class="string">"*"</span></span><br><span class="line"> <span class="attr">xpack.security.enabled:</span> <span class="string">"true"</span></span><br><span class="line"> <span class="attr">discovery.type:</span> <span class="string">"single-node"</span></span><br><span class="line"> <span class="attr">xpack.security.authc.api_key.enabled:</span> <span class="string">"true"</span></span><br><span class="line"></span><br><span class="line"> <span class="attr">kibana:</span></span><br><span class="line"> <span class="attr">image:</span> <span class="string">kibana:tag</span></span><br><span class="line"> <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line"> <span class="attr">links:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">"elasticsearch"</span></span><br><span class="line"> <span class="attr">ports:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">"127.0.0.1:5601:5601"</span></span><br><span class="line"> <span class="attr">environment:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">ELASTICSEARCH_USERNAME=elastic</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">ELASTICSEARCH_PASSWORD="you_password"</span></span><br></pre></td></tr></table></figure><p> 其中 <code>tag</code> 应该去 <a href="https://hub.docker.com/_/elasticsearch"><code>Docker Hub</code> 页面</a>寻找,因为没有默认标签的样子只能手动指定版本了……而且注意要选择修了高危漏洞的版本。</p><p>之后 <code>up</code> 起来待用。</p><p>(<strong>注意</strong>这里没做数据持久化处理,有兴趣的可以自行找找要挂载哪些路径……)</p><h2 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h2><h3 id="Fluentd"><a href="#Fluentd" class="headerlink" title="Fluentd"></a>Fluentd</h3><p>配置文件路径是 <code>/etc/td-agent/td-agent.conf</code> ,</p><p>其中分为 <code>Input</code> 端,用 <code><sourec></code> 表示,<code>Output</code> 端,用 <code><match></code> 处理。</p><p>首先增加以下:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><source></span><br><span class="line"> @type forward</span><br><span class="line"> port 24224</span><br><span class="line"> bind 127.0.0.1</span><br><span class="line"></source></span><br><span class="line"></span><br><span class="line"><match *.**></span><br><span class="line"> @type copy</span><br><span class="line"></span><br><span class="line"> <store></span><br><span class="line"> @type elasticsearch</span><br><span class="line"> host 127.0.0.1</span><br><span class="line"> port 9200</span><br><span class="line"> user elastic</span><br><span class="line"> password you_password</span><br><span class="line"> logstash_format true</span><br><span class="line"> logstash_prefix fluentd</span><br><span class="line"> logstash_dateformat %Y%m%d</span><br><span class="line"> include_tag_key true</span><br><span class="line"> type_name access_log</span><br><span class="line"> tag_key @log_name</span><br><span class="line"> flush_interval 1s</span><br><span class="line"> </store></span><br><span class="line"></span><br><span class="line"> <store></span><br><span class="line"> @type stdout</span><br><span class="line"> </store></span><br><span class="line"></match></span><br></pre></td></tr></table></figure><p>并且 <code>systemctl restart td-agent</code> 重启应用,开放<code>24224</code> 端口让 <code>Docker</code> 能够进行联协,并将相应数据通过 <code>9200</code> 端口汇入到 <code>Elasticsearch</code> 进行处理。</p><h3 id="Docker"><a href="#Docker" class="headerlink" title="Docker"></a>Docker</h3><p>管理每个 <code>docker-compose.yml</code> 文件,在每个服务后面加上相应的 <code>logging</code> 块:</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">services:</span></span><br><span class="line"> <span class="attr">xxx:</span></span><br><span class="line"> <span class="string">......</span></span><br><span class="line"> <span class="string">......</span></span><br><span class="line"> <span class="attr">logging:</span></span><br><span class="line"> <span class="attr">driver:</span> <span class="string">fluentd</span></span><br><span class="line"> </span><br><span class="line"> <span class="attr">yyy:</span></span><br><span class="line"> <span class="string">......</span></span><br><span class="line"> <span class="string">......</span></span><br><span class="line"> <span class="attr">logging:</span></span><br><span class="line"> <span class="attr">driver:</span> <span class="string">fluentd</span></span><br></pre></td></tr></table></figure><p>(是的,感觉这样确实有点蠢,不过没找到其他更好实现而且只要做一次就先忍了……)</p><p>之后 <code>down</code> 再 <code>up</code> 重建容器即可。</p><h3 id="Kibana"><a href="#Kibana" class="headerlink" title="Kibana"></a>Kibana</h3><p>没出错的话现在日志应该源源不断汇入到 <code>Elasticsearch</code> 并在处理了,现在该浏览成果了。</p><p>老调重弹之申请域名、指向域名、申请证书、反代 <code>5601</code> 端口,完成后访问对应域名应该就能进到管理面板了。</p><p>展开左边的菜单栏 <code>Management~Stack Management -> Kibana~Index patterns -> Create index patterns </code> 应该能看到有类似 <code>fluentd-YYMMDD</code> 形式的数据了,新建一个名叫 <code>fluentd-*</code> 的索引将数据囊括进来,就搞定了,之后可以去 <code>Analytics~Discover</code> 查看数据了……</p><p>到此,管理 <code>Docker</code> 产生的日志就这样搞定了……</p><h2 id="额外"><a href="#额外" class="headerlink" title="额外"></a>额外</h2><p>当然还没结束,毕竟还要更多!</p><h3 id="Nginx"><a href="#Nginx" class="headerlink" title="Nginx"></a>Nginx</h3><p><code>Fluentd</code> 直接安装就是为了更方便处理相应日志的,但是针对 <code>nginx</code> 来说,因为 <code>Fluentd</code> 使用的用户 <code>td-agent</code> 没有相应访问 <code>nginx</code> 日志的权限,那么首先要用</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">usermod -aG adm td-agent</span><br></pre></td></tr></table></figure><p>命令放行对应目录,<a href="https://docs.fluentd.org/parser#how-to-use">参见</a>。</p><p>之后在 <code>/etc/td-agent/td-agent.conf</code> 配置文件中新增以下配置:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><source></span><br><span class="line"> @type tail</span><br><span class="line"> path /var/log/nginx/*access.log,/var/log/nginx/*access.log.1</span><br><span class="line"> pos_file /var/log/td-agent/httpd-access.log.pos</span><br><span class="line"> tag nginx.access</span><br><span class="line"> <parse></span><br><span class="line"> @type nginx</span><br><span class="line"> </parse></span><br><span class="line"></source></span><br><span class="line"></span><br><span class="line"><source></span><br><span class="line"> @type tail</span><br><span class="line"> path /var/log/nginx/*error.log,/var/log/nginx/*erroe.log.1</span><br><span class="line"> pos_file /var/log/td-agent/httpd-error.log.pos</span><br><span class="line"> tag nginx.error</span><br><span class="line"> <parse></span><br><span class="line"> @type nginx</span><br><span class="line"> </parse></span><br><span class="line"></source></span><br></pre></td></tr></table></figure><p>然后 <code>systemctl restart td-agent</code> 重启应用。</p><p>其中一个小问题就是 <code>error</code> 日志会因为不能格式化而导致不能正确处理,当然只限 <code>error</code> 日志,所以就……眼不见为净了……反正这也算单独一个分类了……吧。</p><h3 id="网络传输"><a href="#网络传输" class="headerlink" title="网络传输"></a>网络传输</h3><p>既然 <code>All in one</code>,自然要处理好其他主机的服务了, <code>Fluentd</code> 也自带一个 <code>http</code> 方式进行传输。</p><h4 id="主机"><a href="#主机" class="headerlink" title="主机"></a>主机</h4><p>在 <code>/etc/td-agent/td-agent.conf</code> 配置文件中新增以下配置:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><source></span><br><span class="line"> @type http</span><br><span class="line"> port 9880</span><br><span class="line"> bind 127.0.0.1</span><br><span class="line"> body_size_limit 32m</span><br><span class="line"> keepalive_timeout 10s</span><br><span class="line"></source></span><br></pre></td></tr></table></figure><p>然后 <code>systemctl restart td-agent</code> 重启应用,再老调重弹之申请域名、指向域名、申请证书、反代 <code>9800</code> 端口。</p><h4 id="客机"><a href="#客机" class="headerlink" title="客机"></a>客机</h4><p>在 <code>/etc/td-agent/td-agent.conf</code> 配置文件中新增以下配置:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><match **></span><br><span class="line"> @type http</span><br><span class="line"></span><br><span class="line"> endpoint https://申请的域名:443/api</span><br><span class="line"> open_timeout 3</span><br><span class="line"></span><br><span class="line"> <format></span><br><span class="line"> @type json</span><br><span class="line"> </format></span><br><span class="line"> json_array true</span><br><span class="line"> <buffer></span><br><span class="line"> flush_interval 10s</span><br><span class="line"> </buffer></span><br><span class="line"></match></span><br></pre></td></tr></table></figure><p>然后 <code>systemctl restart td-agent</code> 重启应用,</p><p>之后观察 <code>Kibana</code> 面板,发现有 <code>@logname</code> 为 <code>api</code> 的数据就算成功……这个 <code>logname</code> 发现不知道怎么改……算了,就当作区分不同机子了吧……</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>这么处理下来,就应该能愉快的探索自己产生的日志了,能够直接指定时间段和按属性过滤条目已经暴杀直接翻找日志文件的方式了……</p><p>感觉能摸索的地方还有挺多的呢,不用各种追踪脚本仅凭日志文件也能发现很多东西呢……</p><p>不过难受的点就是,<code>EFK</code> 名头那么大,但是相关文档真的很少(就算用英文搜索)……感觉自己在用一个过气项目的样子,不知道是不是我不得要领……</p><p>最后附张图,用面板五分钟就搭出来的看板,感觉还能再挖掘点东西呢。</p><p><img src="https://media.southfox.me/ipfs/bafkreicf4fknbhjyqw5dgh5vgg5pfl6fx2bwiiw745pun7ap7zf3tzdqdy" alt="看板"></p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>二二年三月梦记</title>
|
||
<link href="/2022/03/%E4%BA%8C%E4%BA%8C%E5%B9%B4%E4%B8%89%E6%9C%88%E6%A2%A6%E8%AE%B0/"/>
|
||
<url>/2022/03/%E4%BA%8C%E4%BA%8C%E5%B9%B4%E4%B8%89%E6%9C%88%E6%A2%A6%E8%AE%B0/</url>
|
||
|
||
<content type="html"><![CDATA[<p>一声叹息。</p><span id="more"></span><h2 id="3-8"><a href="#3-8" class="headerlink" title="3.8"></a>3.8</h2><p>中 普</p><h3 id="起"><a href="#起" class="headerlink" title="起"></a>起</h3><p>又是常见的校园怪谈啦,一些学生会莫名其妙消失不见啦。</p><p>我就是在这种情况下打算返校的。</p><h3 id="公园"><a href="#公园" class="headerlink" title="公园"></a>公园</h3><p>逛公园,似乎这只是一个稀松平常的景点。我路过一个冰淇淋摊贩,他问我你要不要来点?我接过,然后就看着冰淇淋……仍由它融化。**</p><h3 id="返校"><a href="#返校" class="headerlink" title="返校"></a>返校</h3><p>雨,好大的雨!</p><p>我顶着雨伞也难免被吹得几乎飞起来!艰难的到了教学楼下,一层……二层……三层……楼梯是外露的,所以不免也要承受风雨,四层以上的楼梯甚至还没有护栏!我已经被吹得摇摇晃晃的了,想着之前也有些喜欢玩闹的学生坠楼的传言,我抛弃雨伞,直接抱紧扶手,像毛毛虫一样爬了上去……</p><h4 id="校园间"><a href="#校园间" class="headerlink" title="校园间"></a>校园间</h4><p><strong>「记忆混乱——」</strong></p><p>一些大学老师和高中混在了一起,以及一些稀奇古怪的上课内容……哪怕才过去二十分钟,就已经模糊不堪……似乎潜意识是真不想我回忆这块内容吧……</p><h4 id="但有一幕"><a href="#但有一幕" class="headerlink" title="但有一幕"></a>但有一幕</h4><p>我在楼道直接跑动,为了追逐一个朋友,我追到电梯房,他已经抢先一步上去了……</p><blockquote><p>这里的感觉不是他躲着不想见我,而是更像损友之间的小玩笑,但他现实中不是这样的人……我是把他跟谁整合到一起了?</p></blockquote><h3 id="漫漫回家路"><a href="#漫漫回家路" class="headerlink" title="漫漫回家路"></a>漫漫回家路</h3><p>校园状况越发差劲……学校决定让我们回去。</p><p>我站到回家路上的一条街道……已经眼前发黑,腿脚难行……</p><p>压抑……</p><p><strong>「记忆丢失」</strong></p><h3 id="到家"><a href="#到家" class="headerlink" title="到家"></a>到家</h3><p>我从后门回家,发现我爸又在搞装修,把门换了新的。我的房间门下方换成玻璃制的了,能够一眼看到我的床……</p><blockquote><p>父母的控制欲?但是梦里的我并没有太过惊讶,所以这层含义算是最浅显也最不主要的部分了。</p></blockquote><p>我前往阳台,发现也堆着很多门……</p><blockquote><p>下方没玻璃。</p></blockquote><p>我通过窗户望向我哥的房间,发现我爸正睡在那里。</p><blockquote><p>我竟然没感到奇怪。</p></blockquote><p><strong>「记忆丢失」</strong></p><p>我似乎立于天空中,中间写着几行字。</p><p>橙色</p><p>蓝色</p><p>绿色</p><p>似乎都是些颜色名字,都是些什么?</p><p>……</p><p>我打算进我爸房间了,告诉他我回来了。</p><p>推开门,我就发现不对了!那个怪谈,那个让人消失的怪谈!它就在房间里!</p><p>它在四面八方涌上来!</p><p><strong>“够了!”</strong></p><p>“我已经不想待在这压抑的梦了!”,我说道。</p><p>“你究竟是什么东西!”,我将这股情绪狂潮指向房间中不可见的存在,势要揪出来它的原型。</p><p>…………</p><p>深海……鲜艳的热带鱼群……</p><p>……奇怪的绿色类鱼生物……带有双肢的……冲向海面……</p><p>…………</p><p>所以,橙色是,自负的意思?</p><p>我喃喃自语……</p><blockquote><p>梦里半清醒的我向梦直接发问也没能获得个完整清晰的解析。</p><p>这次的梦,真的太奇怪了……</p></blockquote><h3 id="中场休息"><a href="#中场休息" class="headerlink" title="中场休息"></a>中场休息</h3><p>我清醒了……拿起手机一看,才十四点半。</p><p>再继续睡吧……接下来的梦就回归正常了,还大多跟 MOBA 游戏有关,大概跟我在睡前刷的B站视频有关吧。</p><h3 id="友善评论"><a href="#友善评论" class="headerlink" title="友善评论"></a>友善评论</h3><p>我来到一个游戏展会上,一个看板是写着对于游戏的祝福,上面也充斥着“祝福”。</p><p>「蒸蒸日上!」「ez 策划!」……</p><p>都是些没吐脏字骂人的话语……</p><h3 id="称号"><a href="#称号" class="headerlink" title="称号"></a>称号</h3><p>一款猪场或者企鹅出品的手游,似乎出了个「头号玩家」的礼包,仅需小几万就能拥有个自定义称号。</p><p>于是很多土豪蹲点购买……但起得称号哭笑不得,政治、人物啥的敏感称号使劲往上取。</p><h3 id="改版"><a href="#改版" class="headerlink" title="改版"></a>改版</h3><p>似乎是猪场的扒鸡,似乎我又回坑玩了。</p><p>我常玩的英雄被改版了,被动成了个死后成为灵魂状态读秒然后还可以放技能读秒完还能原地复活的样子?这改版让这英雄从躲在后方猥琐放技能变成往前莽的类型了……</p><p>对面发育非常好,我方翻盘点全压在我身上,于是变成我死了都要输出对面,对方也守我尸蹲我复活点然后再把我打死的拉扯局面。</p><p>来来回回几次后,我感觉,够了!我已经没有耐心了,我要醒了,就算你们直接输了。</p><p>于是我醒了,看了眼时间,十四点五十分……</p><h2 id="3-9"><a href="#3-9" class="headerlink" title="3.9"></a>3.9</h2><p>中 普</p><h3 id="舍友"><a href="#舍友" class="headerlink" title="舍友"></a>舍友</h3><p>某个女主播住在我们宿舍……</p><p>……</p><p>我似乎到网上申请了一个去分布网络的 ID ?</p><h2 id="3-16"><a href="#3-16" class="headerlink" title="3.16"></a>3.16</h2><p>中 普</p><h3 id="屏蔽我!"><a href="#屏蔽我!" class="headerlink" title="屏蔽我!"></a>屏蔽我!</h3><p>一个社交网站的页面,似乎是我发的……上面写着,某个站的用户看不惯我就屏蔽我吧。</p><h2 id="3-22"><a href="#3-22" class="headerlink" title="3.22"></a>3.22</h2><p>中 普</p><h3 id="地球炸了"><a href="#地球炸了" class="headerlink" title="地球炸了"></a>地球炸了</h3><p>苍茫宇宙中,宇宙突然开裂,崩解成一大堆碎片。其中一个大的球形碎片在其中穿梭……</p><p>“是月球啊,月球也可以算是地球的碎片了吧,要是月球能持续吸引周围的碎片,那么地球或许会重新回来吧……”</p><h3 id="暴雨"><a href="#暴雨" class="headerlink" title="暴雨"></a>暴雨</h3><p>我的床铺不知道为什么放在了阳台上,而外面已经阴沉起来了,天空压抑……</p><p>我突然惊觉起来……疯了似的把被子踢到前面,想为自己遮点雨……但是雨夹着雨还是让我浑身湿落。</p><p>…………</p><p>(中间似乎假醒了一次?)</p><h3 id="再起"><a href="#再起" class="headerlink" title="再起"></a>再起</h3><p>我听到了舍友敲打的键盘声,醒了过来。我下了床,走到阳台,发现我的床已经湿透了,插座放在拐角处……上面的屏幕暴亮着,提醒着我已经工作不能……</p><p>我从阳台望出去,已是深夜,心思不平,想着之后该如何……我转身回到宿舍内,发现舍友还在交谈着……</p><p>我突然意识到,是梦!</p><p>我开始愤愤不平起来,马上冲到一个舍友旁,强硬夺下他的眼睛,喊道——“变!”</p><p>他随即头部变成了一只柴犬头……</p><blockquote><p>为什么是柴犬?额,但更关键的是他似乎不是现实舍友,似乎是某个高中同学……</p></blockquote><p>之后我想出去逛一逛,但发现夜色已经哪里都是,无法再出现什么具体的东西了,大概是之前的那个地球炸掉的场景把脑子的渲染配额用完了吧……</p><p>那只好起来了,打开手机,发现天气预报发来暴雨预警……外面已有阵阵雷声……</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>Github Actions 浅尝辄止</title>
|
||
<link href="/2022/03/Github-Actions-%E6%B5%85%E5%B0%9D%E8%BE%84%E6%AD%A2/"/>
|
||
<url>/2022/03/Github-Actions-%E6%B5%85%E5%B0%9D%E8%BE%84%E6%AD%A2/</url>
|
||
|
||
<content type="html"><![CDATA[<p>免费送!免费送!微软电脑免费送啦!</p><span id="more"></span><p>自从 <code>GitHub</code> 被微软收购以后确实是有钱了啊,<code>GitHub Actions</code> 公开仓库竟然可以免费用(私有仓库也有三千分钟时间)。</p><p>什么?不知道 <code>GitHub Actions</code> 是什么?</p><p>简单来说就是提前写好对应的配置文件,那么 <code>GitHub</code> 就会在满足条件时分配电脑执行对应的配置文件,配置文件可以包含命令或者引用其他人写好的配置文件……所以这如同有一台真实的服务器一般强大。</p><p>本来呢,这种服务是为了方便一众开源应用测试和编译的,但是被一众羊毛党薅出花来了……什么自动签到啦、生成订阅源啦、推送消息啦等等等等,这些「奇技淫巧」可以在各家推荐专栏找到,有兴趣可以自己去找一下。</p><p>还是说说我拿 <code>GitHub Actions</code> 来干什么吧。</p><h2 id="Hexo-自动部署"><a href="#Hexo-自动部署" class="headerlink" title="Hexo 自动部署"></a>Hexo 自动部署</h2><p>如果经管着一个静态博客那么这功能是刚需了吧,毕竟如果想在移动设备或者不方便安装环境的公用电脑上写作的话,那么让 <code>Actions</code> 进行生成静态页面和部署是一个优秀的选择。</p><h3 id="生成-Personal-access-tokens"><a href="#生成-Personal-access-tokens" class="headerlink" title="生成 Personal access tokens"></a>生成 Personal access tokens</h3><p>因为分配的机器是一个干净的环境,并没有操作对应 <code>GitHub</code> 仓库的能力,为了做到登陆,首先需要生成一个 <code>access tokens</code> 。(当然也可以用私钥认证,但是感觉麻烦就没用这方式……)</p><p>首先到 <a href="https://github.com/settings/tokens">GitHub 配置页</a> 点击 <code>Generate new token</code> 按钮,输入密码认证后跳转到对应页面。</p><p><code>Note</code> 填写一个便于理解的名称,我这边是用来自动部署 <code>Hexo</code> 博客就写 <code>HEXO_DEPLOY </code> 。</p><p>然后选择过期日期(<code>Expiration</code>),如果不嫌麻烦并确信自己不会忘记更换,那么可以设置一年两年的过期时限,否则懒人就选永不过期吧( <code>No expiration</code>)吧……</p><p>然后在权限范围(<code>Select scopes</code>)栏里勾选 <code>repo</code> 框(如果能明确对应权限是干嘛的也可以只勾选需要的权限)。</p><p>然后点击生成按钮(<code>Generate token</code>)生成一个新的 <code>access tokens</code> ,这个页面只显示一次,所以不要关闭窗口!</p><h3 id="设置-Actions-secrets"><a href="#设置-Actions-secrets" class="headerlink" title="设置 Actions secrets"></a>设置 Actions secrets</h3><p>除非你是私有仓库,那么运行 <code>actions</code> 的配置文件和所有输出对所有人都是可见的,为了安全,要自己设定一个<code>Actions secrets</code> 隐藏相关的 <code>token</code> 。</p><p>新开一个页面,到存储 <code>Hexo</code> 博客文件的仓库, <code>Settins -> Secrets -> Actions -> 点击 New repository secret 按钮</code> ,然后新页面 <code>Name</code> 填写便于理解的名称 ,我这边是用来自动部署 <code>Hexo</code> 博客就写 <code>HEXO_DEPLOY </code> 。值(<code>Value</code>)里填写上一步 <code>Generate token</code> 生成的 <code>token</code> ,然后点击 <code> Add secret</code> 保存 <code>secrets</code> 。</p><h3 id="编写配置文件"><a href="#编写配置文件" class="headerlink" title="编写配置文件"></a>编写配置文件</h3><p>做好前期工作后就到激动人心的写配置时间喽。</p><p>首先在 <code>Git</code> 仓库根目录下新建一个 <code>.github</code> 文件夹,然后再在里面新建一个 <code>workflows</code> 文件夹,再在里面新建一个 <code>xxx.yml</code> 文件,我的形式是 <code>仓库/.github/workflows/deploy.yml</code> 。</p><p>之后就该往 <code>.yml</code> 文件写配置了,<code>yml</code> 格式是一个严格缩进格式,所以对自己好点,用 <code>VS Code</code> 之类的编辑器来写……</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">name:</span> <span class="string">Hexo</span> <span class="string">Deploy</span></span><br><span class="line"></span><br><span class="line"><span class="attr">on:</span></span><br><span class="line"> <span class="attr">push:</span></span><br><span class="line"> <span class="attr">branches:</span> [ <span class="string">hexo</span> ]</span><br><span class="line"></span><br><span class="line"><span class="attr">jobs:</span></span><br><span class="line"> <span class="attr">build:</span></span><br><span class="line"></span><br><span class="line"> <span class="attr">runs-on:</span> <span class="string">ubuntu-latest</span></span><br><span class="line"> <span class="attr">strategy:</span></span><br><span class="line"> <span class="attr">fail-fast:</span> <span class="literal">false</span></span><br><span class="line"> </span><br></pre></td></tr></table></figure><p><code>name</code> 那一栏填便于理解的名字。</p><p><code>on</code> 选项是为监听哪个分支发生变动就执行动作,我这边设置为 <code>push</code> 的 <code>hexo</code> 分支,意为当 <code>hexo</code> 分支下发生了 <code>push</code> 动作后就执行此 <code>action</code> ,分支名请填自己仓库实际的,是 <code>main</code>还是 <code>hexo</code> 请根据实际选择。</p><p><code>jobs</code> 下的名称大概是实际执行 <code>action</code> 时的名字,可写个便于理解的名字。</p><p><code>runs-on</code> 是声明需要什么类型的机器, <code>ubuntu-latest</code> 就是申请最新的 <code>ubuntu</code> 系统的机子。</p><p><code>fail-fast</code> 的实际用途我也不懂,反正他就在那儿了.jpg 。</p> <figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="attr">steps:</span> </span><br><span class="line"><span class="bullet">-</span> <span class="attr">uses:</span> <span class="string">actions/checkout@v2</span> <span class="comment">#拉取仓库文件</span></span><br><span class="line"></span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Set</span> <span class="string">up</span> <span class="string">Node.js</span></span><br><span class="line"> <span class="attr">uses:</span> <span class="string">actions/setup-node@v1</span></span><br><span class="line"> <span class="attr">with:</span></span><br><span class="line"> <span class="attr">node-version:</span> <span class="number">17</span></span><br><span class="line"> </span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Install</span> <span class="string">dependencies</span></span><br><span class="line"> <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string"> npm install -g hexo-cli</span></span><br><span class="line"><span class="string"> npm install</span></span><br><span class="line"><span class="string"> git config --global user.name "wherever"</span></span><br><span class="line"><span class="string"> git config --global user.email "wherever@xxx.xx"</span></span><br><span class="line"><span class="string"></span><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Deploy</span></span><br><span class="line"> <span class="attr">env:</span></span><br><span class="line"> <span class="attr">DEPLOY_KEY:</span> <span class="string">${{</span> <span class="string">secrets.HEXO_DEPLOY</span> <span class="string">}}</span></span><br><span class="line"> <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string"> hexo clean</span></span><br><span class="line"><span class="string"> hexo generate</span></span><br><span class="line"><span class="string"> cd ./public</span></span><br><span class="line"><span class="string"> git init</span></span><br><span class="line"><span class="string"> git add --all .</span></span><br><span class="line"><span class="string"> git commit -m "GitHub action Auto Builder"</span></span><br><span class="line"><span class="string"> git push --quiet --force https://$DEPLOY_KEY@github.com/name/name.github.io.git master</span></span><br><span class="line"><span class="string"></span></span><br></pre></td></tr></table></figure><p>之后就是 <code>steps</code> 栏目了,<code>name</code> 写个便于理解的名字。</p><p><code>GitHub actions</code> 最为被称道的一点就是能用其他人预先写好的脚本,所以在 <code>Set up Node.js</code> 栏里的 <code>actions/setup-node@v1</code> 这里就是引用了安装 <code>nodejs</code> 环境的脚本,<code>with</code> 后面填入脚本里预先定义好的变量(填 17 意为安装版本号为 17 的 <code>node</code> ),不用自己考虑如何实现。</p><p><code>Install dependencies</code> 这栏就是安装依赖了,<code>npm</code> 安装 <code>Hexo</code> 的包,然后 <code>git config</code> 是设置自己的名称和电子邮箱。</p><p><code>Deploy</code> 的 <code>env</code> 一栏就是上面设置 <code>Actions secrets</code> 操作起到用处的地方了,</p><p><code>DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY }}</code> </p><p>的意思就是把 <code>Actions secrets</code> 里的叫 <code>HEXO_DEPLOY</code> 的值声明成叫 <code>DEPLOY_KEY</code> 的环境变量,按自己实际情况写……</p><p>下面的命令就是重复流水帐了…… <code>git push --quiet --force https://$DEPLOY_KEY@github.com/name/name.github.io.git master</code> 这里就根据实际情况写了,我是博客源文件和生成的静态文件都放一个仓库里就将生成好的静态文件用 <code>--force</code> 参数强制部署到 <code>master</code> 分支,<strong>要提前切换好分支!</strong>在自己仓库的 <code>Settings -> Branches</code> 的 <code>Default branch</code> 里将自己放置博客源代码的分支改名并设为默认(我是将放博客源代码的命名为 <code>hexo</code>),请提前确认好,要不然 <code>--force</code> 参数将会连同历史记录<strong>覆盖</strong>掉 <code>master</code> 分支的内容!</p><p>如果是分出一个仓库放置生成后的静态页面就根据自己实际情况写。</p><h3 id="测试"><a href="#测试" class="headerlink" title="测试"></a>测试</h3><p>之后就是进行 <code>push</code> 操作看看 <code>action</code> 有没有正常工作了,要是失败就会出现红色的叉叉,这时请根据提示检查哪里出了问题(文件缩进、名称没写对等……)。</p><p>成功了的话,就去检查对应分支有没有出现对应的静态文件了。</p><h2 id="部署自定义字体"><a href="#部署自定义字体" class="headerlink" title="部署自定义字体"></a>部署自定义字体</h2><p>当然……因为是一台对应的机器,所以可以装点 <code>Python</code> 环境运行一点脚本啊……我之前<a href="../../../2021/03/%E4%B8%AD%E6%96%87%E7%BD%91%E9%A1%B5%E5%AD%97%E4%BD%93%E5%8A%A8%E6%80%81%E8%A3%81%E5%89%AA/">中文字体动态剪裁</a>就是用 <code>GitHub actions</code> 执行的。</p><h3 id="具体而言……"><a href="#具体而言……" class="headerlink" title="具体而言……"></a>具体而言……</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">steps:</span> <span class="comment">#安装 Python 环境</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">uses:</span> <span class="string">actions/checkout@v2</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Set</span> <span class="string">up</span> <span class="string">Python</span> <span class="number">3.9</span></span><br><span class="line"> <span class="attr">uses:</span> <span class="string">actions/setup-python@v2</span></span><br><span class="line"> <span class="attr">with:</span></span><br><span class="line"> <span class="attr">python-version:</span> <span class="number">3.9</span></span><br><span class="line"> </span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Install</span> <span class="string">dependencies</span></span><br><span class="line"> <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string"> python -m pip install --upgrade pip</span></span><br><span class="line"><span class="string"> python -m pip install fonttools brotli requests</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Deploy</span></span><br><span class="line"> <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string"> python3 utils.py -d #运行提前写好的脚本生成字符集</span></span><br><span class="line"><span class="string"> pyftsubset Zpix.ttf --text-file=strdb.txt #裁剪</span></span><br><span class="line"><span class="string"> fonttools ttLib.woff2 compress -o Zpix.woff2 Zpix.subset.ttf</span></span><br><span class="line"><span class="string"> mv Zpix.woff2 ./public/css/fonts</span></span><br><span class="line"><span class="string"> mv Zpix.subset.ttf ./public/css/fonts/Zpix.ttf #将裁剪好的文件放到生成文件夹内</span></span><br></pre></td></tr></table></figure><h2 id="初始化-Giscus-对应评论"><a href="#初始化-Giscus-对应评论" class="headerlink" title="初始化 Giscus 对应评论"></a>初始化 Giscus 对应评论</h2><h3 id="脚本文件"><a href="#脚本文件" class="headerlink" title="脚本文件"></a>脚本文件</h3><p><a href="../../01/%E4%B8%BA%E5%8D%9A%E5%AE%A2%E6%94%AF%E6%8C%81%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/">参考这</a>。</p><h3 id="配置文件"><a href="#配置文件" class="headerlink" title="配置文件"></a>配置文件</h3><p><a href="https://github.com/SouthFox-D/SouthFox-D.github.io/blob/hexo/.github/workflows/deploy.yml">参考这</a>……</p><h2 id="图片备份"><a href="#图片备份" class="headerlink" title="图片备份"></a>图片备份</h2><p>虽然博客用了 <a href="/2022/03/IPFS%E5%92%8C%E5%8D%9A%E5%AE%A2/"><code>IPFS</code></a> 来当博客图床,但是也有失效的风险,所以做好备份是肯定的啦~</p><h3 id="脚本文件-1"><a href="#脚本文件-1" class="headerlink" title="脚本文件"></a>脚本文件</h3><p>跟<a href="../IPFS%E5%92%8C%E5%8D%9A%E5%AE%A2/">本地版</a>的区别不大,就是将图片放到一个文件夹方便后续操作……</p><p><a href="https://github.com/SouthFox-D/SouthFox-D.github.io/blob/hexo/utils.py">如果真想看……</a></p><h3 id="配置文件-1"><a href="#配置文件-1" class="headerlink" title="配置文件"></a>配置文件</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">steps:</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">uses:</span> <span class="string">actions/checkout@v2</span> <span class="comment"># 安装 Python 环境</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Set</span> <span class="string">up</span> <span class="string">Python</span> <span class="number">3.9</span></span><br><span class="line"> <span class="attr">uses:</span> <span class="string">actions/setup-python@v2</span></span><br><span class="line"> <span class="attr">with:</span></span><br><span class="line"> <span class="attr">python-version:</span> <span class="number">3.9</span></span><br><span class="line"> </span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Install</span> <span class="string">dependencies</span></span><br><span class="line"> <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string"> sudo apt-get install wget</span></span><br><span class="line"><span class="string"> python -m pip install --upgrade pip</span></span><br><span class="line"><span class="string"> python -m pip install fonttools brotli requests</span></span><br><span class="line"><span class="string"> git config --global user.name "SouthFox-D" #自己的……</span></span><br><span class="line"><span class="string"> git config --global user.email "southfoxdreamer@gmail.com"</span></span><br><span class="line"><span class="string"></span><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Check</span> <span class="string">Img</span></span><br><span class="line"> <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string"> wget https://raw.githubusercontent.com/SouthFox-D/blog_img/main/imgList.json #改成自己的仓库并已存在此文件</span></span><br><span class="line"><span class="string"> python3 utils.py -b</span></span><br><span class="line"><span class="string"></span><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">Backup</span></span><br><span class="line"> <span class="attr">env:</span></span><br><span class="line"> <span class="attr">DEPLOY_KEY:</span> <span class="string">${{</span> <span class="string">secrets.HEXO_DEPLOY</span> <span class="string">}}</span> <span class="comment">#自己的……</span></span><br><span class="line"> <span class="attr">run:</span> <span class="string">|</span></span><br><span class="line"><span class="string"> rm -rf .git #删除 Hexo 的 .git 文件夹防止后续冲突</span></span><br><span class="line"><span class="string"> git clone https://github.com/SouthFox-D/blog_img.git blog_img #备份仓库</span></span><br><span class="line"><span class="string"> cp -f newimg/* blog_img/ #合并文件夹</span></span><br><span class="line"><span class="string"> cd blog_img</span></span><br><span class="line"><span class="string"> git add .</span></span><br><span class="line"><span class="string"> git commit -am "Auto backup" || echo "Nothing to push" #防止报错</span></span><br><span class="line"><span class="string"> git push --force https://$DEPLOY_KEY@github.com/SouthFox-D/blog_img.git #根据实际情况而定</span></span><br></pre></td></tr></table></figure><p>具体可<a href="https://github.com/SouthFox-D/SouthFox-D.github.io/blob/hexo/.github/workflows/backup-img.yml">参考这</a>……</p><h2 id="总之"><a href="#总之" class="headerlink" title="总之"></a>总之</h2><p>一次编写后,后续就不用怎么管了,自动化的好处体现出来了……</p><p>我在一台没有安装 <code>Hexo</code> 环境下的机器上写作,到时只要直接 <code>push</code> 就让 <code>GitHub</code> 来完成对应的部署操作了,不必自己安装环境又 <code>clear </code> 啊 <code>g</code> 啊 <code>d</code> 啊的……在移动设备写作可以写好直接复制到 <code>GitHub</code> 网页版里,同时图片也不必当心失效。</p><p>反正……微软!有钱的!嫖起来没负罪感。 </p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>IPFS和博客</title>
|
||
<link href="/2022/03/IPFS%E5%92%8C%E5%8D%9A%E5%AE%A2/"/>
|
||
<url>/2022/03/IPFS%E5%92%8C%E5%8D%9A%E5%AE%A2/</url>
|
||
|
||
<content type="html"><![CDATA[<p>似乎这是两码事?</p><span id="more"></span><h2 id="IPFS"><a href="#IPFS" class="headerlink" title="IPFS"></a>IPFS</h2><p><code>IPFS</code> 全称 (<code>InterPlanetary File System</code>),中文名可叫<strong>星际文件系统</strong>。</p><p>这略带一丝中二的名字确实透露了这项目的愿景,设想一下,要是人类真的在太阳系殖民成功了,各个殖民地要如何通信?就算是火星和地球光也要走三分钟,最低<strong>六分钟</strong>的延迟,谁受得了啊?</p><p>但观测一下就可以发现,网络中的很多数据是可以复用的。比如,火星上的 <code>A</code> 访问了地球的今日新闻,火星上的 <code>B</code> 想访问地球的今日新闻网站,还要去跟地球通信吗?他只要跟 <code>A</code> 获取数据就可以了。</p><p>这就是 <code>IPFS</code> 的基本思想了,一个点对点的分布式文件系统。</p><h3 id="能做啥"><a href="#能做啥" class="headerlink" title="能做啥"></a>能做啥</h3><p>作为一个点对点的分布式文件系统,基本功能就是存储文件了,图片、视频、静态网页、<strong>文件夹</strong>皆可。</p><p>文件上传后,再经过算(mo)法后,文件会被标上一个类似于 <code>Qmd3oSMoEb3npqXdjwek7RPfvteMckrBFBRHU1ECZDtAEC</code> 这种形式的 <code>CID</code> ,这个 <code>CID</code> 可以唯一标识一个文件,其他人将这个 <code>CID</code> 告诉 <code>IPFS</code> 网络,就可以在全世界的 <code>IPFS</code> 网络中进行获取了。</p><h3 id="网关"><a href="#网关" class="headerlink" title="网关"></a>网关</h3><p>但遗憾的是 <code>IPFS</code> 不能兼容现在主流的 <code>HTTP</code> 网络,如果没有专门的客户端又想要使用 <code>IPFS</code> 网络,要借助一个网关才可以。</p><p>好比如世界上有一群人发明了一种新语言,这种语言甚至需要借助一个新器官才能沟通,很明显其他人是完全无法同使用新语言的人交流的。新语言使用者为了增大影响力,决定派出几名翻译,让双方能够沟通。</p><blockquote><p> 可通过<a href="https://ipfs.github.io/public-gateway-checker/">公共网关检查站</a>获知常见公共网关。</p><p>国内访问优秀的网关为:</p><p>w3s.link cloudflare-ipfs.com (Cloudflare 我的超人!)</p><p>ipfs.fleek.co</p></blockquote><p>在网关后面加上 <code>/ipfs/[cid]</code> 即可通过 <code>http</code> 的形式获取文件了。</p><p>试试看↓:</p><p><code>/ipfs/Qmd3oSMoEb3npqXdjwek7RPfvteMckrBFBRHU1ECZDtAEC </code></p><ul><li><p><a href="https://media.southfox.me/ipfs/Qmd3oSMoEb3npqXdjwek7RPfvteMckrBFBRHU1ECZDtAEC">w3s.link</a></p></li><li><p><a href="https://ipfs.fleek.co/ipfs/Qmd3oSMoEb3npqXdjwek7RPfvteMckrBFBRHU1ECZDtAEC">ipfs.fleek.co</a></p></li></ul><h3 id="IPNS"><a href="#IPNS" class="headerlink" title="IPNS"></a>IPNS</h3><p><code>cid</code> 形式有个问题就是他是根据文件内容进行计算的,文件内容哪怕改动一个字,生成的 <code>cid</code> 也会完全不同……如果要在 <code>IPFS</code> 网络部署一个网站的话,管理员每次更新网站,就得把新 <code>cid</code> 重新告知出去吗?</p><p>显然太折腾了……但可以利用现有的 <code>DNS</code> ,将 <code>cid</code> 绑定到 <code>DNS</code> 上,这样管理方仅需更新 <code>DNS</code> 即可。这种方式被成为 <code>IPNS</code> ( InterPlanetary Name System) 。</p><p>通过这种方式,可以将一个静态网站托管到 <code>IPFS</code> 网络上面,生命力大大增强。</p><p>一般网关也支持 <code>IPNS</code> 形式访问,在网关后面加上 <code>/ipns/[域名]</code> 即可。</p><p>试试看↓:</p><p><code>/ipns/zh.wikipedia-on-ipfs.org</code> (一个静态的维基百科存档)</p><ul><li><a href="https://w3s.link/ipns/zh.wikipedia-on-ipfs.org">w3s.link</a></li><li><a href="https://ipfs.fleek.co/ipns/zh.wikipedia-on-ipfs.org">ipfs.fleek.co</a></li></ul><p><code>/ipns/blog.southfox.me</code> (当然!)</p><ul><li><a href="https://w3s.link/ipns/blog.southfox.me">w3s.link</a></li><li><a href="https://ipfs.fleek.co/ipns/blog.southfox.me">ipfs.fleek.co</a></li></ul><h2 id="IPFS-图床"><a href="#IPFS-图床" class="headerlink" title="IPFS 图床"></a>IPFS 图床</h2><p>那么托管文件,最容易想到的就是图片了,本博客的图片也在几个月前迁移到了 <code>IPFS</code> 网络上。</p><p>如果真想将图片放到 <code>IPFS</code> 上,那么该考虑以下事情:</p><p><strong>优点:</strong></p><ul><li><p>抗☐☐,即使一个网关炸掉了,也可以切换另一个网关。</p></li><li><p>轻松切换, 文件 <code>cid</code> 是不变的,<code>VS Code</code> 全文替换就可以很轻松切到另一个网关,不像一般图床,其连接是随机的,其迁移成本会变得非常大。</p></li></ul><p><strong>缺点:</strong></p><ul><li>慢……速度一般来说只能说凑合,除非将设置一个靠近用户的位置放置网关,同时文件刚好就在这网关上……</li></ul><h3 id="web3-storage"><a href="#web3-storage" class="headerlink" title="web3.storage"></a>web3.storage</h3><p><a href="https://web3.storage/">地址</a></p><p>可使用 <code>GitHub</code> 注册,这网站提供 <code>1T</code> 的存储空间。</p><h3 id="fleek-co"><a href="#fleek-co" class="headerlink" title="fleek.co"></a>fleek.co</h3><p><a href="https://fleek.co/">地址</a></p><p>同样可使用 <code>GitHub</code> 注册,可提供存储空间不明。</p><p>但是重点是!他提供<strong>网站托管</strong>!</p><h3 id="Pinata"><a href="#Pinata" class="headerlink" title="Pinata"></a>Pinata</h3><p><a href="pinata.cloud">地址</a></p><p><code>1G</code> 免费空间……但似乎是 <code>IPFS</code> 客户端能直接连接过去进行备份?总之不推荐(因为空间太小了)。</p><h3 id="公共网关"><a href="#公共网关" class="headerlink" title="公共网关"></a>公共网关</h3><p>以上的网站是要自己手动上传至他们的网页,并没有很好的支持 <code>HTTP API</code> ,所以喜欢用 <code>PicGo</code> 传图并直接获取 <code>MarkDown</code> 连接的懒人可能要寻找能够直接传图的公共网关了。</p><h4 id="PicGo"><a href="#PicGo" class="headerlink" title="PicGo"></a>PicGo</h4><p>在插件市场搜索 <code>web-uploader-custom-url-prefix</code> 并进行安装,配置成如下:</p><p><img src="https://media.southfox.me/ipfs/Qma7FSQ3tzoT8LqLxMRKVVJ5cNSEu3HgKL1aXPzAYTzXmV"></p><p>其中 <code>infura-ipfs.io</code> 可以是任意支持 <code>HTTP API </code> 形式上传的网关。</p><p>自定义图片前缀可以是任意访问速度快的网关。</p><h4 id="Python"><a href="#Python" class="headerlink" title="Python"></a>Python</h4><p>想用 <code>Python</code> 折腾?好主意,所以快去折腾吧!</p><h4 id="快捷命令"><a href="#快捷命令" class="headerlink" title="快捷命令"></a>快捷命令</h4><p>没用过苹果设备,不清楚。</p><p>不过一般参照之前经验改改应该不难……?</p><h2 id="Pin-与失效"><a href="#Pin-与失效" class="headerlink" title="Pin 与失效"></a>Pin 与失效</h2><p>前面的 <code>PicGo</code> 上传图片时带有个 <code>pin=true</code> 参数,这个参数就是告诉网关,这个文件很重要,请不要当成缓存清除。</p><p>因为 <code>IPFS</code> 的设置是,其他节点获取了一个文件后,会放在缓存里,如果服务器的缓存超过了阈值(默认 <code>10G</code>),就会清理掉……</p><p>如果上传文件的服务器下线了,那么还是有可能从缓存了这文件的服务器获取文件的。但万一时间太过久远,久到主服务器不存在,其他服务器缓存早已清理,那么这个文件就如同 <code>BiTorrent</code> 下载中的<strong>死种</strong>一样,再也不能获取了……</p><p>而另一面讲,如果文件很热门,比如明星艳照,那么这个文件将会持久存在,删除不能……所以,<strong>不要向 <code>IPFS</code> 上传个人隐私相关文件!</strong>一旦传播开来,那就没有后悔药了……</p><h2 id="备份"><a href="#备份" class="headerlink" title="备份"></a>备份</h2><p>所以为了数据安全考虑,放置在 <code>IPFS</code> 上的图片也要做好备份……</p><p>似乎可以写个脚本,自动分析文件下的 <code>cid</code> ,然后自动爬取备份到本地。</p><p><del>以后再摸吧。</del></p><p><strong>3-13 更新:</strong></p><p>其实当天就摸了……只是我憋着不放呢。(</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> sys</span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">import</span> json</span><br><span class="line"><span class="keyword">import</span> re</span><br><span class="line"><span class="keyword">import</span> random</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">backupImg</span>():</span><br><span class="line"> path = os.getcwd()</span><br><span class="line"> <span class="keyword">for</span> root, dirs, files <span class="keyword">in</span> os.walk(path + <span class="string">'/source'</span>): <span class="comment">#根据实际情况定</span></span><br><span class="line"> <span class="keyword">for</span> name <span class="keyword">in</span> files :</span><br><span class="line"> filelist.append(os.path.join(root, name))</span><br><span class="line"></span><br><span class="line"> nowImgList = []</span><br><span class="line"> <span class="keyword">for</span> filename <span class="keyword">in</span> filelist:</span><br><span class="line"> <span class="keyword">if</span> filename.endswith(<span class="string">'.md'</span>):</span><br><span class="line"> <span class="keyword">if</span> <span class="string">"_posts/"</span> <span class="keyword">in</span> filename:</span><br><span class="line"> post = filename.split(<span class="string">"_posts/"</span>)[-<span class="number">1</span>]</span><br><span class="line"></span><br><span class="line"> <span class="keyword">with</span> <span class="built_in">open</span>(filename, <span class="string">"r"</span>, encoding=<span class="string">'utf-8'</span>) <span class="keyword">as</span> f:</span><br><span class="line"> mdText = f.read()</span><br><span class="line"> result = re.findall(<span class="string">'!\[(.*?)\]\((.*?)\)'</span>, mdText)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="built_in">len</span>(result)):</span><br><span class="line"> img_quote = result[i][<span class="number">0</span>]</span><br><span class="line"> img_url = result[i][<span class="number">1</span>]</span><br><span class="line"> nowImgList.append(img_url)</span><br><span class="line"></span><br><span class="line"> downLoadList = <span class="built_in">list</span>(<span class="built_in">set</span>(nowImgList).difference((<span class="built_in">set</span>(imgJson[<span class="string">"img"</span>]))))</span><br><span class="line"> <span class="keyword">if</span> downLoadList != <span class="string">''</span>:</span><br><span class="line"> nowImgJson = {}</span><br><span class="line"> nowImgJson[<span class="string">"img"</span>] = nowImgList</span><br><span class="line"> <span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">'./imgList.json'</span>, <span class="string">'w'</span>, encoding=<span class="string">'utf-8'</span>) <span class="keyword">as</span> f:</span><br><span class="line"> json.dump(nowImgJson, f)</span><br><span class="line"></span><br><span class="line"> downloadImg(downLoadList)</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">downloadImg</span>(<span class="params">imgList</span>): </span><br><span class="line"> <span class="keyword">for</span> img_url <span class="keyword">in</span> imgList:</span><br><span class="line"> <span class="keyword">if</span> img_url == <span class="string">''</span>: <span class="comment">#判空</span></span><br><span class="line"> <span class="keyword">continue</span></span><br><span class="line"> <span class="comment"># img name spell</span></span><br><span class="line"> urlname = img_url.split(<span class="string">u"/"</span>)</span><br><span class="line"> img_name = <span class="built_in">str</span>(urlname[-<span class="number">1</span>])</span><br><span class="line"> <span class="comment"># download img</span></span><br><span class="line"> ipfs_gateWay = [<span class="string">'https://media.southfox.me/ipfs/'</span>, <span class="string">'https://ipfs.io/ipfs/'</span>, <span class="string">'https://ipfs.fleek.co/ipfs/'</span>]</span><br><span class="line"> <span class="keyword">if</span> <span class="string">'ipfs'</span> <span class="keyword">in</span> img_url:</span><br><span class="line"> img_url = random.choice(ipfs_gateWay) + img_name</span><br><span class="line"></span><br><span class="line"> response = requests.get(img_url) <span class="comment">#根据自己图床链接进行选择</span></span><br><span class="line"> <span class="built_in">print</span>(<span class="string">'Download '</span> + img_url + <span class="string">'✔️'</span>)</span><br><span class="line"> <span class="comment"># write to file</span></span><br><span class="line"> f_img = <span class="built_in">open</span>(<span class="string">'./'</span> + img_name, <span class="string">'wb'</span>)</span><br><span class="line"> f_img.write(response.content)</span><br><span class="line"> f_img.close()</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> filelist = []</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> os.path.exists(<span class="string">'./imgList.json'</span>):</span><br><span class="line"> imgJson = []</span><br><span class="line"> <span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">'./imgList.json'</span>, <span class="string">'r'</span>, encoding=<span class="string">'utf-8'</span>) <span class="keyword">as</span> f:</span><br><span class="line"> imgJson = json.load(f)</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> imgJson = {}</span><br><span class="line"> imgJson[<span class="string">"img"</span>] = []</span><br><span class="line"> backupImg()</span><br></pre></td></tr></table></figure><p>简单来说,就是用扫描 <code>source</code> 目录下的的 <code>.md</code> 文件,并用正则扫描 <code>![]()</code> 这种形式的图片语法并存起来。</p><p>然后进行图片抓取,其中 <code>if 'ipfs' in img_url:</code> 这里是判断链接是否是 <code>ipfs</code> 的图床链接,要是你的图片链接只来源一个图床(例如 <code>sm.ms</code> 可以写 <code>if 'loli.net' in img_url:</code>),请自行替换,要是图床来源杂乱就……不进行判断抓取下来自己手动选择吧。</p><p>然后结束后会生成一个 <code>imgList.json</code> 文件,里面是已经抓取的图片,以后要是再进行抓取的话就通过这文件和新扫描的文件列表做集合的求差处理(<code>downLoadList = list(set(nowImgList).difference((set(imgJson["img"]))))</code>),以来判断要新抓取那些文件……</p><p><del>总之写的非常初学者……应该都是比较好理解的吧(</del></p><p>很多都是为了 <code>GitHub Actions</code> 准备的,不知道是什么的话可以看<a href="../Github-Actions-%E6%B5%85%E5%B0%9D%E8%BE%84%E6%AD%A2">这</a>。</p><h2 id="IPFS-博客"><a href="#IPFS-博客" class="headerlink" title="IPFS 博客"></a>IPFS 博客</h2><p>如果你有一个静态博客,为何不考虑放置在 <code>IPFS</code> 网络上呢?</p><p>首先要更改的就是博客的连接……要前往博客模板把其里面的所有连接都改成<strong>相对连接</strong>的形式,否则托管时会根本加载不了 <code>css</code> 或者 <code>js</code> 文件。</p><p>接着前往 <a href="https://fleek.co/">fleek</a> 并注册,然后在托管一栏中选择你放置静态网页的仓库(或分支),就能简单的部署到 <code>IPFS</code> 网络上了,要是想启用 <code>IPNS</code> ,也可以在 <code>SETTINGS -> Domain Management -> Add Custom Domain</code> 增加一个博客域名,然后在新增域名的更多选项里选择 <code>Dns Link</code> ,会自动弹出个窗口绑定域名。把这个 <code>CNAME</code> 选项绑定到你的域名管理商即可。(<code>Cloudflare</code> 我默认关了代理,要是绑定迟迟不能生效的话可以试着关掉 <code>Cloudflare</code> 代理试试)</p><h2 id="实际使用"><a href="#实际使用" class="headerlink" title="实际使用"></a>实际使用</h2><h3 id="客户端"><a href="#客户端" class="headerlink" title="客户端"></a>客户端</h3><p><a href="https://github.com/ipfs/ipfs-desktop">客户端下载地址</a></p><p>不一定需要个网关,实际自己直接用用也是不错的,就是使用时会不停的交换数据,对电量和流量的消耗也很大……如果所在网络对 <code>P2P</code> 协议限制比较严格那可就要小心了……</p><h3 id="服务端"><a href="#服务端" class="headerlink" title="服务端"></a>服务端</h3><p><a href="https://github.com/ipfs/go-ipfs">服务端下载地址</a></p><p>如果你手头上有闲置的服务器,为什么不尝试部署一个 <code>IPFS</code> 服务呢?</p><p>将文件放一份备份在自己的服务器上,或是搭建一个自用网关,也能有效提升使用体验(当然要服务器性能足够)。</p><h2 id="文件币"><a href="#文件币" class="headerlink" title="文件币"></a>文件币</h2><p>哦……所以还是谈论到这个话题了……</p><p><code>filecoin</code> ,是一个建立在 <code>IPFS</code> 上的加密货币项目(大概)?</p><p>只要你抵押出相当容量的硬盘,就能进行挖矿了……这似乎也是去年硬盘涨价风潮原因之一?<del>(那更该用了,这是拿大众的钱买硬盘啊)</del></p><p>但现在这币似乎状态不好的样子,价格跌倒了顶值的十分之一。虽然我对加密货币不感冒,但我还是想 <code>fil</code> 涨起来的,毕竟币涨了也是能吸引更多人提供存储空间的,经营托管服务的服务商也能通过 <code>fil</code> 进行回本。</p><p>但是不考虑加密货币也罢, <code>IPFS</code> 做为一个开源项目,如果其足够好,也能自己证明自己,<code>IPFS</code> 能取代 <code>HTTP</code> 成为下一代网络标准吗?天知道。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
<tag> IPFS </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>22年2月梦记</title>
|
||
<link href="/2022/02/22%E5%B9%B42%E6%9C%88%E6%A2%A6%E8%AE%B0/"/>
|
||
<url>/2022/02/22%E5%B9%B42%E6%9C%88%E6%A2%A6%E8%AE%B0/</url>
|
||
|
||
<content type="html"><![CDATA[<p>该记了!</p><p>以后还是多写点解析吧……要不然过个两三年再回来看,肯定就不知道是什么意思了。</p><span id="more"></span><h2 id="2-12"><a href="#2-12" class="headerlink" title="2.12"></a>2.12</h2><p>晚 普</p><h3 id="列车"><a href="#列车" class="headerlink" title="列车"></a>列车</h3><p>我在一座列车上,车厢不是车厢,而是一个又一个场景……</p><p>前几个场景不记得了,中间有个场景好像是我在一个楼梯上。因为背包里的书非常重,我就把他放在楼梯上,而我在一旁喘气……背包里的书似乎都没有封面的样子。楼梯上方似乎是一个幼儿教室的样子……</p><blockquote><p>喂,你带回来的资料书该看了,要不然带回来到底要干嘛?</p></blockquote><p>下一个场景是我在一家卖场里,带有科技感的四边形柱子悬在上方,我来到一个玻璃展柜前,似乎想要买,但是拿起来之后,还是放下,最后打算不买了。</p><p>最后一个场景似乎我下站了,我打开地图,发现我竟然在目的地反方向!我急忙问车站人员,得到答案我已经过了好多站了……我拿出手机,不是惯用手机,似乎是苹果的?我打开手机开始打字,输入法非常别扭,我连连打错,窘迫的不行。最后觉得这样子还不如……醒来……</p><p>然后我就醒了。</p><h2 id="2-16"><a href="#2-16" class="headerlink" title="2.16"></a>2.16</h2><p>中 普</p><h3 id="开包"><a href="#开包" class="headerlink" title="开包"></a>开包</h3><p>我似乎有类似 jojo 布姐那样的能力,在任何事物上开拉链。</p><p>我在街上对着行道树干上使用了能力,然后……这拉链是明日方舟抽卡!我就对着一棵树抽起卡来,抽了似乎很多次。树伤痕累累……汁液滴的到处都是,之后就有管理人员过来,想要制裁我,他查看了树干,记下了三条拉链痕迹(其实还有很多!),我心里想着……至于吗……就这点小事就要把我关那么久?</p><blockquote><p>氪金抽卡手游,恶心啊!</p></blockquote><h2 id="2-17"><a href="#2-17" class="headerlink" title="2.17"></a>2.17</h2><p>中 普</p><h3 id="意外的联络"><a href="#意外的联络" class="headerlink" title="意外的联络"></a>意外的联络</h3><p>一个很久没联系的初中同学找上了我的 QQ ,然后给我发消息,说我的长毛象 ID 是这个,快来加我……</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>为博客支持评论系统</title>
|
||
<link href="/2022/01/%E4%B8%BA%E5%8D%9A%E5%AE%A2%E6%94%AF%E6%8C%81%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/"/>
|
||
<url>/2022/01/%E4%B8%BA%E5%8D%9A%E5%AE%A2%E6%94%AF%E6%8C%81%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F/</url>
|
||
|
||
<content type="html"><![CDATA[<p>突然发现加入十年之约的博客评论区都好热闹……似乎都是随机访问过来的,所以还是有必要为博客加上评论系统的?</p><span id="more"></span><p>考察了一番选择了依靠 <code>GitHub Discussions</code> 的 <code>Giscus</code> 做为博客的评论系统。</p><h2 id="特点"><a href="#特点" class="headerlink" title="特点"></a>特点</h2><p>👍 优点:</p><ul><li>比起 <code>Gitalk</code> ,拥有更小的权限请求</li><li>部署也方便,十分钟内都能轻松搞定</li><li>数据安全也有 <code>GitHub</code> 做背书,至少比自建强</li><li>拉取 <code>Discussions</code> 数据的脚本是放在 <code>vercel</code> 上,国内看评论至少是没问题的</li></ul><p>🙃 缺点:</p><ul><li>评论得需要个 <code>GitHub</code> 帐号,对于没有相关经验的人真可谓叹息之墙了,但是也不全是坏事,倒垃圾评论也能隔绝掉大部分。</li></ul><h2 id="部署"><a href="#部署" class="headerlink" title="部署"></a>部署</h2><ol start="0"><li>为仓库开启 <code>Discussions</code> ,仓库 Setting –> Features –> 勾选 Discussions 。</li><li>先去 <a href="https://github.com/apps/giscus">GitHub 应用页</a> 安装 <code>Giscus</code> ,可以仅给指定的仓库授权。</li><li>在到 <a href="https://giscus.app/zh-CN">Giscus 官网</a> 进行配置,输入仓库名,决定映射方式等、评论样式等。</li><li>最后生成一个脚本代码,嵌入到博客文章模板底部,搞定!</li></ol><h2 id="坑"><a href="#坑" class="headerlink" title="坑"></a>坑</h2><p>如果映射方式选择 <code>pathname</code>,而 uri 里包含中文,将会被解码,搞得非常乱。所以可以自己麻烦一点,手动指定。</p><p>如 <code>Hexo</code> ,在 <code>head</code> 模板中插入到 <code><head></code> 标签里:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><% if (page.title){ %><meta property="og:title" content="<%= page.path %>"/><% } %></span><br></pre></td></tr></table></figure><p>之后 <code>Giscus</code> 选择为 <code>og:title</code> ,这样就确保标题不会被转码了。</p><h2 id="自动初始化"><a href="#自动初始化" class="headerlink" title="自动初始化"></a>自动初始化</h2><p>总体来说还是不错的,再折腾一下可以选择自建,这样可以避开对脚本所在域名的封锁,或者部署时自动创建对应帖子,<del>不过挺麻烦,以后在摸吧 🐟 。</del></p><p><strong>3-13 更新:</strong></p><p>其实很早就摸了,只是我憋着不放而已(</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> sys</span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">import</span> json</span><br><span class="line"><span class="keyword">import</span> getopt</span><br><span class="line"><span class="keyword">import</span> re</span><br><span class="line"><span class="keyword">import</span> random</span><br><span class="line"><span class="keyword">from</span> datetime <span class="keyword">import</span> datetime</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">addDiscussion</span>():</span><br><span class="line"> currentYear = <span class="built_in">str</span>(datetime.now().year)</span><br><span class="line"> repo_id=<span class="string">"aaabbb"</span></span><br><span class="line"> category_id=<span class="string">"cccddd"</span></span><br><span class="line"> DISCUSSIONS_TOKEN=os.environ.get(<span class="string">'DISCUSSIONS_TOKEN'</span>) <span class="comment">#根据自己实际情况选择</span></span><br><span class="line"></span><br><span class="line"> header = {</span><br><span class="line"> <span class="string">"Authorization"</span>: <span class="string">f"Bearer <span class="subst">{DISCUSSIONS_TOKEN}</span>"</span></span><br><span class="line"> }</span><br><span class="line"> data = {</span><br><span class="line"> <span class="string">'query'</span>: <span class="string">"""query{repository(owner:"name",name:"repo_name"){</span></span><br><span class="line"><span class="string"> id discussions(first:100, categoryId: "aaabbb"){</span></span><br><span class="line"><span class="string"> nodes{</span></span><br><span class="line"><span class="string"> title</span></span><br><span class="line"><span class="string"> }</span></span><br><span class="line"><span class="string"> }</span></span><br><span class="line"><span class="string"> }</span></span><br><span class="line"><span class="string"> }"""</span></span><br><span class="line"> }</span><br><span class="line"> url = <span class="string">'https://api.github.com/graphql'</span></span><br><span class="line"></span><br><span class="line"> r = requests.post(url, headers=header, data=json.dumps(data))</span><br><span class="line"> <span class="keyword">if</span> r.status_code == <span class="number">200</span>:</span><br><span class="line"> discussions = r.json()</span><br><span class="line"></span><br><span class="line"> discussions = discussions[<span class="string">"data"</span>][<span class="string">"repository"</span>][<span class="string">"discussions"</span>][<span class="string">"nodes"</span>]</span><br><span class="line"></span><br><span class="line"> discu_list = []</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> discussions:</span><br><span class="line"> discu_list.append(i[<span class="string">"title"</span>])</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> post <span class="keyword">in</span> postlist:</span><br><span class="line"> <span class="keyword">if</span> currentYear <span class="keyword">not</span> <span class="keyword">in</span> post:</span><br><span class="line"> <span class="keyword">continue</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> post <span class="keyword">not</span> <span class="keyword">in</span> discu_list:</span><br><span class="line"> data = {</span><br><span class="line"> <span class="string">'query'</span>: <span class="string">"""mutation{</span></span><br><span class="line"><span class="string"> createDiscussion(input: {repositoryId: "%s", categoryId: "%s", body: "%s", title: "%s"}) {</span></span><br><span class="line"><span class="string"> discussion {</span></span><br><span class="line"><span class="string"> id</span></span><br><span class="line"><span class="string"> }</span></span><br><span class="line"><span class="string"> }</span></span><br><span class="line"><span class="string"> }"""</span> % (repo_id, category_id, <span class="string">'blog url'</span> + post, post)</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> r = requests.post(url, headers=header, data=json.dumps(data))</span><br><span class="line"> <span class="keyword">if</span> r.status_code == <span class="number">200</span>:</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">f"初始化对应讨论! <span class="subst">{post}</span>"</span>)</span><br><span class="line"> <span class="built_in">print</span>(r.text)</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> filelist = []</span><br><span class="line"> postlist = []</span><br><span class="line"> addDiscussion()</span><br></pre></td></tr></table></figure><p>学了一下新玩意…… <code>graphql</code> 似乎比基于 <code>REST</code> 形式的更强大一点?</p><p>其中是根据对应的 <code>access token</code> 进行部署,所以要为对应部署的 <code>access token</code> 指定 <code>discussions</code> 权限……</p><p>注意其中的 <code>currentYear</code> 那里,因为只获取了最新的 <code>100</code> 条数据,要是文章数据超过 <code>100</code> 条的话或许会重复创建?所以就仅仅只判断当年的文章了,第一次部署时请去掉此判断。除非你想当超时空战士为以往年份写文章或者是一年能写 <code>100</code> 篇文章的人,那么此逻辑应该没问题……吧。</p><p>是为了 <code>GitHub Actions</code> 准备的,不知道是什么的话可以看<a href="../../03/Github-Actions-%E6%B5%85%E5%B0%9D%E8%BE%84%E6%AD%A2">这</a>。</p><h2 id="最后"><a href="#最后" class="headerlink" title="最后"></a>最后</h2><p>最后,欢迎你能访问到我这荒岛,请友善评论哦~</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
<tag> 建站 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>2021 总结</title>
|
||
<link href="/2021/12/2021-%E6%80%BB%E7%BB%93/"/>
|
||
<url>/2021/12/2021-%E6%80%BB%E7%BB%93/</url>
|
||
|
||
<content type="html"><![CDATA[<p>是时候写个总结了。</p><span id="more"></span><p>似乎自己也不是一个喜欢总结的人呢,年终,对我来说也没什么大不了的吗。</p><p>直到网上冲浪,发现那些写总结的人, 2013、2014……一直写到 2020 ,这才发现写总结是一个好习惯,毕竟不写的话,似乎就记不起这一年发生了什么有意义的事,就像 ADHD 一样,像是人生蒙上了一层面纱。</p><p>至少我意识到了这层面纱,虽然还未产生大改变,但至少能够去努力改变了。</p><h1 id="开学前"><a href="#开学前" class="headerlink" title="开学前"></a>开学前</h1><h2 id="考试"><a href="#考试" class="headerlink" title="考试"></a>考试</h2><p>这一年前四个月都是在不努力地备考,把现在的我拉到那时候,会让结果变得更好吗?非常怀疑,在备考时,印象深刻的是每天早上起来,或骑单车或走路两三公里到家附近的市场吃早餐。不得不说运动确实能让心情变好。考试临近前,压力日渐增加,现在想想,似乎不是很必要,因为很大程度都来自没有学习,很多知识连过都没过一遍,摆烂也不摆彻底,这样当然会对考试焦虑了。</p><p>不过考试确实很简单……百分之八十都是基础题,但我还只是比那些工作没时间备考的人好上一些罢了,混到了个不上不下的位置,进了一所不上不下的学校。或许等来年一月放假了,我在来写一写这不上不下学校的总结吧。</p><h2 id="驾校时光"><a href="#驾校时光" class="headerlink" title="驾校时光"></a>驾校时光</h2><p>考完试后就是四月末了,老妈很想很想把我踢到工厂打工,可是我虚晃一枪说还是在家附近找吧。但是最后被我老爸强制报了个驾校……那段时间,很怕晚上七八点教练打电话过来,意味着要早起。当然,每隔两三天才学半天确实轻松得很,但是我就是受不了这种游离不定的任务。</p><p>当然也有好处,就是(被迫地)见识了不少人</p><ul><li>在五金店工作的中年老妇女,科一那会还跟我抱怨说考试时一车小年轻就她年龄大,还遭他们嘲讽,结果反而是她最快过的,其他人或多或少都得重考。</li><li>家里有矿的啃老少年,不过听他说他父母也是啃上辈老,毕业了就是在家里打机,偶尔出来学下车。两个人轮流练车的时候,聊了许多天,喜欢玩些主流 3A ,是个 P 社玩家,对当今政党很是嘲讽,之后还说听到拆迁的消息后,他父母连夜在那篇地区建了很多平房……非常有躺平的底气呢。</li><li>高考结束后就学车的准大学生,是一中出来的,想跟他攀谈几句,但是我经常感到一种若有若无地忽视感。优生的底气、自信?说不上来……但是喜欢德语,还喜欢听广播,我听到后,问了电台名字后打开 <a href="radio.garden">Radio garden</a> 放给他听了。</li><li>父母是牙医有钱出国留学德国的少年(不知道和上位处在一起没有,或许他们两位能就德语水平过几招),考试前在车上问东问西,考场、地点、准备……像是在马达突突一样。这是什么?留学症候群吗?外国没有国内含蓄,不问就没办法生存?</li><li>少女一号,似乎是第一次挂了,开学临近只好去上学,趁着假期再来考一遍……</li><li>少女二号,似乎是第一次挂了,开学临近只好去上学,趁着假期再来考一遍……(好像不是)</li></ul><p>摸鱼练习完之后就是,上了!</p><ul><li>科一考试熬了一晚,过了。</li><li>科二压力也是压力大的不行,很怕挂了要等到来年,麻烦……为此还破功下载了抖音,看一些驾校的考场实录,迫真赛博备考。最后是惊险过了,途中曲线行驶后迟迟没听到后续提示音,还以为是直接挂了,之后开回起点探出头询问,直接被批头不要过窗!重置了当次考试,所幸不用重头再考。</li><li>科三看考场就惊了,泥头车和电动车齐飞,这是提前模拟以后的恶劣环境吗?路线还有三条,有点记不清,只好再次赛博备考了。所幸考试时前面也有相同路线的考试车,能够抄答案……慢慢吞吞的考试途中还因为脚踩酸了让车后溜了一次,非常惊险,好在也是过了。不过同行的女生一号就每过,甚至连路都没上,似乎是安全带和考前检查的问题……考完之后马上把抖音卸里,很怕陷阱这种强算法产品的陷阱里。</li><li>然后当天就备考科四了,我没想到会这么快,还以为能下星期呢。可是教练说再约就暑假了,那么只好为了不麻烦而先麻烦自己熬夜上了。不过我觉得我也不会平常打开去练,就算有一星期时间,当天肯定又是熬夜战士。然后去考场看个车祸视频训导几下就考了,过了。等接送时,海龟和我、女生二号聊天(默哀几秒女生一号)。海龟说他又签了日本的研究生,要去那读了。我想着,语言天才吗?两个小语种,学术精力都要分给语言学习上了吧,还是说只是镀金而已?临行前海龟还让我们击了个掌庆祝考过了。非常默契都没提出加联系方式的请求,或许大家都知道不会产生更多联系了,就此别过吧!</li></ul><h1 id="开学后"><a href="#开学后" class="headerlink" title="开学后"></a>开学后</h1><p>之后就是摸鱼摸到九月份开学了,这部分……似乎是单独拆来写了。</p><h1 id="年末"><a href="#年末" class="headerlink" title="年末"></a>年末</h1><p>记得起的就是购买的东西了,腾讯云服务器,网易云一年的会员, Typora ……</p><p>然后就是冲浪看了很多牛人的博客,冒出很多自愧不如的情感,那么多努力,我就有那么多惆怅……直到十二月八号下午开始发低烧,还以为是感冒,就没太在意,但是晚上就是不停肚子里咕噜响,如同吃下的是玻璃一样,每隔几小时就得去厕所……</p><p>到了十二月九号生日这天,都是处于非常沮丧的状态……对于生日的纪念,就是向<a href="https://www.foreverblog.cn/">十年之约</a>项目发起了一个申请(没想到三十一号九点才堪堪通过)。在此,还是感谢我自己,给自己送了这样一份礼物。<strong>身体最重要</strong>,哪怕怎么样,也不能得病状态下了才知道无病无痛的状态是多么美好……</p><p>虽然是这么说,但是期末月末还是破功了,连续三个课程设计,还是把我逼到了平均凌晨三点才睡的地步,不过至少不用上课,觉还能找补几下……所以,<strong>事情还是每天做一点好</strong>,死线战士可不是什么美好的事儿……</p><h1 id="总结之总结"><a href="#总结之总结" class="headerlink" title="总结之总结"></a>总结之总结</h1><p>似乎没有做什么,我有好好磨练自己技术吗?有多读几本书吗?我有好好对待自己身体吗?</p><p>似乎都要打上一个问号,甚至是一个惊叹号,不过,希望来年能够多往面纱上多吹几口气吧,就算吹不掉,也能让面纱舞动起来……赏心悦目几分。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 随笔 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 随笔 </tag>
|
||
|
||
<tag> 年终总结 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>二一年十二月份梦记</title>
|
||
<link href="/2021/12/%E4%BA%8C%E4%B8%80%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E4%BB%BD%E6%A2%A6%E8%AE%B0/"/>
|
||
<url>/2021/12/%E4%BA%8C%E4%B8%80%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E4%BB%BD%E6%A2%A6%E8%AE%B0/</url>
|
||
|
||
<content type="html"><![CDATA[<h2 id="12-4"><a href="#12-4" class="headerlink" title="12.4"></a>12.4</h2><p>中 普</p><h3 id="内蒙大学"><a href="#内蒙大学" class="headerlink" title="内蒙大学"></a>内蒙大学</h3><p>到了内蒙古的一座大学里,似乎也有不少的初高中同学也一起去了……在宿舍楼晃悠,来到一层奇怪的楼层,给我的感觉像是在木桩里面。</p><h2 id="12-6"><a href="#12-6" class="headerlink" title="12.6"></a>12.6</h2><p>晚 普</p><h3 id="谜途镇"><a href="#谜途镇" class="headerlink" title="谜途镇"></a>谜途镇</h3><p>似乎在实况主新的实况里,玩着一个奇怪的解密游戏,最后又是老套的逃出来了其实一直没逃出来的老套结局……</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>为 Matrix 加入自定义推送功能</title>
|
||
<link href="/2021/11/%E4%B8%BAMatrix%E5%8A%A0%E5%85%A5%E6%8E%A8%E9%80%81%E5%8A%9F%E8%83%BD/"/>
|
||
<url>/2021/11/%E4%B8%BAMatrix%E5%8A%A0%E5%85%A5%E6%8E%A8%E9%80%81%E5%8A%9F%E8%83%BD/</url>
|
||
|
||
<content type="html"><![CDATA[<p><code>Matrix</code> 是一个开源的聊天协议,和 <code>XMPP</code> 一样的联邦制设计也保证了像电子邮件一样的通信便捷。</p><span id="more"></span><p>好的地方很多,但最明显坏处就是推送了,对于即时通信来说,没有推送是非常大的不便……虽然搭建 <code>Matrix</code> 的应用 <code>Synapse</code> 配置文件启用邮箱的话可以启用邮件通知,不过鉴于邮件时效性也不是很高,所以需要个其他的推送手段。(谷歌市场下的 <code>Element</code> 附带了谷歌的消息推送,不过很遗憾在国内处于残废状态。)</p><p>所幸 <code>Synapse</code> 自带的 <a href="https://spec.matrix.org/v1.1/client-server-api/">API</a> 可以定义推送规则,定义后帐号收到消息,服务器就可以将消息以 <code>JSON</code> 的形式推送到自定义的地址,来个曲线救国。</p><h1 id="Gotify"><a href="#Gotify" class="headerlink" title="Gotify"></a>Gotify</h1><p>推送用到的工具为 <code>Gotify</code> ,特点是使用 <code>GO</code> 编写,高效快速,不过缺点就是安卓得常驻后台接收推送,不过至少要比腾讯全家桶吃的电要少。</p><h2 id="下载"><a href="#下载" class="headerlink" title="下载"></a>下载</h2><p>去 <a href="https://github.com/gotify/server/releases">Releases </a>处找到对应版本的下载链接,解压到<code>/opt/gotify/</code>。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">unzip gotify-file -d /opt/gotify/</span><br></pre></td></tr></table></figure><p>然后下载配置样板。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> /etc/gotify</span><br><span class="line">wget -O /etc/gotify/config.yml https://raw.githubusercontent.com/gotify/server/master/config.example.yml</span><br></pre></td></tr></table></figure><p>编辑 <code>/etc/gotify/config.yml</code>。将 <code>port</code> 改为没有占用的端口, <code>name</code> 和 <code>pass</code> 是管理员的用户名和密码。</p><h1 id="Nginx-反代"><a href="#Nginx-反代" class="headerlink" title="Nginx 反代"></a>Nginx 反代</h1><p>在 <code>nginx</code> 的新建一个虚拟主机并在配置文件增加以下内容:</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">location</span> / {</span><br><span class="line"> <span class="attribute">proxy_pass</span> http://localhost:8080;</span><br><span class="line"> <span class="attribute">rewrite</span><span class="regexp"> ^/gotify(/.*)</span> <span class="variable">$1</span> <span class="literal">break</span>;</span><br><span class="line"> <span class="attribute">proxy_http_version</span> <span class="number">1</span>.<span class="number">1</span>;</span><br><span class="line"></span><br><span class="line"> <span class="comment"># Ensuring it can use websockets</span></span><br><span class="line"> <span class="attribute">proxy_set_header</span> Upgrade <span class="variable">$http_upgrade</span>;</span><br><span class="line"> <span class="attribute">proxy_set_header</span> Connection <span class="string">"upgrade"</span>;</span><br><span class="line"> <span class="attribute">proxy_set_header</span> X-Real-IP <span class="variable">$remote_addr</span>;</span><br><span class="line"> <span class="attribute">proxy_set_header</span> X-Forwarded-For <span class="variable">$proxy_add_x_forwarded_for</span>;</span><br><span class="line"> <span class="attribute">proxy_set_header</span> X-Forwarded-Proto http;</span><br><span class="line"> <span class="attribute">proxy_redirect</span> http:// <span class="variable">$scheme</span>://;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><blockquote><p>proxy_set_header Connection “upgrade”; 这一栏不要漏了……要不然开启 WS 时会报错……</p></blockquote><h1 id="设置服务"><a href="#设置服务" class="headerlink" title="设置服务"></a>设置服务</h1><p>新建并编辑 <code>/etc/systemd/system/gotify.service</code>。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">[Unit]</span><br><span class="line">Description=gotify service</span><br><span class="line">After=network.target</span><br><span class="line">Wants=network.target</span><br><span class="line"></span><br><span class="line">[Service]</span><br><span class="line">Type=simple</span><br><span class="line">PIDFile=/run/gotify.pid</span><br><span class="line">WorkingDirectory=/opt/gotify</span><br><span class="line">ExecStart=/opt/gotify/gotify-file</span><br><span class="line">RestartPreventExitStatus=23</span><br><span class="line">Restart=always</span><br><span class="line">RestartSec=10s</span><br><span class="line"></span><br><span class="line">[Install]</span><br><span class="line">WantedBy=multi-user.target</span><br></pre></td></tr></table></figure><p>然后开启服务并设置成开机启动。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">systemctl start gotify</span><br><span class="line">systemctl enable gotify</span><br></pre></td></tr></table></figure><p>没有报错的话就可以打开 <code>Nginx</code> 里所设置的域名进入管理页面了,(改密码)之后就可以新建应用了,拿到推送令牌,就可以向服务器设置推送规则了。</p><h2 id="设置推送"><a href="#设置推送" class="headerlink" title="设置推送"></a>设置推送</h2><p>在官方文档里,通过 /_matrix/client/v3/pushers/set <code>API</code> 就可以设置推送规则了,通过 <code>curl</code> ,或者其他方式向服务器对应地址发送 <code>POST</code> 请求即可使用。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl <span class="string">'https://server_url/_matrix/client/r0/pushers/set'</span> -H <span class="string">'Authorization: Bearer access_token'</span> -H <span class="string">'Content-Type: application/json'</span> -X POST -d <span class="string">'{"lang": "en","kind": "http","app_display_name": "Gotify","device_display_name": "Gotify","pushkey": "Gotify-PushKey","app_id": "zh.xxx.gotify","data": {"url": "https://Push_url/_matrix/push/v1/notify","format": "full_event"}}'</span></span><br></pre></td></tr></table></figure><p>详细说明请查阅官方 <a href="https://spec.matrix.org/v1.1/client-server-api/#post_matrixclientv3pushersset">文档</a> , 其中 <code>access_token</code> 可以在应用里拿到,<code>pushkey </code> 设置成 <code>Gotify-PushKey</code> 的样子是为了后续处理方便……现阶段推送地址必须包含 <code>/_matrix/push/v1/notify </code> 路径,否则会报错,所以不得不进行额外处理了……</p><h2 id="接收推送"><a href="#接收推送" class="headerlink" title="接收推送"></a>接收推送</h2><p>服务器设置推送规则之后就会向对应地址发送数据了,因为推送地址现阶段必须包含 <code>/_matrix/push/v1/notify </code> 路径,所以不得不再设置一个接收服务然后进行处理了。</p><p>接下来使用 <code>python</code> 的 <code>flask</code> 框架简单搭一个服务,首先先安装环境。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">pip3 install flask</span><br><span class="line">pip3 install flask-apscheduler</span><br></pre></td></tr></table></figure><p>然后是代码:</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> json</span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">import</span> datetime</span><br><span class="line"></span><br><span class="line"><span class="keyword">from</span> flask <span class="keyword">import</span> Flask, jsonify, request</span><br><span class="line"><span class="keyword">from</span> flask_apscheduler <span class="keyword">import</span> APScheduler</span><br><span class="line">app = Flask(__name__)</span><br><span class="line">scheduler = APScheduler()</span><br><span class="line"></span><br><span class="line">scheduler.start()</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">push_notification</span>(<span class="params">push_data</span>):</span><br><span class="line"> <span class="keyword">if</span> push_data[<span class="string">"push_way"</span>] == <span class="string">'Gotify'</span>:</span><br><span class="line"> resp = requests.post(<span class="string">f'https://push.xxx.xxx/message?token=<span class="subst">{push_data[<span class="string">"push_token"</span>]}</span>'</span>, json={</span><br><span class="line"> <span class="string">"message"</span>: <span class="string">f'「<span class="subst">{push_data[<span class="string">"sender"</span>]}</span>」发送了消息给你。'</span>,</span><br><span class="line"> <span class="string">"priority"</span>: <span class="number">8</span>,</span><br><span class="line"> <span class="string">"title"</span>: <span class="string">"新消息!"</span></span><br><span class="line"> })</span><br><span class="line"> <span class="built_in">print</span>(resp)</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"> <span class="keyword">if</span> push_data[<span class="string">"push_way"</span>] == <span class="string">'Bary'</span>:</span><br><span class="line"> <span class="keyword">try</span>:</span><br><span class="line"> response = requests.post(</span><br><span class="line"> url=<span class="string">"https://api.day.app/push"</span>,</span><br><span class="line"> headers={</span><br><span class="line"> <span class="string">"Content-Type"</span>: <span class="string">"application/json; charset=utf-8"</span>,</span><br><span class="line"> },</span><br><span class="line"> data=json.dumps({</span><br><span class="line"> <span class="string">"body"</span>: <span class="string">f'「<span class="subst">{push_data[<span class="string">"sender"</span>]}</span>」发送了消息给你。'</span>,</span><br><span class="line"> <span class="string">"device_key"</span>: push_data[<span class="string">"push_token"</span>],</span><br><span class="line"> <span class="string">"title"</span>: <span class="string">"新消息!"</span>,</span><br><span class="line"> <span class="string">"category"</span>: <span class="string">"category"</span>,</span><br><span class="line"> <span class="string">"sound"</span>: <span class="string">"minuet.caf"</span>,</span><br><span class="line"> })</span><br><span class="line"> )</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">'Response HTTP Status Code: {status_code}'</span>.<span class="built_in">format</span>(</span><br><span class="line"> status_code=response.status_code))</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">'Response HTTP Response Body: {content}'</span>.<span class="built_in">format</span>(</span><br><span class="line"> content=response.content))</span><br><span class="line"> <span class="keyword">except</span> requests.exceptions.RequestException:</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">'HTTP Request failed'</span>)</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># Our route that will receive the webhooks from Duffel's servers</span></span><br><span class="line"><span class="meta">@app.route(<span class="params"><span class="string">'/_matrix/push/v1/notify'</span>, methods=[<span class="string">'POST'</span>]</span>)</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">hello_world</span>():</span><br><span class="line"> push_data = {}</span><br><span class="line"> event = <span class="literal">None</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">try</span>:</span><br><span class="line"> event = request.json</span><br><span class="line"> <span class="built_in">print</span>(event)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">except</span>:</span><br><span class="line"> <span class="keyword">return</span> jsonify(success=<span class="literal">False</span>)</span><br><span class="line"></span><br><span class="line"> <span class="comment"># Handle the event</span></span><br><span class="line"> <span class="keyword">if</span> event[<span class="string">"notification"</span>][<span class="string">"type"</span>] == <span class="string">'m.room.message'</span> <span class="keyword">or</span> event[<span class="string">"notification"</span>][<span class="string">"type"</span>] == <span class="string">'m.room.encrypted'</span>:</span><br><span class="line"> app_id = event[<span class="string">"notification"</span>][<span class="string">"devices"</span>][<span class="number">0</span>][<span class="string">"app_id"</span>]</span><br><span class="line"> push_data[<span class="string">"push_way"</span>], push_data[<span class="string">"push_token"</span>] = event[<span class="string">"notification"</span>][<span class="string">"devices"</span>][<span class="number">0</span>][<span class="string">"pushkey"</span>].split(<span class="string">'-'</span>)</span><br><span class="line"> push_data[<span class="string">"sender"</span>] = event[<span class="string">"notification"</span>][<span class="string">"sender_display_name"</span>]</span><br><span class="line"></span><br><span class="line"> scheduler.add_job(</span><br><span class="line"> func=push_notification,</span><br><span class="line"> args=(push_data,),</span><br><span class="line"> <span class="comment"># trigger="date",</span></span><br><span class="line"> next_run_time=datetime.datetime.now() + datetime.timedelta(seconds=<span class="number">25</span>),</span><br><span class="line"> <span class="built_in">id</span>=app_id,</span><br><span class="line"> replace_existing=<span class="literal">True</span>,</span><br><span class="line"> )</span><br><span class="line"></span><br><span class="line"> <span class="built_in">print</span>(<span class="string">'✅add push job!'</span>)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> event[<span class="string">"notification"</span>][<span class="string">"type"</span>] == <span class="literal">None</span> <span class="keyword">and</span> event[<span class="string">"notification"</span>][<span class="string">"id"</span>] == <span class="string">''</span>:</span><br><span class="line"> app_id = event[<span class="string">"notification"</span>][<span class="string">"devices"</span>][<span class="number">0</span>][<span class="string">"app_id"</span>]</span><br><span class="line"> <span class="keyword">try</span>:</span><br><span class="line"> scheduler.remove_job(<span class="built_in">id</span>=app_id)</span><br><span class="line"> <span class="keyword">except</span>:</span><br><span class="line"> <span class="keyword">pass</span></span><br><span class="line"> <span class="built_in">print</span>(<span class="string">'✅remove push!'</span>)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> jsonify(success=<span class="literal">True</span>)</span><br></pre></td></tr></table></figure><p>然后用命令 <code>FLASK_ENV=development FLASK_RUN_PORT=4567 FLASK_APP=webhook.py flask run</code> 就可启用。再然后再用 <code>Nginx</code> 反代一下 <code>4567</code> 端口就行了,因为 <code>Synapse</code> 默认禁止本机访问,为了规范一点就另外开个站点接收请求吧……</p><p>基本逻辑就是接收 <code>JSON</code> 拿到发送者名称和推送令牌,判断是哪项服务,然后等待三十秒推送到对应的应用令牌上去,期间要是判断用户已经阅读了消息,就移除推送作业。</p><p>到此无意外的话,应该就能正常推送了,麻烦……希望以后能够有更友好便捷的方式吧。</p><h1 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h1><ol><li><a href="https://blog.mjyai.com/2021/02/24/raspberry-pi-gotify/">在树莓派上部署消息推送软件Gotify</a></li></ol>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
<tag> Matrix </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>二一年十一月份梦记</title>
|
||
<link href="/2021/11/%E4%BA%8C%E4%B8%80%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E6%A2%A6%E8%AE%B0/"/>
|
||
<url>/2021/11/%E4%BA%8C%E4%B8%80%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E6%A2%A6%E8%AE%B0/</url>
|
||
|
||
<content type="html"><![CDATA[<p>好久没记了,该记了!</p><span id="more"></span><h2 id="11-8"><a href="#11-8" class="headerlink" title="11.8"></a>11.8</h2><p>中 普</p><h3 id="小饼干"><a href="#小饼干" class="headerlink" title="小饼干"></a>小饼干</h3><p>似乎是 Steam 的活动,请发布已久的游戏制作发布 2.0 版。<br>然后我在逛油管的时候,发现一个六七块的游戏也发布了 2.0 版,活动页面展示了一块饼干,说是票选奖励。点了,然后就饼干就突兀得到了我手里,放到嘴里,还是奶香味的。<br>最后的念头是,不应该直接吃得,要不然网页被人劫持了不安全怎么办……</p><h2 id="11-16"><a href="#11-16" class="headerlink" title="11.16"></a>11.16</h2><p>晚 普<br>弹射世界?出门旅行?……</p><h2 id="11-19"><a href="#11-19" class="headerlink" title="11.19"></a>11.19</h2><p>晚 普</p><h3 id="校区"><a href="#校区" class="headerlink" title="校区"></a>校区</h3><p>梦到了在其他校区上课(现实中没有)……然后每天走路超级累。</p><h2 id="11-20"><a href="#11-20" class="headerlink" title="11.20"></a>11.20</h2><p>晚 普</p><h3 id="迷失快递"><a href="#迷失快递" class="headerlink" title="迷失快递"></a>迷失快递</h3><p>收到了快递,叫我去快递站4区去拿,我在快递站转悠了半天,并没有找到4区在哪……甚至找到开快递站人房间里去了,似乎是他们女儿的桌子,上面还摆着作业。<br>迫不得已我就找工作人员去了,她拿着手机,一边问一边点着手机,指了个方向(?),之后我就找着快递了?</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>Second chance (Ongoing)</title>
|
||
<link href="/2021/09/Second-chance/"/>
|
||
<url>/2021/09/Second-chance/</url>
|
||
|
||
<content type="html"><![CDATA[<p>如果可以的话,当然是想在象牙塔里一直待着啦。</p><span id="more"></span><p>虽然这个选项并不是最好的,不过,有就行了!</p><p>在开学前之前拿到驾照后,就坐在家里苦等了,虽然没有必要产生什么情绪,但随着开学时间来临,状态还是越发不对劲了。四五才睡,然后睡到中午十一点半……报到那天晚上好像也是五点睡,可能家里实在待到厌烦了吧……</p><p>最终还是要出发,从家里开车到新学校要三个小时、全程高速两百三十公里,过路费都要一百三十元了,真不敢想象回去还要怎么回。</p><p>到学校后,因为防疫的原因(2021 了,新冠什么时候死啊?),随行人员不能入校,所以只能我自己进去了,签到、送一张卡(冲业绩)、安装国家反诈 APP (冲业绩)。其中反诈的还人脸识别一直失败,看着民警苦哈哈的表情,看起来我这份业绩是拿不到喽。</p><p>而且因为不是女生,所以并没有帮我提行李(据哥所说,我后一位的女生,就有三位“志愿者”帮忙去提行李……)。但至少有校内小白车接送,从校门口到所在宿舍,驾车也要走五分钟,真是漫长。以后从宿舍走到校门口那可真是不好走……</p><h2 id="宿舍"><a href="#宿舍" class="headerlink" title="宿舍"></a>宿舍</h2><p>两星期前微信就开放了选宿舍系统,到了开放的时间被几千人狂暴鸿儒,直接宕机。我已经看到了选课时的情景了……</p><p>过了四五个小时才想起来还在选宿舍呢,发现终于可以打开了,虽说可以自己组团选择,不过并没有认识的人,所以只能自己瞎猜了。最后选择了个看对眼的宿舍号就行了,保佑舍友能够合得来吧。</p><p>最终提者行李来到宿舍前,已经十一点二十了,但我还是第一个来的。妈打电话催促我安顿好了就出去吃饭,明明饭堂也开着,我也待在学校里了……但毕竟家里人是请假送我过来的,不能这么不给面子,所以只能在楼下先买把锁把行李先锁住然后吃完饭再说了。</p><h2 id="骑行"><a href="#骑行" class="headerlink" title="骑行"></a>骑行</h2><p>开车都要五分钟的距离,加上大中午的太阳,自己走出去怕是要昏死在路旁……这时我发现门口堆着很多的共享电动车,纠结了两分钟,还是走过去准备尝试尝试了。扫码打开,很好,不用学号什么的,搜索设备……绑定……解锁,然后我就懵了,没骑过啊,怎么启动呢,又纠结了一分钟,推者到志愿者服务处问问怎么启动。“坏了吧”,“你再找一辆看看吧。”得到了这样的回答,我点了归还车辆,直接就弹出请付款两元了,才走了 0.01 公里啊……想点一下申诉,不过还是打算再试一次再说,再找了一辆,又摸索了一番。突然顿悟了,摩托车的油门是手柄这啊,那电动车也是啊!终于悟了……</p><p>「图片占位」</p><p>前两个月骑单车的经验还在,所以电动车能够掌握平衡,没有摔倒,骑到校门口,1.9 公里,用时七分钟,没有超过起步价,两公里两块钱,感觉还是奢侈了……</p><h2 id="宿舍-again"><a href="#宿舍-again" class="headerlink" title="宿舍 again"></a>宿舍 again</h2><p>到校门口,找附近的饭店准备吃饭,看着菜单,发现一个番茄炒鸡蛋 30 块,就瞬间无语了……而且等上菜也差不多等了二三十分钟,看起来不愁客源就是可以为所欲为啊。</p><p>端上菜之后,装菜碟比起家附近大了一些,好吧,至少没有那么坑……吃罢,就该回学校了。</p><p>继续花了两块钱骑到宿舍,上来之后发现还是没有来人,拿着行李不知道要不要铺床,因为床位并没有标明,怕直接占位会起冲突……</p><p>大概十分钟后,终于来人了,寒暄了之后,他提出想不想跟我换,我拒绝了,因为我想选的位置和专科时的位置选一样的,有种熟悉感。他顿时有点泄气,说是这位置选的靠门不好,以后开门都得让他来开了,之后就一边回着微信消息一边出去了。</p><p>后来我才了解到,他原来专科也是在本校的,老油条了,原本打算跟熟悉的人选同一个宿舍,但是被狂暴鸿儒的时间卡到了,之后回过神来就发现已经自动选了……真是悲惨呢。</p><p>待了二十分钟后,看着来校注意事项的床单,发现讲到安装网线的事,随后打算问一下学弟(这学弟是我当初加咨询群后主动加上来的,一开始叫我学弟,之后发现我算 19 界的立马改口叫我学长了,真是谐。),学弟推了两个微信号给我说叫我问问。其中一个没有回应,另一个直接说我认错了,业务范围里管打印、相片,不管网线……好吧,学弟看来没靠住,只好按照传单上到图书馆附近找找看了……</p><h2 id="网络,生存之本"><a href="#网络,生存之本" class="headerlink" title="网络,生存之本"></a>网络,生存之本</h2><p>看了几分钟全景地图,发现图书馆就是校门口直接再走过去就行了,校园看起来只是长,但并不怎么绕啊。</p><p>减而来到图书馆,稍微绕了一下就找到了办理点的帐篷,马上就被热情的推销员按住了,套餐就只有四个,第一是电话卡,第二是 4M , 第三是 20M 250块 五个月超过续费 30块一月,第四是 50M 300块 五个月超过续费 40 块一月,好吧,想着能用一年,而且还作为重度网虫,就直接选择最后一档了,还送一张电信流量卡,39 块 60 个 G ,预存一百块,交了钱还要等待安装,那就用这张卡共享热点应急了。</p><p>然后打算徒步走回去,测测两公里要走多久,记了会时间,发现差不多是二十分钟,还是挺折磨人的。</p><p>回去之后发现又有一位人来宿舍了,将近一米八的身高,看起来十分体育生,说话的语气十分像一位高中同学……</p><h2 id="班会,象牙塔蒙尘之时"><a href="#班会,象牙塔蒙尘之时" class="headerlink" title="班会,象牙塔蒙尘之时"></a>班会,象牙塔蒙尘之时</h2><p>跟两位舍友寒暄了几下,发现各位的 Steam 游戏都在100+ ,嗯,至少知道 Steam 就是大胜利了,至少保底的共同话题有了。</p><h3 id="美好的一天从账单结束"><a href="#美好的一天从账单结束" class="headerlink" title="美好的一天从账单结束"></a>美好的一天从账单结束</h3><p>之后班群通知,晚上要开第一次班会,让我们准备准备,在打算一起吃饭的时候,发现信用卡传来消息 AWS 扣费 65 块。顿时急了,一查发现是我多开了一个套餐,超过了免费套餐的用量,急忙之下关闭了帐号,然后发现关闭帐号之后扣费还没停,然后控制面版在关闭状态下还打不开,只好用贫瘠的英语写了几句开了张工单……</p><p>免费用户处理工单并不块,所以只好先吃饭了,饭堂听老油条说,一楼就比较平价,二楼就是奢侈之地了。不过先从一楼开始吧,两个菜 7.5~8 块,三个菜就要上到十多块。感觉价格似乎并没有体现出这城市的偏远呢。</p><h3 id="蒙尘象牙塔"><a href="#蒙尘象牙塔" class="headerlink" title="蒙尘象牙塔"></a>蒙尘象牙塔</h3><p>班会,并没有见到辅导员,只有差不多同岁的助教在主导,前面巴拉巴拉的讲学校的设施,快递、食堂、校医室等,不得不感叹这城市地价是比较便宜,比起以前的学校是建的比较大。</p><p>之后,就是惯例的自我介绍时间了,之前还在跟舍友聊,都算是大三的人了,还要自我介绍吗,也太老套了,没想到还是没出套。</p><p>介绍中有几位特别多话,别人三十秒结束的,几位能涨到三五分钟,听着话就是,参加过竞赛、堕落在家、欢迎来玩、我也领导过百人团队——确实,上位者占用大家时间这一点真的很上位者!</p><p>不得不感慨毕竟是会有社会上走过几年再读的人,让象牙塔也没那么洁白了,感慨感慨。</p><h3 id="晚"><a href="#晚" class="headerlink" title="晚"></a>晚</h3><p>之后就终于结束回去了,第四位舍友看起来是不存在了,三人宿舍,对于人际关系来说就比较好处了,但是代价就是生活成本提高了……</p><p>热水表最近似乎改成用手机蓝牙操控了,典型的高科技害人,我洗完澡关表还得湿漉漉的拿起手机操控吗?人洗澡不代表手机也跟着一起洗啊……理由是之前用卡很多人找不到充值入口,所以就改成蓝牙式的了,而且新生学号还没录入,所以出水绑定还没搞好,真是高科技害人不浅啊。</p><p>之后老油条说要跟以前的人打 LOL ,说可能会吵,也确实吵,处了半天后,倒是稍微了解一些了,口号是这一年就要浪!因为疫情原因有一年都没好好玩,所以这一年就该玩玩!爱好抽烟,也好在会出去抽,不外放抖音却又放 B 站,以前作为鼓手上过礼堂活动表演过,非常矛盾了属于是。感觉不应该叫老油条,应该叫 <strong>旧充</strong>,不是现充,是曾经是。</p><p>闹到一点多后,终于结束了,好在明天也不用上课,还能支持这么闹……</p><h2 id="Tomorrow"><a href="#Tomorrow" class="headerlink" title="Tomorrow"></a>Tomorrow</h2><p>早上睡到十点多,至少比在家早了,洗漱完毕后就该吃饭了,吃完饭回来看一下手机又该睡觉了,睡到三点多,敲门声想起,原来是网络安装工来了,说是安装工,结果确是报个帐号就完事了……这么简单的话,当初开通完直接发微信不就好了吗……</p><p>有线网用不了,但是无线网倒是用上了,校园网还是万恶的一帐号一终端机制,折腾了许久,终于还是当个冤大头去淘宝花两百买<strong>破解路由器了</strong>,虽然继续折腾似乎也能折腾出来,但是还是用钱买便利吧,时间应该花在更有价值的地方……</p><h3 id="图书馆,suki"><a href="#图书馆,suki" class="headerlink" title="图书馆,suki"></a>图书馆,suki</h3><p>晚上吃完饭,得知图书馆已经开了,打算去看看,减二出行,走到图书馆发现陈列摆设都很养眼,看得出来花了大价钱啊。</p><p>「图片占位」</p><p>不过天色以晚,加上问到借书需要学号新生没有之后,就回去了,等之后正式开学有学号了之后再来这里逛吧。</p><p>之后继续躺在床上摆烂到两三点,就睡了,结束了迷迷糊糊的一天。</p><h2 id="Tomorrowrow"><a href="#Tomorrowrow" class="headerlink" title="Tomorrowrow"></a>Tomorrowrow</h2><p>十一点醒来,吃中午饭,睡到三四点,摆烂到晚上十一二点,好,结束,明天就是正式上课了,希望能够体验好点,然后抢课能抢到,体育类型能抢到好点的,体侧不要对插班生执行,好了,结束吧大概——</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>搭建无污染的DNS服务</title>
|
||
<link href="/2021/07/%E6%90%AD%E5%BB%BA%E6%97%A0%E6%B1%A1%E6%9F%93%E7%9A%84DNS%E6%9C%8D%E5%8A%A1/"/>
|
||
<url>/2021/07/%E6%90%AD%E5%BB%BA%E6%97%A0%E6%B1%A1%E6%9F%93%E7%9A%84DNS%E6%9C%8D%E5%8A%A1/</url>
|
||
|
||
<content type="html"><![CDATA[<p>DNS 作为互联网世界的电话簿,重要性不言而喻。但是平常使用时,默认情况都是在裸奔,非常不安全,劫持和污染处处存在,所以搭建一个自己放心的 DNS 服务还是有必要的……</p><span id="more"></span><h2 id="准备"><a href="#准备" class="headerlink" title="准备"></a>准备</h2><ul><li>VPS (国内延迟低、国外无阻碍,看取舍吧。有条件也可以用树莓派之类的)</li><li>coredns(用于配置服务器的 Dns Over Tls 「dot」或 Dns Over Https 「doh」)</li><li>dnsmasq(用于转发 dns 请求)</li><li>pihole(可选,可以干掉追踪器和广告)</li><li>dnsproxy(将请求转发到其他加密 DNS 服务器上)</li></ul><h3 id="Coredns"><a href="#Coredns" class="headerlink" title="Coredns"></a>Coredns</h3><p>安卓自从 9 版本之后就内置了 Dns Over Tls 「dot」 配置,叫做 <code>私人DNS</code> ,这样进行配置就不用一个一个改 wifi 设定,同时还对蜂窝网络起效果,所以可以用 <code>CoreDNS</code> 来加密设备到服务器之间的请求……</p><p><code>CoreDNS</code> 同样使用 <code>Golang</code> 编写,仓库内提供了<a href="https://github.com/coredns/coredns/releases">可执行程序</a> 和 <a href="https://github.com/coredns/deployment/tree/master/systemd">systemd </a>文件,就算你的发行版没有提供 <code>CoreDNS</code> 的打包也可以自行写个服务。</p><p>配置如下:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">tls://.:853 {</span><br><span class="line"> tls /etc/coredns/cert.crt /etc/coredns/cert.key</span><br><span class="line"> forward . 127.0.0.1:53</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>作用是将 853 端口的 dot 请求转发到 53 端口所运行的服务上……</p><p>证书用 <code>certbot</code> 申请,偷偷摸摸的用 853 ,国内的云服务商应该不会注意到(毕竟盯着的是 443 和 80 端口的情况多一点……吧)</p><h3 id="Pihole-(可选)"><a href="#Pihole-(可选)" class="headerlink" title="Pihole (可选)"></a>Pihole (可选)</h3><p><code>pihole</code> 的好处就是网页的控制面板很好用,看着面板中的统计数据将有非常大的满足感,除此之外就没有啥了。</p><p>如果不是全新机子的话,还是用 <code>docker-compose</code> 安装吧,pihole 对于安装环境还是很挑剔的。</p><p>首先安装 <code>docker</code> 并启动,然后安装 <code>docker-compose</code> ,新建文件夹下新建 <code>docker-compose.yml</code> 文件,输入:</p><figure class="highlight dockerfile"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">version: <span class="string">"3"</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/</span></span><br><span class="line">services:</span><br><span class="line"> pihole:</span><br><span class="line"> container_name: pihole</span><br><span class="line"> image: pihole/pihole:latest</span><br><span class="line"> ports:</span><br><span class="line"> - <span class="string">"53:53/tcp"</span></span><br><span class="line"> - <span class="string">"53:53/udp"</span></span><br><span class="line"> - <span class="string">"67:67/udp"</span></span><br><span class="line"> - <span class="string">"宿主机想开放的端口:下方配置 WEB_PORT 所写/tcp"</span></span><br><span class="line"> environment:</span><br><span class="line"> TZ: <span class="string">'Asia/Shanghai'</span></span><br><span class="line"> WEBPASSWORD: <span class="string">'网页管理面板密码'</span></span><br><span class="line"> WEB_PORT: 需要开放的端口</span><br><span class="line"> PIHOLE_DNS_: <span class="string">'8.8.8.8'</span></span><br><span class="line"> ServerIP: <span class="string">'服务器 Ip'</span></span><br><span class="line"> <span class="comment">#VIRTUAL_HOST: '服务器访问管理面板域名'</span></span><br><span class="line"> <span class="comment">#DNSMASQ_USER: 'pihole'</span></span><br><span class="line"></span><br><span class="line"> volumes:</span><br><span class="line"> - <span class="string">'./etc-pihole/:/etc/pihole/'</span></span><br><span class="line"> - <span class="string">'./etc-dnsmasq.d/:/etc/dnsmasq.d/'</span></span><br><span class="line"> <span class="comment"># Recommended but not required (DHCP needs NET_ADMIN)</span></span><br><span class="line"> <span class="comment"># https://github.com/pi-hole/docker-pi-hole#note-on-capabilities</span></span><br><span class="line"> cap_add:</span><br><span class="line"> - NET_ADMIN</span><br><span class="line"> restart: unless-stopped</span><br></pre></td></tr></table></figure><p>注意 <code>ServerIP</code> 和 <code>VIRTUAL_HOST</code> 要写对,要不然会被禁止访问……</p><h4 id="列表"><a href="#列表" class="headerlink" title="列表"></a>列表</h4><p>装了 pihole 要发挥最大的作用就得找一个优质的屏蔽列表。</p><p>可以使用 <a href="https://github.com/privacy-protection-tools/anti-AD">anti-AD</a> ,能屏蔽国内大部分追踪器和广告地址,对于 pihole 的配置文件在 <a href="https://anti-ad.net/domains.txt">这</a> 。</p><h3 id="Dnsmasq"><a href="#Dnsmasq" class="headerlink" title="Dnsmasq"></a>Dnsmasq</h3><p>打开配置文件,更改 <code>port</code> 监听端口, <code>server</code> 写上游 dns 地址(<code>:</code> 要用 <code>#</code> 代替)。</p><p>无日志的 <code>dot</code> , <code>doh</code> 服务器一般都是在国外,一般延迟都很糟糕,所以对于国内的域名来说访问延迟将会很大。可以用 <code>Dnsmasq</code> 搭配 <a href="https://github.com/felixonmars/dnsmasq-china-list">dnsmasq-china-list</a> 项目,起到分流的作用,国内的常用域名送到国内的公共 DNS 服务解析,除此之外走加密的 DNS 服务。</p><p>不想装 <code>pihole</code> 的话,可以使用 <a href="https://github.com/privacy-protection-tools/anti-AD">anti-AD</a> 项目里的 <a href="https://anti-ad.net/anti-ad-for-dnsmasq.conf">anti-ad-for-dnsmasq.conf</a> 配置文件……</p><h3 id="Dnsproxy"><a href="#Dnsproxy" class="headerlink" title="Dnsproxy"></a>Dnsproxy</h3><p>转发到上游的 dot 、 doh 请求。</p><p>项目地址在 <a href="https://github.com/AdguardTeam/dnsproxy">这里</a> ,而且似乎没有提供服务文件,所以得用 <code>screen</code> 挂着了。</p><p>基本上能用的 dot 、 doh 服务器被 <a href="https://www.solidot.org/story?sid=67104">封</a> 的差不多了,能用的 只有 <code>Cloudflare</code> 的了,如果对无日志不在意的话可以用腾讯云的 <code>dnspod</code> 。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>到此,一个长长的 dns 链条就形成了:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">手机 -- dot 请求 --> coredns --> pihole -- 屏蔽或放行 --> dnsmasq -- 分流 --> 国内列表/列表外 --> dnsproxy --> dot/doh 服务器</span><br></pre></td></tr></table></figure><p>如果不贪恋 <code>pihole</code> 的控制面板的话,它的功能完全可以交给 <code>dnsmasq</code> 的。</p><p>只是没有控制面板的话,查误杀之类的事就会很麻烦……</p><p>搭好后应该使用抓包程序查看数据包,判断设备到服务器是否 套上了 tls ,服务器查看日志,看是否走了加密 dns 服务。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
<tag> DNS </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>在自己电脑上搭建 Peertube</title>
|
||
<link href="/2021/06/Peertube/"/>
|
||
<url>/2021/06/Peertube/</url>
|
||
|
||
<content type="html"><![CDATA[<p>Peertube 是一个自由、去中心化、邦联制运作的视频平台。</p><span id="more"></span><p>具体的介绍可以看视频:</p><iframe width="560" height="315" sandbox="allow-same-origin allow-scripts allow-popups" title="What is PeerTube?" src="https://framatube.org/videos/embed/9c9de5e8-0a1e-484a-b099-e80766180a6d?subtitle=zh" frameborder="0" allowfullscreen></iframe><p>比起搭建在托管服务器上,搭建在自己电脑上可以有诸多好处,最大的好处就是存储空间和管理的自由。当然服务的运行会随着电脑的休眠而暂停,要是想一直运行的话得不间断开机……(当然也可以使用树莓派、 NAS 的方式来做到不间断开机)</p><h2 id="准备"><a href="#准备" class="headerlink" title="准备"></a>准备</h2><h3 id="公网-IP"><a href="#公网-IP" class="headerlink" title="公网 IP"></a>公网 IP</h3><p>想要将自己电脑上的服务开放至整个互联网,公网 IP 是大前提,这一点请咨询运营商,有一些比较宽松,有一些就很扯皮了。不过珠三角地区电信运营商可以在宽带帐号 at 后加 <code>pub.</code>,重启猫后就是公网 IP 了。</p><p>当然,也可以使用 IPV6 ,不过 2021 年,IPV6 的普及率也不足百分之三十。就算自己的服务能够建起来,能访问的地区也是少数,所以还是满怀希望的等待吧! </p><p>拿到公网 IP 后,如果是用了 WIFI 模式或者有路由器的,得先在设备面板里启用端口映射,才能确保访问。</p><p>PS:国情所在,就算有了公网 IP ,也是封了 <code>80</code>,<code>443</code>,<code>8080</code>这些端口的,所以得使用不常用的高位端口。</p><h3 id="域名"><a href="#域名" class="headerlink" title="域名"></a>域名</h3><p>家用的宽带就算拿到了公网 IP ,也会不定时更换地址,所以要固定访问地址和配置 HTTPS 首先得需要一个域名 ,当然要是不计较这个的话,这一点可以略过。但是这种方式搭建出来的实例适合运行在内网上,因为 “<strong>PeerTube does not support webserver host change</strong>”(不支持域名改变),第一次运行之后再次更改域名将导致报错……</p><p>域名可以去域名商寻找,当然也可以使用免费域名,最主流的是使用 <a href="https://www.freenom.com/zh/index.html?lang=zh">Freenom</a> ,可以免费申请到 .cf .ga .tk 三种类型的域名。</p><h3 id="DDNS"><a href="#DDNS" class="headerlink" title="DDNS"></a>DDNS</h3><p>之后就是将公网 IP 绑定到域名上, Cloudflare 关闭了 .cf .ga .tk 使用 API 更改解析的方式,要更改得去网页面板更改。所以得用别家的,我使用的是 <a href="https://www.vultr.com/docs/how-to-setup-dynamic-dns">Vultr</a> 。</p><h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><p>根据官方的 <a href="https://docs.joinpeertube.org/">文档</a> 走就是了,搭建一般都是在 Linux 下, Win 系统可以尝试用 <code>WSL</code> ,我采用的方式是用 Docker 安装,毕竟这样不容易搞乱原本日常用的环境。</p><p>不过在使用 certbot 镜像时,注意将命令替换成 <code>--preferred-challenges dns -d example.com</code> 因为国内家用宽带无法拿到 443 端口,所以得用 DNs 方式申请域名。</p><h3 id="坑"><a href="#坑" class="headerlink" title="坑"></a>坑</h3><p>安装时倒是有一些坑陷了好久……</p><p>第一点就是端口要配置成一致的,不能容器和外面的不一样,要不然会因为不一致而报错。</p><p>但是就算这样也会导致 <code>Cannot retrieve OAuth Client credentials: undefined. Ensure you have correctly configured PeerTube (config/ directory), in particular the "webserver" section.</code> 错误,解决方式是在官方 nginx 模板 <code>location @api</code> 处 <code>proxy_set_header Host $host</code> 后面添加 <code>:所使用的端口</code> 才能解决问题[参考](<a href="https://github.com/Chocobozzz/PeerTube/issues/3608%EF%BC%89%E3%80%82">https://github.com/Chocobozzz/PeerTube/issues/3608)。</a></p><p>第二就是修改了 Docker 配置文件之后不自知,导致一直报错,非常脑残……所以有时候得全面检查配置文件才行…… </p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>期待数据自主的那天吧!不用忍受寡头背后叔叔的气,希望去中心化的互联网的环境到来……</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
<tag> 建站 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>躺平?</title>
|
||
<link href="/2021/06/%E8%BA%BA%E5%B9%B3%EF%BC%9F/"/>
|
||
<url>/2021/06/%E8%BA%BA%E5%B9%B3%EF%BC%9F/</url>
|
||
|
||
<content type="html"><![CDATA[<p>躺平这个词最近很是火热。</p><span id="more"></span><p>毫不意外,这个词也在各方各地引起了巨大的口水战,各家粉墨登场,上演一出好戏。可惜不出几年,我也要进这一场戏了,看戏的爽快感压制不住苦涩感,遗憾!</p><p>不过这一个月在重温《瓦尔登湖》和 庄子 ,倒是意外地符合这次事件,索性就把脑子里的浮云掠影写下来吧。至于对错(或许也没有对错),用时间来证明吧,对于这篇文章,我还是有信心能保存十年以上的。</p><h2 id="开躺"><a href="#开躺" class="headerlink" title="开躺"></a>开躺</h2><p>躺平最开始是由出身于百度贴吧的「中国人口吧」。ID为 好心的旅行家 在四月中旬发的一份贴子,大概四月二十几号我就在我经常逛的一个社区里看到了,没过几天就冲上了点赞榜前列。印象中这个贴子的截图我并没有细看,记得最深的就是每月才花两百、每天面加蔬菜,然后还要为了践行躺平哲学还得去锻炼,甚至去横店扮尸体,真实躺平了。评论里也都是些羡慕、感慨之词。</p><p>后来「躺平」一词冲击整个互联网,化为五月份的一道巨浪,成为和内卷一样在各大评论区烂刷的词语的过程,这开始我就没怎么关注到了,所以对于这部分,我也弄不出更深的见解了。</p><p>首先还是说说躺平这个词吧,拌着一份于四月末的 <a href="https://www.thepaper.cn/newsDetail_forward_12444215">采访</a> (后按:原文章已下线,有备份存于 <a href="https://web.archive.org/web/20210603142252/https://www.thepaper.cn/newsDetail_forward_12444215">Web archive</a>):</p><blockquote><p>其实我说的「躺平」并不是说我就每天躺着,什么都不干。「躺平」是一种心态,就是觉得很多事情,不值得我为此付出那么多的心神和精力。</p></blockquote><p>可以见得躺平并不是 <a href="https://zh.wikipedia.org/wiki/%E5%B0%BC%E7%89%B9%E6%97%8F">尼特族</a> 和 啃老族。他们是有区别的,<a href="https://zh.wikipedia.org/zh-hans/%E8%BA%BA%E5%B9%B3">维基百科</a> 给的定义是:</p><blockquote><p><strong>躺平</strong>或<strong>躺平主义</strong>是2021年<a href="https://zh.wikipedia.org/wiki/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD">中华人民共和国</a>网络流行词语,指年轻人出于对国内压抑的工作文化的失望,与其跟随社会期望坚持奋斗,不如选择“躺平”的处事态度。该词源自<a href="https://zh.wikipedia.org/wiki/%E7%99%BE%E5%BA%A6%E8%B4%B4%E5%90%A7">百度贴吧</a>,随后<a href="https://zh.wikipedia.org/wiki/%E8%B1%86%E7%93%A3">豆瓣</a>上建立了躺平小组(已被删除)。躺平被视为是对抗社会“<a href="https://zh.wikipedia.org/wiki/%E5%86%85%E5%8D%B7%E5%8C%96">内卷化</a>”的一种方式。其具体内涵包括“不买房、不买车、不结婚、不生娃、不消费”及“维持最低生存标准,拒绝成为他人赚钱的机器和被剥削的奴隶”。</p></blockquote><p>所以如果要是躺平要是简单理解成混吃等死,那就是错的了。这种网络传播中的异化,不知道是望文生义多一点还是官媒地引导多一点呢?要是躺平这个词一开始就被解释成开源节流会如何呢?对我来说,这个词有点庄子齐物论中身如槁木的感觉……</p><h3 id="哲思"><a href="#哲思" class="headerlink" title="哲思"></a>哲思</h3><blockquote><p>我可以像 <a href="https://zh.wikipedia.org/wiki/%E9%8C%AB%E8%AB%BE%E6%99%AE%E7%9A%84%E7%AC%AC%E6%AD%90%E6%A0%B9%E5%B0%BC">第欧根尼</a> 只睡在自己的木桶里晒太阳,也可以像 <a href="https://zh.wikipedia.org/wiki/%E8%B5%AB%E6%8B%89%E5%85%8B%E5%88%A9%E7%89%B9">赫拉克利特</a> 住在山洞里思考 ‘<a href="https://zh.wikipedia.org/wiki/%E9%80%BB%E5%90%84%E6%96%AF">逻各斯</a>’。</p></blockquote><p>明显见得躺平哲学也不是什么新思想了,已是自古有之的老调重弹。</p><p>要是一开始人生的目的就是赚钱赚钱买大房子,然后在屋顶上晒太阳,何不一开始就去晒太阳?</p><blockquote><p>现代人,很多都已经被自己所创造的东西操控了。资本、科技,这些都在异化人类。我比较认同「人是万物的尺度」,就是人本主义的思想,让人回归生活的本质,回到最基本的生存的状态。我可以怀疑一切,但不会去质疑「以人为本」的思想。马克思·韦伯也提出过「除魅」的概念嘛,就是要重新审视这些物质、技术之类的东西,去想想,我们真的需要这些东西吗?</p></blockquote><p>这观念倒是在《瓦尔登湖》里也能找到差不多的描述:</p><blockquote><p>大部分人似乎从来没想过房子是什么,只是看到邻居有房子,便想着自己也必须有一座,于是落得终生穷困,而这是毫无必要的。这就好比有人已经穿着裁缝为他量身定做的皮衣,逐渐抛弃了棕榈叶做的草帽和土拨鼠做的皮帽,却还抱怨生活太过艰难,因为他没钱给自己买一顶皇冠!</p><p>……</p><p>我们总是想要学会如何得到更多东西,但有时候也应该学学如何满足更少的东西吧? –《瓦尔登湖》</p></blockquote><p>这种自降「享受」的做法,又有几人能做到呢?所以评论区里,感慨才是多数吧,毕竟没人能轻易模仿贴主的做法。</p><p>减少的物欲产生的欲望必定会转移,见访谈,贴主是转移到精神世界上去了(或许信奉这种信念的人都这样吧):</p><blockquote><p>我现在躺平了,有时间阅读,也有更多时间去学习和搜寻这些我感兴趣的知识。比如,我最近就在读孙隆基的《杀母的文化》,关于美国文化与美国人心理状态的社会学著作。</p><p>这些年,全球集体右倾,年轻人都被意识形态裹挟得厉害。但我只是想去了解一下,另一个大国的人到底在思考些什么。我更关注他们「人」的状态。</p></blockquote><p>读书是好事,那么不为钱财、学位所读,是好事吗?更何况在这躺平的情况下……</p><blockquote><p>如果某本书能够解释我们的奇迹,并揭示新的奇迹,那么它可能就是为我们而存在的。 –《瓦尔登湖》</p></blockquote><p>愿我能一直找到我所想要的书。</p><h3 id="萝卜钓竿"><a href="#萝卜钓竿" class="headerlink" title="萝卜钓竿"></a>萝卜钓竿</h3><p>用我浅薄的经济学知识阐释,整个社会就是建立在发展上的,银行之所以贷款给人建面包店,就是因为看重了建起的店铺生产的面包能卖掉,钱才能赚到,社会就是建立在未来的发展上,可要是人们不买了呢?所以不免见到很多人确实急了,因为要是蛋糕变不大,那肯定就是一场场危机。</p><p>新华社转载了一份南方日报的文章,说道:</p><blockquote><p>无论如何,年轻人应该对未来抱有信心。尽管有人认为,年轻一代正在“低欲化”,并且影响整个社会慢慢进入低欲望状态。但事实上,这是一种毫无根据的猜测。学界认为,低欲望的本质原因是发展动力不足。中国是世界第一人口大国,劳动力资源充沛,具有超大规模市场优势,中国经济发展前景广阔。也就是说,在这片土地上,只要足够勤奋依然能自我实现、自我成就。</p></blockquote><p>货币贬值叫通货膨胀,努力贬值叫内卷,欲望贬值呢?冲浪时读到一个有意思的言论,把萝卜钓竿放在驴子嘴前驴会努力,但是这个杆子有几百米长时,驴子自然欲望低下了。社会中的萝卜钓竿真在变长吗?我也并没有详细调查,没有实际发言权,所以只能检索点资料管中窥豹了。</p><p>1998修订版《新华词典》:</p><blockquote><p>张华考上了北京大学;李萍进了中等技术学校;我在百货公司当售货员:我们都有光明的前途。</p></blockquote><p>比较:在中国买一套房子需要工作多久:</p><p><a href="https://www.bilibili.com/video/BV15v41157Ay">BV15v41157Ay</a></p><p>说到底奋斗和躺平就是一体两面罢了,阴阳里都各有对方,奋斗极端叫奋斗逼,躺平极端叫躺尸……</p><blockquote><p>他们知道我们知道,</p><p>我们知道他们知道我们知道,</p><p>可是依旧没有任何改变……</p></blockquote><h2 id="自躺?"><a href="#自躺?" class="headerlink" title="自躺?"></a>自躺?</h2><p>庄子并不是所谓的消极避世,他的文章里有一套完整的方法论,希望众生能够使用,在乱世中安身。梭罗也是,《瓦尔登湖》明说了是“一场生活的实验”,皆在扒开生活的外衣,弄清生活的本质……</p><p>在十九世纪的美国,一个人一天平均工资是一美元。梭罗在他的著作里也证明了,凭着二十五美元就能自己起一栋木屋,并享受近八个月的健康、闲暇时光……</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 随笔 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 随笔 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>二一年六月份梦记</title>
|
||
<link href="/2021/06/%E4%BA%8C%E4%B8%80%E5%B9%B4%E5%85%AD%E6%9C%88%E4%BB%BD%E6%A2%A6%E8%AE%B0/"/>
|
||
<url>/2021/06/%E4%BA%8C%E4%B8%80%E5%B9%B4%E5%85%AD%E6%9C%88%E4%BB%BD%E6%A2%A6%E8%AE%B0/</url>
|
||
|
||
<content type="html"><![CDATA[<h2 id="6-1"><a href="#6-1" class="headerlink" title="6.1"></a>6.1</h2><p>晚: 普</p><h3 id="空中!"><a href="#空中!" class="headerlink" title="空中!"></a>空中!</h3><p>好像是高中学校的一次活动?还是搬迁,总之要搬到天上的城去。我在城市闲逛的时候,使出了一个劈腿,然后我就借着惯性漂了出去。飘着的时候还和碰到的师生问好,他们好像还很羡慕。然后突然,我发现似乎要飘出城市出去了,连忙抓紧一颗树,巨大的惯性差点让我抓不住树了,我回头一看,距离城市边界只有四五个身位……<br>随后我在一张房子里,跟某人交谈,然后突然他就尸变了,虽然不知道原因……我直接摁着他的头弹飞了他,然后就这样在房间里又上演了一场紧张刺激的丧尸想要我又没咬到的丧尸样板戏。</p><span id="more"></span><h3 id="记忆混乱"><a href="#记忆混乱" class="headerlink" title="记忆混乱"></a>记忆混乱</h3><p>中: 普<br>出去,然后在山里这样的景区里找不到路了,是想找一个在两条路之间的路。在微信上搜索也找不到,按照攻略也找不到……<br>随后发现公众号文章里所用的配图……是一张监控摄像探头拍下的,里面竟然有我和我爸!看起来我多年前来过……但我实在是忘了……</p><h2 id="6-13"><a href="#6-13" class="headerlink" title="6.13"></a>6.13</h2><p>中: 普</p><h3 id="烂手机"><a href="#烂手机" class="headerlink" title="烂手机"></a>烂手机</h3><p>梦到以前的旧手机烂了,烂到外壳几乎都没有,差不多只剩下个屏幕。屏幕很厚,跟手机一样后,后面的电子原件并没有看到……<br>有点觉得它要爆炸了……</p><h3 id="海平面?"><a href="#海平面?" class="headerlink" title="海平面?"></a>海平面?</h3><p>地球的高楼大厦破败不堪,似乎所有人都死了,只是僵立在原地,还被某种黝黑的球形物体寄生了,在脖颈处……有一些球体还有凸起的一块亮色,似乎是眼睛……<br>然后哗啦,海面上涨,淹过了一栋栋楼,盖过的尸体都马上溶解,化成了石油状。接着海面又退了,尸体又重新显露出来。</p><h2 id="6-14"><a href="#6-14" class="headerlink" title="6.14"></a>6.14</h2><p>晚: 普</p><h3 id="火车,况且况且……"><a href="#火车,况且况且……" class="headerlink" title="火车,况且况且……"></a>火车,况且况且……</h3><p>在家门口,似乎正在紧张发动一架火车,工人正在外面的架子上扔煤。一个工程师模样的人找上来,指着最上面线上挂着还在滴水的衣服(应该是爷爷的)说到,马上拿下来……</p><h2 id="6-28"><a href="#6-28" class="headerlink" title="6.28"></a>6.28</h2><p>晚:普<br>cdda?在洗手间门下的缝卡住打浩克,然后后面刷了两个快速无视回合的鹰身怪秒我……</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>二一年五月份梦记</title>
|
||
<link href="/2021/05/%E4%BA%8C%E4%B8%80%E5%B9%B4%E4%BA%94%E6%9C%88%E4%BB%BD%E6%A2%A6%E8%AE%B0/"/>
|
||
<url>/2021/05/%E4%BA%8C%E4%B8%80%E5%B9%B4%E4%BA%94%E6%9C%88%E4%BB%BD%E6%A2%A6%E8%AE%B0/</url>
|
||
|
||
<content type="html"><![CDATA[<blockquote><p>尝试把梦记以月的形式压在一起。另外,纯纯笔记买了永久也没怎么用过,是时候用起来了,顺便测试一下手机编辑 Git 仓库。</p></blockquote><h2 id="5-4-habitica-新策略"><a href="#5-4-habitica-新策略" class="headerlink" title="5.4 habitica 新策略"></a>5.4 habitica 新策略</h2><p>中: 普<br>habitica 新功能,梦到很多标签集?然后还解释了什么宇宙飞船,海战玩法什么的。。。最后一瞥,好像还康到了腾讯的联动物品。</p><p>教堂,地球仪,鲸鱼?上面的卡住了入口,其实上面别有洞天。。。</p><h2 id="5-18-啼笑皆非之契约"><a href="#5-18-啼笑皆非之契约" class="headerlink" title="5.18 啼笑皆非之契约"></a>5.18 啼笑皆非之契约</h2><p>晚: 普<br>就一个场景记忆最深,就是梦见什么签约什么奴隶契约之地,我看了外面的告示牌,竟然是【名人签名馆】,怪。</p><span id="more"></span><h2 id="5-23-另一栋,可能性"><a href="#5-23-另一栋,可能性" class="headerlink" title="5.23 另一栋,可能性"></a>5.23 另一栋,可能性</h2><p>晚: 普<br>似乎是在某一条街道另一边的样子,看到了以前的房子?<br>中: 普<br>似乎到了某个北方新学校的样子,我穿着厚大衣,似乎有一件还是我妈的,女款,这让我感到不自在。<br>然后我就开启了我的征程,目的是什么倒有些忘了,但是反正路过了很多地方都样子……</p><h2 id="5-24-乡下"><a href="#5-24-乡下" class="headerlink" title="5.24 乡下"></a>5.24 乡下</h2><p>晚: 普<br>在乡下,那种百货店,我盯着冷柜,里面卖着一份特别的饮料,比起常规饮料都贵,似乎六七块的样子……</p><h2 id="5-25-跨海跨年大会"><a href="#5-25-跨海跨年大会" class="headerlink" title="5.25 跨海跨年大会"></a>5.25 跨海跨年大会</h2><p>晚: 普<br>高中的人混杂着大学的场景?貌似是在跨海大桥上举办跨年大会。当时是在看电影,放到剧情关键处,就开始倒计时了,电影也暂停播放了,随后开始倒计时……<br>五四三二一——烟花开始在大桥的链子上一节一节炸裂开来,我坐在最后排,一些烟灰还打在我的脸上……<br>最后电影恢复了播放,然后还有工作人员说,几个摄像机有几个拿来录观众的表情,有需要可以去索要……</p><h2 id="5-28-焦虑通知书"><a href="#5-28-焦虑通知书" class="headerlink" title="5.28 焦虑通知书"></a>5.28 焦虑通知书</h2><p>晚: 普<br>一直梦到填饱志愿的场景,然后似乎有额外验证的步骤,好像是团员还是党员?以及检查录取公开名单时候发现没有自己名字的场景……<br>各个方面来说都很焦虑的梦。</p><h2 id="5-30-是地洞啊!"><a href="#5-30-是地洞啊!" class="headerlink" title="5.30 是地洞啊!"></a>5.30 是地洞啊!</h2><p>晚: 普<br>似乎在学校,我并没有住在宿舍,而是住在地下。入口在一栋建筑物旁,看起来就是一个坑洞,往里走还有一个过道需要完全趴下蠕动过去才能通过……过道后面就是大门了,里面就是很普通的几室几厅那种构造了。<br>然后我似乎在学校里怎么乱逛?发生什么事不记得了,应该是跟食堂有关……<br>然后似乎有人(似乎是爸妈)想参观我的“宿舍”,我就先去开门了。趟过道第一次觉得别扭,就拿把铲子把过道的土铲了,土下面漏出来的,是楼梯。<br>随后我大概就理解我为何要出去逛了,因为有两个亲戚住在里边,我妈就指责我爸,亲戚住在里边,我肯定不自在的!</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>出发,海底世界</title>
|
||
<link href="/2021/03/%E5%87%BA%E5%8F%91%EF%BC%8C%E6%B5%B7%E5%BA%95%E4%B8%96%E7%95%8C/"/>
|
||
<url>/2021/03/%E5%87%BA%E5%8F%91%EF%BC%8C%E6%B5%B7%E5%BA%95%E4%B8%96%E7%95%8C/</url>
|
||
|
||
<content type="html"><![CDATA[<p>突然,我妈和我说,我们去水底走一遭吧。</p><span id="more"></span><p>接着,她就把她的的红色小轿车往水里冲进去……</p><p>水下的光影变得光怪陆离了起来,外面传来的声音变得沉闷。而我似乎有点担心车的气密性是否良好,往窗边摸过去,感觉确实有点湿润,心中想着车能否在到底目的地的时候没被水完全灌满。</p><p>不久之后,我们似乎来到了一片城墙外面,这里并不像是水底,跟陆地上似乎没有什么两样……而且虽然感觉是城墙,但说是房墙还差不多,二三人高度,上边还用陶瓦盖住。墙的正中间摆着一座小神台,车子停在神台的五六米远,半截车身刚好对住。神台前面有一个女人,我似乎感觉车有点挡住她了,有让她感到不悦吗?</p><p>我们下了车,我妈拿起了烟准备要抽(现实中并不抽),拿起打火机,啪擦啪擦,好几次都没有点着,我非常识时务的把我的手指凑了过去,做了个打响指的动作,一簇小火苗就跃到我手指大概四五厘米的位置,帮我妈点着了烟。那女子看到,也向我准备借个火,我也帮她点着了,还不忘解释道:“这可是由<strong>信仰驱动</strong>的……”</p><hr><p>接下来个场景,是发生在公司里。</p><p>一个新来的员工,兢兢业业工作着,却被老板认为i有摸鱼之嫌,展开调查。发现使用的电脑魔纹出了问题,似乎还危害到了现界的人。</p><p>那新来的员工感到心灰意冷,口中不停说到,我以后再也不这么前往现实世界了……</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
<tag> 普通梦 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>中文网页字体动态裁剪</title>
|
||
<link href="/2021/03/%E4%B8%AD%E6%96%87%E7%BD%91%E9%A1%B5%E5%AD%97%E4%BD%93%E5%8A%A8%E6%80%81%E8%A3%81%E5%89%AA/"/>
|
||
<url>/2021/03/%E4%B8%AD%E6%96%87%E7%BD%91%E9%A1%B5%E5%AD%97%E4%BD%93%E5%8A%A8%E6%80%81%E8%A3%81%E5%89%AA/</url>
|
||
|
||
<content type="html"><![CDATA[<p>首先,我先在放个【矣】在这里。</p><span id="more"></span><p>比起字母系统语言,汉语在计算机世界上有着天然的弱势,<strong>锟斤拷</strong>和<strong>锘锘锘</strong>这些编码问题本身就令人头大了,尤其对于互联网这个寸土寸金之地,想要在网页内展现自定义字体,首先就要先加载个几兆大小的字体文件,要这么做那就是极度的浪费和折磨了。</p><p>所以字体裁剪是必要的,有两种方向:</p><ul><li><p>提前准备常用字集进行裁剪</p></li><li><p>提前计算出需要展示的字集再进行裁剪</p></li></ul><p>第一种方式就是突出一个极致的懒,只需要做一次,就能不用再管了。缺点就是总会有不在常用字体里的“常用字”,这样网页加载出来的效果就会形成“犬牙交错”之感,看起来非常辣眼(要是选用的字体和默认字体差别非常大的话)。而且常用字内其实也不是每个字都用上了,所以还是会有浪费。</p><p>第二种方式就更优雅一点了,能保证字体里的每个字都是用上的。缺点就是麻烦了点儿,不过只要写个自动化脚本,这点麻烦也不算麻烦了。</p><h2 id="压缩方案"><a href="#压缩方案" class="headerlink" title="压缩方案"></a>压缩方案</h2><p>当选 <a href="https://github.com/fonttools/fonttools">fonttools</a> ,至少这项目现在还活跃着,其他类似的字体项目都停滞了蛮久时间的了……好像。</p><p>要使用直接通过 <code>pip install</code> 安装 <code>fonttools</code>就行了,要是还想压成 <code>woff2</code> 这种压缩率更高的格式还得再安装个 <code>brotli</code> 。</p><p>使用命令:</p><p><code>pyftsubset <字体>.ttf --text-file=<字符集文件></code></p><p>当然,也可用 <code>--text=</code> 的选项来直接后面跟所需字符。</p><p>要压成 <code>woff2</code> 格式可以用 <code>fonttools ttLib.woff2 compress <压缩后字体>.woff2 <被压字体>.ttf</code> 的方式。</p><h3 id="脚本代码"><a href="#脚本代码" class="headerlink" title="脚本代码"></a>脚本代码</h3><p>反正一个简单粗暴的循环怼上去就得了,去重可以用集合来去。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> os</span><br><span class="line"></span><br><span class="line">path = os.getcwd()</span><br><span class="line"></span><br><span class="line">filelist = []</span><br><span class="line"><span class="keyword">for</span> root, dirs, files <span class="keyword">in</span> os.walk(path + <span class="string">'/source'</span>):</span><br><span class="line"> <span class="keyword">for</span> name <span class="keyword">in</span> files :</span><br><span class="line"> filelist.append(os.path.join(root, name))</span><br><span class="line"></span><br><span class="line">strset = <span class="built_in">set</span>([])</span><br><span class="line"><span class="keyword">for</span> filename <span class="keyword">in</span> filelist:</span><br><span class="line"> <span class="keyword">if</span> <span class="string">'.md'</span> <span class="keyword">not</span> <span class="keyword">in</span> filename:</span><br><span class="line"> <span class="keyword">continue</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">with</span> <span class="built_in">open</span>(filename, <span class="string">"r"</span>,encoding=<span class="string">'utf-8'</span>) <span class="keyword">as</span> f:</span><br><span class="line"> <span class="keyword">for</span> subset <span class="keyword">in</span> f.read():</span><br><span class="line"> strset.add(subset)</span><br><span class="line"></span><br><span class="line">str_ = <span class="string">''</span></span><br><span class="line">a = <span class="number">0</span></span><br><span class="line"><span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">'strdb.txt'</span>, <span class="string">"w"</span>) <span class="keyword">as</span> f:</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">list</span>(strset):</span><br><span class="line"> str_ += i</span><br><span class="line"> a += <span class="number">1</span></span><br><span class="line"> <span class="built_in">print</span>(<span class="string">'%d Characters in all files.'</span>%a)</span><br><span class="line"> <span class="built_in">print</span>(str_)</span><br><span class="line"> f.write(str_)</span><br></pre></td></tr></table></figure><p>将 <code>source</code> 下的 <code>md</code> 文件的字符提出来,再写入到 <code>strdb.txt</code> 以带后续使用。当然直接用 <code>--text=</code> 选项直接塞进命令里也可以,反正我是喜欢先写进文件的。</p><p>最后生成的字体文件在 80kb 左右,对于网页来说,已经是可以接受的程度了,当然这跟我选择的字体有关,是一款像素字体,不怎么占空间,如果是常规字体的话,大概会在上两三百左右吧。</p><h2 id="坑"><a href="#坑" class="headerlink" title="坑"></a>坑</h2><ol><li>首先是 <code>Travis</code> 部署上得用 <code>python3</code> 环境,要特别声明一下,二环境下会输出个零蛋,应该是版本之间语法的锅?</li><li>代码里没有解析配置文件里的中文语句,所以标语口号这种,可能就会没被解析到,不过我懒地再一个一个引入配置文件,所以还不如……<del>我先在放个【矣】在这里。</del></li><li>确保文本在网页字体加载期间保持可见状态,即设置 <code>font-display: swap</code> 选项 在<code>@font-face</code> 内,要不然的话字体没加载出来文本会消失掉。</li></ol><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ol><li><a href="https://github.com/fonttools/fonttools">Fonttools</a></li><li><a href="https://hsingko.github.io/post/compress_webfont/">中文字体压缩的那些事——涂雨期的博客</a></li><li><a href="https://web.dev/font-display/">Font display</a></li></ol>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 技术 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 技术 </tag>
|
||
|
||
<tag> 字体 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>Wrong</title>
|
||
<link href="/2021/02/wrong/"/>
|
||
<url>/2021/02/wrong/</url>
|
||
|
||
<content type="html"><![CDATA[<p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><span id="more"></span><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p><p>只玩耍,不工作,聪明的孩子也变傻。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>交替的三人组</title>
|
||
<link href="/2020/11/11-25%E6%A2%A6%E8%AE%B0/"/>
|
||
<url>/2020/11/11-25%E6%A2%A6%E8%AE%B0/</url>
|
||
|
||
<content type="html"><![CDATA[<p>一个又长又玄的梦,不过隔了将近12小时的现在来记,好多地方都模糊了……</p><h2 id="还能记得的场景"><a href="#还能记得的场景" class="headerlink" title="还能记得的场景"></a>还能记得的场景</h2><p>在地铁(或者火车)上,我和其他另外两个人一起坐着。然后我拿起手机,屏幕上显示【10秒后进入梦境】。</p><p>期间我和另外两个人组成了三人组,我在里面,但是另一个场景又有一队三人组,但里面又没有我?总之非常混乱,处于薛定谔状态。</p><span id="more"></span><p>总之大概是去借什么书来着……?然后去图书馆,或者叫书店更准确一点。柜子上摆满了很多“烂书”,大众成功学那种,你的大脑只开发了百分之十之类的,要不就是老旧的书。我没怎么感兴趣,然后去到了其他展台。期间感觉整个图书馆都是淹了水,我在水下游着去找书,非常怪诞。貌似是找书给另外两个人的……</p><p>然后我就做梦了,大抵是把一个人砍掉半个头,然后把他身子下半截拿去火烤,只是想处理掉,但不是出于毁尸灭迹心态吧。然后我就醒了(不是现实中),然后打开门,发现外面就是——那具烧焦的尸体,我顿时吓到冒冷汗。其他两个人中的一个跳出来对我说(或者不是我),是我干的哟……</p><p>之后一个场景是——公司辞职?我没有联想起相关的场景,但是早上出门前匆匆写在草稿纸上的关键词有它……之后的场景是一个狙击手驾着狙,嘭的一声开枪击中了我对面的一个人,他的胸口上绽出一团红色……联想上个关键词,难道是最近打工人的梗吗?这也太怪诞了……</p><p>之后闹钟就……在响之前我先一步醒来关掉了,就差一两分钟,总体来说,这个梦真的很怪诞(甚至这个词都不尽贴切)可惜急着出去,只稍微写了几个关键词,到晚上才认真写下来,要不然应该能把场景都联系起来的。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>9-25梦记</title>
|
||
<link href="/2020/09/9-25%E6%A2%A6%E8%AE%B0/"/>
|
||
<url>/2020/09/9-25%E6%A2%A6%E8%AE%B0/</url>
|
||
|
||
<content type="html"><![CDATA[<h2 id="没有火的世界"><a href="#没有火的世界" class="headerlink" title="没有火的世界"></a>没有火的世界</h2><p>漆黑一片,周围全是黑暗。面前是一盏探照灯,正往脚下射着灯光,但是发出的光甚至连脚下的黑暗也驱散不开。</p><p>这一段场景似乎给后面光与暗的主题做了铺垫。</p><span id="more"></span><p>之后,我似乎梦见我在学校,躲在一个柜子里。外面一片漆黑,过了几秒中,之前还在的一个人就这样消失了。似乎在这个世界里,在黑暗的地方待得太久就会神隐。</p><p>之后我就打算出去走走,到学校周围,还拉上了两个人(但是不知道是谁),我们走到了学校周围,但是看景象,是现实中家的周围,不是学校的周围。走到一半,天空就暗了下来,是因为日食?还是云彩地遮蔽?之后我们就恐慌了,急切的想要寻找一个开着的店铺进去避难,但是店铺都关门了,外面只剩下恐慌的我们三个。其中一个人不顾一切撞进了一间关着的店铺,而我们两个找到了一间开着的饭店一样的地方进去了,饭店内只有中间的一间桌子有灯光,周围都是黑的,我们就在那里避难了。</p><p>之后,不知道是我们自己的发现还是店主人的邀请,我们在二楼安顿了下来,二楼似乎是一间酒店,房间一排排的布置过去,我在其中一间房间住着,等到外面不在黑了再出去,另外那个落单的人我们也在出去的时候找到了,原来那个店铺连接着一处购物广场,他就在那儿避了难(不过现实世界中,那片地区是没有购物广场的)。</p><p>之后我又到了类似小巷的地方,跟某人攀谈了起来,了解到只要在黑暗的地方待上十秒,人就会消失不见——然后我就在他背后看见了幕后黑手。是一个长着两只长脚的新浪微博(?),总之不会让人感到太恐怖就对了。然后他问我,要不要加入他们,成为他们——我很确定是不是出现这样的桥段是因为我变身系的故事读多了……尤其是克系的。</p><p>发生这段对话时,已经是在半梦半醒的状态了,开始能感知到现实世界,所以就不打算管那个新浪微博,直接醒了过来,拿起手机,四点四十三分,距离闹钟还有两分钟,我还以为我又没听到闹钟呢。前几天睡的太晚,导致睡得很死,所以半夜定的闹钟基本没听到,今天十一点半睡的,甚至还自然醒了,之后就上了个厕所,再睡了下去。</p><h2 id="豆?"><a href="#豆?" class="headerlink" title="豆?"></a>豆?</h2><p>之后再睡回去的梦,就是在课堂上了,老师是初中时代的班主任,虽然是历史,但是我们似乎在写作文的样子,主题是关于豆,我似乎没怎么主意的样子,涂涂写写的,改了又改。</p><p>之后索性拿出电脑,往桌上一摆,用电脑写了起来(?),写了一些,被周围的人看见,吐槽到,那么小的字体,真是近视眼?</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>美丽新世界!</title>
|
||
<link href="/2020/09/Brave-new-world/"/>
|
||
<url>/2020/09/Brave-new-world/</url>
|
||
|
||
<content type="html"><![CDATA[<p>现在是福帝112年了,我们距离美丽新世界,更近一步了吗?</p><p>睡眠教育和人工孵化还是幻想,唆麻仍未出现,人类还在用着老套的香烟酒精。但是在满足欲望这一点,似乎有了些影子。</p><span id="more"></span><p>现在的网络服务,为了挣钱,为了留住用户,已经是推荐算法的天下了。只要你看了一个猫猫对狗狗使用喵喵拳的搞笑视频,那么推荐列表上就要充斥着类似的视频了。推荐算法似乎让用户的信息形成了一个茧房,让其他信息都被隔绝在外?</p><p>但是人类本来就是偏见的,小时候拿到一本杂志,也就只会翻阅上面的笑话栏目,其他的,实在没兴趣。走到餐厅时,大概率也只会熟悉的窗口前,点上熟悉的菜品,至于尝试下新菜?还是下次、下下次吧。推荐算法只是顺应了人们的需求罢了,说信息之茧是由推荐算法导致的话,那也太“折煞”推荐算法了。</p><p>赫胥黎到是更近一步,虽然因为时代所困,没有在《美丽新世界》里写到互联网(还有对待大自然的观点,现在大自然反而是更贵的),但是对于满足欲望这一点,倒是大书特书——所有人都属于所有人,音乐、旅游、无限制的性,一切欲望都给予满足,这样人就不会激动,人不激动,社会就不会动荡。</p><blockquote><p>“你这个傻孩子!”她说,“我是多么想要你呀!你既然也想要我那为什么不……”</p></blockquote><p>从保留地出来的野蛮人,没有见识过文明人不需要走爱情这道程序就能快进到直接上床的架势给吓住了,这种寓言式的场景不经让人深思(除了本子画师)。</p><p>很难想象这种场景是否会真地出现,但是推荐算法为了贴合人们的欲望,让整个互联网变得越加轻松倒是真的了。喜欢的东西总能被推荐算法第一时间分发,总能找到看得下去的东西,只要,你肯交出你的数据。</p><p>似乎这是老调重弹,毕竟每一次新的传播途径的发展,都会引起人们的大加批判,苏格拉底对于文字、担忧广播电视的出现会导致人们丧失文字特有的思维。担忧推荐算法的滥用,是不是也能归进这一类呢?可是,相比以往的信息传播方式,推荐算法必然要获取用户的数据,才能做到精确推送。这一次,已经是要让人本身都得参与进来。</p><p>看着视频网站的推荐视频,会是新时代的汪汪狗崽离心球吗?对于网络世界不停出现的热梗,颇有点“要看鞭子功”的味道。</p><p>最后在想到到伊普西隆阶级的人都一个胚胎分化出几千个人,每个人长的都一个样,让人觉得恐怖,“那些面孔,那些老是重复的面孔——那么多人却只有一张脸——一模一样的灰色大眼,像哈巴狗一样……”让我突然想到西方人对东方人的一些刻板印象,似乎还说阅兵仪式让人感到害怕,为什么?从这里就能看出一二了吧。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 随笔 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 随笔 </tag>
|
||
|
||
<tag> 科技 </tag>
|
||
|
||
<tag> 读后感 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>九月!</title>
|
||
<link href="/2020/09/%E4%B9%9D%E6%9C%88%EF%BC%81/"/>
|
||
<url>/2020/09/%E4%B9%9D%E6%9C%88%EF%BC%81/</url>
|
||
|
||
<content type="html"><![CDATA[<p>九月!意味着开学季,是一直不想面对的月份。但在2020年这个魔幻的年份,这一次的九月,当然也是不同往常。</p><span id="more"></span><p><img src="https://media.southfox.me/ipfs/QmSiHP5wHqxkV4pWGGVAsXB25E7ZmSLfnMSxGQGbR5TDge"></p><h2 id="8-32"><a href="#8-32" class="headerlink" title="8.32"></a>8.32</h2><p>熵一直在增加,而我并没有活得像一个智慧生物一样,将周围的事物从熵从高状态整理到低状态。随着时间之矢地飞过,混乱是不可避免的,希望九月,能多点清醒吧。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>舞</title>
|
||
<link href="/2020/07/%E8%88%9E/"/>
|
||
<url>/2020/07/%E8%88%9E/</url>
|
||
|
||
<content type="html"><![CDATA[<blockquote><p>故事一定要有观点——不管是什么观点,而且一个出彩的故事,还必须跟情节、风格、环境、结构等等牢牢地结合起来。可惜作为以梦为基石的梦说,故事很难有一个观点,甚至逻辑都很难成型,所以,只好就这样了吧。</p></blockquote><span id="more"></span><h2 id="一"><a href="#一" class="headerlink" title="一"></a>一</h2><p>“看,他现在正在梁上跳舞呢。”</p><p>“哼,就算房梁上很黑,一些眼力好的早就看到了吧,真当全部人都是瞎子吗?”</p><p>“啊,已经有人摸上去了,他还在跳呢,真是个笨蛋。”</p><p>两个穿着精良的守卫已经从房梁外侧接近跳舞中的黑猫,但是黑猫依然在专注地跳着,全然不把周围的动静放在眼里。</p><p>咚——黑猫被守卫卡着脖子,甩在梁上,一抹银色从黑猫的口袋中划出,往地上掉去,是一把小钥匙。此时,国王正从房梁下走过,钥匙正巧掉在国王托在地上的长袍上,悄无声息。</p><h2 id="二"><a href="#二" class="headerlink" title="二"></a>二</h2><p>一名扫地仆发现国王的二弟死于家中,顿时引起皇室内的一阵阵鸡飞狗跳,待到皇室这部腐朽的机器彻底运作起来,已经是好几天之后了。</p><p>圣堂内。</p><p>一个画板支在玻璃制的箱子前边,画家正拿着画笔,不时地从助手递过来的颜料盘中勾勒几笔到画上。画上画着的,正是死者,国王的二弟。</p><p>“你确定我们还有机会吗?”助手递过刷子,问道。</p><p>“也许有,也许没有。”画家心不在焉地答道。</p><p>“亵渎尸体可是很难的呢,尤其是现在,我都能感到好几股视线一直在盯着这里呢。”</p><p>“主要是黑猫的计划失败了,现在只能走一步看一步了。”画家放下手势,拿起了橡皮泥,擦去不满意的地方。</p><p>“啊,那个白痴,搞出那么大阵仗却什么都没干!白白浪费了宣传我们的大好机会。”似乎为了泄愤,助手拿着杵的力道都大了许多,发出了沉闷的响声。声音回荡在安静的大堂内,连蜡烛的火光都飘忽了起来。</p><h2 id="三"><a href="#三" class="headerlink" title="三"></a>三</h2><p>一声号响划破了天边的晨光,死者毕竟是皇亲国戚,排场自然是一等一的。主祭念着长长的谥号,很难相信里面有几分是真实的。</p><p>“喂!那棺材,是不是在颤动?”人群中,一人沉下脸往身旁人问去。</p><p>“嗯,而且……这波动,我们先离开这里,要不然就得倒霉了。”</p><p>十分钟后。</p><p>“吼——”一声嘶哑的喊声从棺材内喊出,香木制成的棺材显然承受不住这压力,产生了条条裂缝,而在裂缝中,不断有蠕动的肉泥流出来。</p><p>不多时,就在惊呆的主祭目光下,凝结成了十多米高的血肉巨人。</p><p>下一瞬间,血肉巨人抡起手臂,拍飞出去几个倒霉的家伙。</p><p>人群炸裂开来,惨叫声中却混着大笑,来自巨人的头上,是一只黑猫。</p><p>不远处的一座小塔楼上,一人拿着望远镜看着惨剧现场,“不敢相信,他竟然做到了。”</p><p>“是啊,而且在没有接触到尸体的情况下,不禁让人好奇他是怎么做到的。”</p><p>远处的巨人像扫开落叶一样清扫着人群。呼——又是一击,但这一击似乎扯动的幅度有点大,让站在顶上的人没有站稳,跌了下去。</p><p>“啊~果然是个笨蛋。”</p><p>……</p><h2 id="四"><a href="#四" class="headerlink" title="四"></a>四</h2><p>“所以……你是怎么办到的?我没有看到你接近尸体过。”</p><p>“你有没有听过一个说法,杀人凶手喜欢去参观尸体?就像一个艺术家去画展看自己的画作一样?”</p><p>“你是说……凶手是国王吗?就算这样,能影响到尸体吗?”</p><p>“哼哼,这就是关键所在了,直接接触有守卫的尸体施展仪式肯定很难,但是让一个本来就有机会接触尸体的人代我去呢?而且他肯定会下意识的支开守卫的。”</p><p>“……啊!钥匙,直接接触不行的话,就让物品来接触,没想到你的仪式技术这么厉害,能封装到这么小的物品上……不过,就算这样,为什么你还要跳舞呢?为了让自己成为诱饵放松他们的注意力?”</p><p>“谁知道呢?也许……我当时在梦游也说不定哦。”</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦说 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦说 </tag>
|
||
|
||
<tag> 小说 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>7.21梦记</title>
|
||
<link href="/2020/07/7-21%E6%A2%A6%E8%AE%B0/"/>
|
||
<url>/2020/07/7-21%E6%A2%A6%E8%AE%B0/</url>
|
||
|
||
<content type="html"><![CDATA[<p>星期二 晚<br>在高中,似乎是在做卷子,不是我变成了高中,而是以现在的年龄去重读高中。</p><span id="more"></span><p>然后做的卷子做了两三道题就给老师改,然后再过一会儿老师就对答案了,一会儿,就到多选题了,但有几道题我觉得不像是数学题,考的是生活常识?</p><p>总之我拿起了浴室里的好像是清洁剂的东西左看右看,还沾满了地上的水,很脏的样子。</p><p>然后是动物圆,有一头狼死了,园长对外的视频说明情况,它已经活了二十多岁了,相当于人类的百岁了够可以了。然后在园里的人群中,有一个神婆的样子,走近去问她几个问题,就开始表演什么把戏起来,记得好像有一个全息房子!之后似乎聊上了园长,似乎她知道,还很敬重园长的母亲。之后我就去找园长,最后在个楼梯过道找到了他,我说外面有一个神婆,说很敬重你的母亲云云,园长好像很感动说了些什么。</p><p>(剩下两个场景,打蚊子,和去食堂抢饭,饭似乎没多少的样子,到我的时候盘里只剩下四个菜了…)</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>是时候为居家学习做打算了</title>
|
||
<link href="/2020/07/%E6%98%AF%E6%97%B6%E5%80%99%E4%B8%BA%E5%B1%85%E5%AE%B6%E5%AD%A6%E4%B9%A0%E5%81%9A%E6%89%93%E7%AE%97%E4%BA%86/"/>
|
||
<url>/2020/07/%E6%98%AF%E6%97%B6%E5%80%99%E4%B8%BA%E5%B1%85%E5%AE%B6%E5%AD%A6%E4%B9%A0%E5%81%9A%E6%89%93%E7%AE%97%E4%BA%86/</url>
|
||
|
||
<content type="html"><![CDATA[<p>马上,居家学习对我来说是一件避无可避的事情了,但因为众所周知的原因,似乎居家学习的效率不是很高,那么有什么方法来应对呢?</p><span id="more"></span><h2 id="欺骗自己"><a href="#欺骗自己" class="headerlink" title="欺骗自己"></a>欺骗自己</h2><blockquote><p>我曾经从一个书商那里听过一个老绅士的故事。这个人靠写小说为生,并在家庭办公室内写作。这个人会在每天起床后下楼和妻子一同吃早餐,然后完成近五十年内从未间断的一系列晨间礼仪,包括:淋浴,剃须,穿上标准三件套,配上蝶形领结和四方手帕,拎起公文包,然后向自己的妻子吻别。随后走上仅约10步远的家庭工作室,关上门开始他早晨的写作工作。很显然,这个人已经推断出在家工作的唯一方法,就是假装他不在家。自我欺骗通常被认为是一种精神病态,但是在居家工作的情况下,它反而成为了一种维持精神健康的方法。这是一个自己和自己对抗的思维游戏。</p><p>——<a href="http://jandan.net/p/107120">如何居家工作?参考一下神经科学</a></p></blockquote><p>没错,一个重要的方法就是自欺欺人,营造一种让大脑进入状态的氛围。要营造一个重要的学习区域,除了专注的做一件事以外什么也不能做。就拿手机来说,手机被用来看视频、看有趣梗图、上社交软件吹水,所以,试图用手机来进行学习办公绝对是个蠢主意。因为对于大脑来说,手机已经是一个娱乐区域了,所以任何对于娱乐格格不入的事情都会被大脑抵触,学习也是一样的,如果一个学习的区域也让大脑产生了是娱乐区域的错觉,那么效率绝对是低下的。</p><blockquote><p>这套理论并不是说你需要在你的后院建一个家庭办公室来提高工作效率;它其实朴素地告诉我们不要在床上或是沙发上办公。找一个地方专门标注好,只用来工作,而不做任何其他事。哪怕仅仅只是换一个座位。</p></blockquote><p>同时,仪式感也是重要的一环,假装自己要去一个工作地点,家里的一切琐事都不用去担心了(虽然事实上反而是琐事烦你,而且因为在家里还是直接地烦)。甚至还可以加上一点想象,杂乱的书桌不见了,代替它的是一份铺满流光溢彩的。。。书桌,顶上装着的不是常见的日光灯管,可以变成一盏垂着的老式煤油灯(说到于此,我应该买一个台灯了,家里没有这样的东西,灯管的亮度还是稍显暗淡了),发挥自己的想象力,就像动森一样,不时地更换一下周边的装饰,哪怕是想象上的,让大脑能够区分开来,学习区域和其它区域的区别。</p><h2 id="GTD"><a href="#GTD" class="headerlink" title="GTD"></a>GTD</h2><p>同分心做斗争,GTD是一个好东西,只要能制造出一个由习惯编制的结构,就能在到点的时候下意识地做出对应的事。这方面我选择用<a href="https://habitica.com/">Habica</a> 。做为一个GTD软件来说,它批了一层RPG游戏的外表,让做规划表的和完成规划表这事变得有一些乐子,不像其他GTD软件,没有几丝颜色跟图片,给人一份压抑感。</p><p>当然,除了做表,实行是一件难事,尤其对我这种启动困难的人来说,有时候经常就会连比对清单这件事本身都忘个精光,所以,必须要有一个外界督促,比如使用QQ机器人每隔一段时间发一条提醒消息,或是用Tasker写一些提醒的脚本(倒计时脚本也可以随便做了)。</p><h2 id="Tasker"><a href="#Tasker" class="headerlink" title="Tasker"></a>Tasker</h2><p>说到手机制造分心的问题,就要考虑一下Tasker了,除了提醒脚本,也可以做限定脚本,在一个时间段内,就会自动开启免打扰模式并且强制让大部分应用不可用(如果懒得写的话,可以考虑专注森林这样类似功能的APP)。</p><p>并且,肝手游自动化这个功能(1-7地狱),也可以用Tasker来进行摆脱,就不用自己不时得去查看手机了。</p><h2 id="笔记系统"><a href="#笔记系统" class="headerlink" title="笔记系统"></a>笔记系统</h2><p>除非是超忆症患者,否则使用笔记系统对于学习来说是有大帮助的,思维导图、Cornell Notes,之类的系统,也应该再深入研究一下,值得花一些时间去琢磨,一段时间再换另外一个,比较一下哪个系统是最符合自身的。</p><p>而对于笔记软件来说,<a href="https://www.notion.so/">Notion</a>是一个新兴的笔记软件,同<a href="https://habitica.com/">Habica</a> 一样,也是我用过一段时间,但是并没有太深入使用,也许也该花点时间琢磨了,听说最近还取消了个人免费版的笔记条数限制,是时候该用起来了。</p><p>而对于记笔记来说,我想也应该多用点鲜艳的颜色、图片,以往的单颜色就干巴巴写下去对我来说确实是兴趣乏乏,一样,是时候去寻找对于自身最适合的笔记形式了。那么要怎么对比呢?月度总结笔记是一个点子,每到月底反思一下要做的事,评比一下似乎是有帮助的,当然。。。只要我能做得到。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 随笔 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 随笔 </tag>
|
||
|
||
<tag> 学习 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>当个精神病病人是种怎样的体验?</title>
|
||
<link href="/2020/06/%E5%BD%93%E4%B8%AA%E7%B2%BE%E7%A5%9E%E7%97%85%E7%97%85%E4%BA%BA%E6%98%AF%E7%A7%8D%E6%80%8E%E6%A0%B7%E7%9A%84%E4%BD%93%E9%AA%8C%EF%BC%9F/"/>
|
||
<url>/2020/06/%E5%BD%93%E4%B8%AA%E7%B2%BE%E7%A5%9E%E7%97%85%E7%97%85%E4%BA%BA%E6%98%AF%E7%A7%8D%E6%80%8E%E6%A0%B7%E7%9A%84%E4%BD%93%E9%AA%8C%EF%BC%9F/</url>
|
||
|
||
<content type="html"><![CDATA[<p>6.1 躺床上刷手机</p><p>6.2 躺床上刷手机</p><p>6.3 躺床上刷手机</p><p>6.4 你怎么能如此堕落!先前定下的学习计划你都忘了吗?子曰:“吾日三省吾身”。不能再这样下去了!</p><p>6.5 躺床上刷手机</p><span id="more"></span><hr><p>如果一个人经常发生这样的事情,那么,对于他的评价,无非就是懒蛋吧。可是如果这并非他的本意呢?如果他已经非常努力想要去改变这一切呢?如果单纯凭意志力是无法战胜这一切的呢?真的吗?还有什么是无法凭着毅力战胜的呢?</p><p>精神疾病。</p><p>如果一个人是近视眼看不清东西,会怪是眼睛没有努力去看吗?同理,如果脑子出了问题的话?很多精神疾病并不是心里问题,而是生理问题。如果明白这一点的人多一点,那么说抑郁症只是单纯心理承受能力差的人会少一点吧?</p><p>而有那么一种人,经常让人感到飘忽不定,非常容易走神神,像是沉浸在自己的小世界,情绪不稳定,经常拖延、有始无终,让人觉得他就是蒙着一层面纱。会有这么离奇的病吗?</p><p>ADHD。</p><blockquote><p><strong>注意力缺陷多动障碍</strong>(英语:attention deficit hyperactivity disorder,缩写为<strong>ADHD</strong>),涵盖<strong>注意力缺失症</strong>(英语:attention deficit disorder,缩写为<strong>ADD</strong>),是<a href="https://zh.wikipedia.org/wiki/%E7%A5%9E%E7%B6%93%E7%99%BC%E5%B1%95%E9%9A%9C%E7%A4%99">神经发展障碍</a>的<a href="https://zh.wikipedia.org/wiki/%E7%B2%BE%E7%A5%9E%E7%96%BE%E6%82%A3">精神疾患</a>。它的特性是难以专注、过度活跃、做事不考虑后果等等。除此之外,还有不合年纪的行为,有注意力缺失的个体也可能有情绪难以调节的问题。</p><p>维基百科——<a href="https://zh.wikipedia.org/wiki/%E6%B3%A8%E6%84%8F%E5%8A%9B%E4%B8%8D%E8%B6%B3%E9%81%8E%E5%8B%95%E7%97%87">注意力缺陷多动障碍</a></p></blockquote><p>而一般成年ADHD患者会具有以下症状:</p><p><strong>注意:每一项标准都要比具有同等心智年龄的一般人明显强烈才算符合。</strong></p><ol><li>低成就感,老是感觉自己潜力尚未发挥(不论现实成就如何)。</li><li><del>组织困难。</del></li><li><strong><del>长期拖延,很难开始做一件事。</del></strong></li><li><del>同时做好几件事,全部有头无尾。</del></li><li>不看场合时机,想到什么说什么。</li><li>经常追求刺激。</li><li>受不了无聊。</li><li><strong><del>经常分心,无法专注。话说到一半或书看到一般就分神了,但有时候又能超级专注。</del></strong></li><li>往往直觉强、有创造力、很聪明。</li><li>很难按照规则行事。</li><li><del><em>没耐性,无法忍受挫折。</em></del></li><li>有言语冲动,脾气不好,<del>乱花钱、时时改变计划、一天到晚开始新的计划</del>。</li><li>经常不必要的担心,没事就找事担心,但是又不注意危险。</li><li><del>有不安全感。</del></li><li><del>情绪不稳,尤其和人或事情断绝关系。</del></li><li><del>身心静不下来。</del></li><li><del>有成瘾倾向。</del></li><li>长期自我形象困扰。</li><li>自我观察不正确。</li><li>家族中有其他人患有ADHD或躁郁症、抑郁症、酗酒吸毒以及其他情绪冲动型疾患。<del>(待调查)</del></li></ol><p><em>(其中画——的表明是自己体感有这个症状的)</em></p><p>从小学到高中,我的评价手册基本都写着,我是一个聪明的孩子,如果能把聪明劲儿更用到学习上就最好了。</p><p>可我觉得这都是面子话罢了,我一直都不觉得自己聪明,看书看第一章,然后下一章又翻到第七章去了,干着一件事,不超过20分钟就跑去干别的事情去了。世界像是蒙了一层面纱一样,朦胧胧的,每天就绕着广场踱步,想着自己都不清楚的东西。学习成绩全看我能不能趁着撩开身上的面纱学多一点,这样的状态,能叫聪明吗?我也隐隐约约注意到了自己这种状态,之后因为成绩跟家里人绊嘴时,我说我根本集中不了注意力,我父母却又说我只是懒散,就只会找借口罢了。说着说着,我都接受自己是个懒蛋的设定了。</p><p>做为00年出生的人,悠悠二十年,才终于发现自己身上的怪奇并不是孤例,而是能够被一个专有名词所概括的,我终于能长抒一口气。就像一个整天眯着眼睛看世界的小孩,开始觉得自己是个瞎子的时候,却被旁人告知“诶呀,你近视了吧?”</p><p>但是知道是不够的,知道问题还是要面对它,解决它。</p><h4 id="药物"><a href="#药物" class="headerlink" title="药物"></a>药物</h4><p>药物可以给患者带来极大的改变。就像眼镜对于近视眼一样。咖啡因、酒精、香烟的提神作用对于ADHD患者来说,反而能起到提升专注的效果(所以成年ADHD患者很容易产生物品滥用的症状)。不过鉴于现在国内有能力去确诊成年ADHD的太少了,我可能需要等待我有一大段空闲时间才去医院吧。</p><h4 id="团体"><a href="#团体" class="headerlink" title="团体"></a>团体</h4><blockquote><p>参加一个支持团体。在一些ADHD团体中可以得到很多帮助。同病相怜的心理支持也是很重要的。</p></blockquote><p>也许我需要留意一下。。。不过我总觉得,我是不会去找的(</p><h4 id="结构"><a href="#结构" class="headerlink" title="结构"></a>结构</h4><blockquote><p>ADHD患者需要一个外在结构,一旦有了结构就像滑梯的两壁一样防止人们冲出去。可以使用清单、笔记本标出重点并形成这种习惯,利用有提醒功能的工具,制定并查看文件。</p></blockquote><p>这确实有效,将事情记在笔记本上确实能事情迎来开头,但是有可能会连这件事本身都能够陷入拖延的泥沼,更别谈养成习惯了。</p><h4 id="教练"><a href="#教练" class="headerlink" title="教练"></a>教练</h4><blockquote><p>ADHD患者是很难战胜自己的,选择一位教练让自己保持秩序,专注与正在进行的事,鼓励你、提醒你。朋友、同事、心理治疗师都可以当这位教练。</p></blockquote><p>可以使用一些专注力提醒工具,比如一些插件、脚本、APP形成一套ToolChain,在分神摸鱼的时候提醒自己,鱼鱼咸也可以加入这一套,定时地提醒自己。或是请人来敦促自己。</p><h4 id="期限"><a href="#期限" class="headerlink" title="期限"></a>期限</h4><p>DeadLine永远是第一生产力。</p><h4 id="分割排列"><a href="#分割排列" class="headerlink" title="分割排列"></a>分割排列</h4><p>大计划总会吓到人,尽可能一步一步分成不那么吓人的小计划。</p><p>之后再排列事情的重要顺序,不要拖延。不要让多个事情搞得自己一无所措,不要拖延,深呼吸,专注于第一顺位的事儿上。</p><h4 id="接受"><a href="#接受" class="headerlink" title="接受"></a>接受</h4><p>总有一些事是必定失败,有一些计划必定行不通,有一些关系必定走向尽头,做好准备。</p><p>不要固守传统,既然自己是异于大多数的,那么,也没必要强求自己,既然自己容易分心,那么为什么接受呢,就让自己的专注随意流淌,而且为什么不同时做两件事呢?就像电脑的多线程一样,永远不完做一件事倒不如花3倍时间做两件事情。找到自己真正的风格。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 随笔 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 随笔 </tag>
|
||
|
||
<tag> ADHD </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>浅推COVID-19</title>
|
||
<link href="/2020/05/%E6%B5%85%E6%8E%A8%C2%96COVID-19/"/>
|
||
<url>/2020/05/%E6%B5%85%E6%8E%A8%C2%96COVID-19/</url>
|
||
|
||
<content type="html"><![CDATA[<p>一场突如其来的瘟疫,打的整个世界错手不及。</p><span id="more"></span><p>在家闲极无聊,打算以另一种方式来推算疫情。</p><p>2019 乙亥年</p><p>此年入阳遁48局</p><p> 巽│巳 午│未<br> 伤 │ 杜 │ 景<br> 辰 9│离 2│7 坤</p><p> 卯 震│中 │兑 申<br> 生 │ │ 死<br> 寅 4│ 5│6 酉</p><p> 艮 3│坎 8│1 戌<br> 休 │ 开 │ 惊<br> 丑│子 亥│乾</p><p>主算一,为无天无地之算,客算五,为五天之算,应此灾。</p><p>始宫加临寅宫,对应楚地,正好是现在的湖南、湖北一带,但发源地在哪?太乙落巽宫,为东南方向,具体不明。</p><p>而<a href="%5Bhttps://zh.wikipedia.org/wiki/2019%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92%E7%97%85%E7%96%AB%E6%83%85%5D(https://zh.wikipedia.org/wiki/2019%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92%E7%97%85%E7%96%AB%E6%83%85)">维基百科</a>说:</p><blockquote><p>在原发疫源地调查方面,政府及社会在疫情最初期曾普遍相信位于湖北省武汉市的华南海鲜市场是病毒发源地。但进一步的研究结果则认为华南海鲜市场并非疫情发源地。黄朝林等在《柳叶刀》期刊发布的论文指,当时认为属首例的、12月1日发病的新冠肺炎患者没有去过武汉华南海鲜市场,最初入院的41个确诊病例中有13个与华南海鲜市场无关,故认为<strong>华南海鲜市场并非疫情原发疫源地</strong>。2月20日中国科学院西双版纳热带植物园等机构发布的论文预印本基于全基因组数据解析新型冠状病毒的演化和传播,亦佐证了华南海鲜市场并非疫情原发疫源地的观点,但认为武汉可能是疫情发源地。另一方面,何大一、西莫·加利、朱塞佩·雷穆齐等认为武汉市为疫情来源地。钟南山认为没有证据表明疫情源头在武汉。彼得·福斯特、科林·伦福儒等则认为没有证据表明疫情源头在武汉,但有95%几率可能来源于广东。曹彬等认为该病毒的实际来源尚不明确,仍需进一步研究。丹尼尔·露西在《科学》中指出,对动物及其供应商的血液样本、确诊患者的血液样本进行回顾性分析可能会揭示新冠病毒的起源地。</p></blockquote><p>而至于瘟疫发行时间,用移动合神的方法推为四月,与现实不符。故用五行生克计算,始击为木,十二月建丑为土,木克土所以发瘟(但我觉得说服力不够)。</p><p>接下来是2020年</p><p>此年入阳遁49局</p><p> 巽│巳 午│未<br> 惊 │ 开 │ 休<br> 辰 9│离 2│7 坤</p><p> 卯 震│中 │兑 申<br> 死 │ │ 生<br> 寅 4│ 5│6 酉</p><p> 艮 3│坎 8│1 戌<br> 景 │ 杜 │ 伤<br> 丑│子 亥│乾</p><p>主算二十四,无地之算,客算二十五杜塞之算 。</p><p>合神移至艮为格,艮为十二月往一月冬春之交,正好于今年流行的趋势大致相同。</p><p>而始击辰绝于巳,为农历四月,所以国内疫情形势大概会在6月21夏至之前完全转好。。。吧?</p><p>而这几年得卦中孚,有道是:中信为本,厄难消除。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 随笔 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 随笔 </tag>
|
||
|
||
<tag> 术数 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>十年</title>
|
||
<link href="/2020/05/%E5%8D%81%E5%B9%B4/"/>
|
||
<url>/2020/05/%E5%8D%81%E5%B9%B4/</url>
|
||
|
||
<content type="html"><![CDATA[<p>2020年5月26日</p><p>在一个在被外星势力入侵的地球里,某一个街头站着小女孩。</p><span id="more"></span><p>她展露一个微笑,就像影视作品里坏人得逞那种微笑,然后,我就被抓起来了。可能是被告密了,外星势力跟地球对抗好像是势均力敌的。我被冠上一个特别的罪名,似乎能完全引爆两边的关系的样子,而为了避免麻烦,我就被抓起来押送到敌方那里了。</p><p>我的牢房似乎跟现实中住的房子一样?但梦中的念头一转,对我就是十年,这十年我似乎过得不怎么样,浑身一股近似绝望的怒气。一天,我待在阳台洗衣服,发现我的妈妈待在那里,我没有被吓到,只是杵在那里,连确认我妈妈是真实还是幻象的动作都没有做。我只是待在那里想,终于想出了,我是可以逃离这片境地的。</p><p>然后,我就逃出来了(梦也没有交代是用什么方法),我回到了熟悉的景象中,但十年过去了,早已经物是人非,家里望过去也是杂草和蜘蛛网横行,一片破败。然后我又来到了校园里,似乎我以前的好友也在?他上前跟我打招呼,但是我只是望着商店橱柜里的物品沉默不语。</p><p>然后我惊醒了,梦里那种物是人非的感情是这样地真切,拿起手机看时间,是六点半,少见的不被闹钟惊醒的早晨。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>方舟同人游戏开发记录00</title>
|
||
<link href="/2020/05/%E6%96%B9%E8%88%9F%E5%90%8C%E4%BA%BA%E6%B8%B8%E6%88%8F%E5%BC%80%E5%8F%91%E8%AE%B0%E5%BD%9500/"/>
|
||
<url>/2020/05/%E6%96%B9%E8%88%9F%E5%90%8C%E4%BA%BA%E6%B8%B8%E6%88%8F%E5%BC%80%E5%8F%91%E8%AE%B0%E5%BD%9500/</url>
|
||
|
||
<content type="html"><![CDATA[<p>从一个蝙蝠开始,世界开始发生了翻天覆地的变化,也有无数人开始闲地发霉了,对,我也包括在内。</p><p>更不幸的是,因为家里人持有一种南方特有的家宅风水情结,所以选择了在房子建成二十年后的今年开始动工翻新屋子,电钻声绕梁二月而不止,我每天都在电钻闹钟的环境下醒来,差点没成神经衰落。而在这痛苦的环境下,我也打算做一些有意思的事来发散身心。。。</p><span id="more"></span><p>所以,就来做游戏吧,刚好也碰到了一个非常适合一个人把玩的游戏引擎——Godot。</p><p>godot是一个完全开源的小型游戏引擎,大小只有60M(当然只是基础功能,要导出的话还要安装400多M的扩展),相比其他的商业引擎,简直就是零头!而且作为开源引擎,没有商业引擎的烟火气息,社区十分友好,想要定制什么功能也不需要取得任何人的同意,马上就能自己开搞。当然,缺点就是,比起其他商业引擎,godot在国内的名声实在太小了,没有什么成型的中文教程。不过只要下定决心,抱着英语硬啃也不痛苦。</p><p>那么,来做什么游戏呢?这是因为我现在看的教程是一个动作Rpg的游戏教程,所以就做一个动作Rpg游戏吧(没错,就是这么随便)。</p><p>那么,敲定了游戏类型,就来琢磨一下游戏内容吧,单是自己原创的话。。。虽然自己是一个爱胡思乱想的人,但是脑中想的并没有成型,设定啥的要细想那可太废脑细胞了,所以就套现成的吧(没错,就是这么随便)。</p><p>那么,就来选明日方舟吧,毕竟这个游戏也以世界观著名,非常适合同人创作,主角的话,就定个陈吧(没错,就是这么随便)。现在想来,这个想法,有可能是受到了这个<a href="https://www.bilibili.com/video/BV1hK411L7nq">视频</a>的影响,毕竟动作游戏和塔防游戏,动与静的对立,想想就有趣。而且再加上陈在第七章主线剧情的走向,也非常适合散发脑洞呢。</p><p>那么,大体剧情就是陈上了切城,沿路砍砍砍,最后跟塔露拉对砍,砍爆一切的游戏。(没错,就是这么随便)</p><h2 id="细节"><a href="#细节" class="headerlink" title="细节"></a>细节</h2><h4 id="总体"><a href="#总体" class="headerlink" title="总体"></a>总体</h4><p>游戏游玩时间应该保持在一到两小时左右的长度,是一个砍爆一切的动作Rpg,应该有多重结局。</p><h4 id="画面"><a href="#画面" class="headerlink" title="画面"></a>画面</h4><p>游戏画面,就敲定像素风了(毕竟我也只对这个熟练),而且听说godot对于像素游戏支持还非常友好,其他一些著名的引擎制作像素风的游戏可能会产生令人恼火的问题。</p><p>那么,机制呢?</p><h4 id="机制"><a href="#机制" class="headerlink" title="机制"></a>机制</h4><p>机制无非就是主角上下左右移动,然后平砍带连击,能挥动两下,砍怪积攒技力,然后放点技能啥的。</p><p>等级上限是定在十级,升级带来升级点,然后打算做一个技能树,会可以解锁七八个具体的技能(有一些是变种,比如本家里的三技能绝影就可以改成范围型同时斩击范围里的敌人),但是只有三个技能格,可以在休息处自由搭配。</p><p>伤害也有为物理和魔法伤害这个设定(敌人当然也是),可以考虑后续升级做成选择向,让玩家升级后走一端,或者物魔双修?</p><p>然后就是休息处的设定,游戏打算做成平常不能回血(或者回血量不多),一些医疗物资要带到休息处才能选择回血,这样设定是因为会关于剧情以及多结局走向的。</p><h4 id="剧情"><a href="#剧情" class="headerlink" title="剧情"></a>剧情</h4><p>陈上切城,然后砍爆沿途小怪,然后跟塔露拉对峙的故事。(没错,就是官方本家的)</p><p>而且做成多结局,是根据休息处来算的,如果是多选择休息回血的话,那就会浪费时间,就可能会跟后面赶上来的罗德岛会合,发展一些剧情啥的,后续跟大boss的对峙的话,也会有罗德岛的帮助。而不选择休息回血的话,一路速通的话,就会发展不同的结局。大概是这样一个设定。。。吧。</p><h4 id="音乐音效"><a href="#音乐音效" class="headerlink" title="音乐音效"></a>音乐音效</h4><p>当然是直接照搬yj的啦(没错,就是这么随便),不过可能要处理一下,以最大程度地跟像素风切合。</p><h4 id="然而"><a href="#然而" class="headerlink" title="然而"></a>然而</h4><p>不过对于。。。一个刚学习的游戏引擎来说,我真的能成功实现出来吗?我现在都有点想不通二连击要怎么实现,还有对话系统,场景转移,数据转移。。。现在也只是刚实现走路动画而已。。。所以这也是写这个系列博文的原因吧,理清思想,坚定信心。</p><p>走一步看一步吧。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 游戏 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 游戏 </tag>
|
||
|
||
<tag> 游戏开发 </tag>
|
||
|
||
<tag> godot </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>Marzipan Solitude</title>
|
||
<link href="/2020/01/Marzipan-Solitude/"/>
|
||
<url>/2020/01/Marzipan-Solitude/</url>
|
||
|
||
<content type="html"><![CDATA[<p><img src="https://media.southfox.me/ipfs/QmX1zANXfhKWaT8CxZZNMVdQAqsv9yQGjqQUaWjyRi9Jsy"></p><p>从前在6号楼的一间房间内,有一只杏仁糖做的小猪,某一天被扬起的窗帘拍在了沙发后面,个把月没有人理会它。可怜的小猪等啊等,但还是没有人过来……突然有一天,它听到了吱吱叫的声音,难道,救援来了吗?</p><span id="more"></span><p>是一只老鼠。按照正常的少儿片,老鼠见到小猪应该对他说几句,好让剧情能够发展一下,但本片根本不是一个“正常”的少儿片,老鼠没等小猪说出话来就把他给啃了。一个“心智健全”的社会人看到这肯定是会吓一跳的,差点要给本片打上一个儿童邪典的标签。</p><p> 再看,老鼠吃了小猪之后,就跟着甜蜜睡着了。凌晨三点的钟声响起,把老鼠给吵醒了。它开始思考,小猪被他吃掉前想说些什么,伴随着落地钟的滴答声。</p><p>他开始感到寂寞。</p><p>于是他跑到落地钟前,望着钟摆上的闪光说,“跟我说些什么吧。”老鼠说道。</p><blockquote><p>Night,</p><p>only,only,only,night.</p></blockquote><p>落地钟说道。</p><p>“再多说几句吧。”老鼠说道。</p><blockquote><p>Lonely,</p><p>lonely.lonely night.</p></blockquote><p>“啊!是孤独!”,“那只小猪想说的肯定是这个。”老鼠说道。</p><blockquote><p>Minutes, hours,days,and years.</p></blockquote><p>钟似乎除了报时之外什么也不会说。</p><p>“你有一张友善的脸”,“Make me happy.Love me, Do!”老鼠说道。</p><p>老鼠随即在落地钟上咬了一个小洞,钻了进去,盯着钟摆,期待着钟能对他再说些什么。</p><p>日复一日,老鼠都在晚上通过他咬的小洞钻进落地钟的体内,期待落地钟能对他讲些什么。但在之后的某一天,他不见了。</p><p>外面的猫头鹰在早上抓到了一只老鼠。</p><p>落地钟感受着身体里被那老鼠咬出的那一点空洞过着日子,一天,他的弹簧坏掉了,从此再也不能报时,但时间没有它照样流转。</p><p> ……</p><p> ……</p><p> ……</p><p>而在猫头鹰吃掉老鼠的那棵树下,开着一朵小粉花,一只蜜蜂飞了过去,品尝了一下。</p><p>“有趣”蜜蜂又嘬了一小口“啊,是杏仁味的!”蜜蜂越饮越多。</p><p>“我工作得实在太认真了!”蜜蜂说道。</p><p>他停止了发声,开始在花朵上歇息。</p><p>天气尚晴,远处火车的光一闪一闪飞过山脚。</p><p>蜜蜂睡着了,当他醒来时,只能看到镇上路灯和橱窗发出的光亮,脚步声在远处游荡。</p><p>蜜蜂抬头看着月亮,“啊!没有太阳,我根本不认识路,今夜只好在镇子度过了。”蜜蜂说道。</p><p>蜜蜂飞过路灯发出的柔光,看到6号楼有一扇窗子开着,一只芙蓉花探向窗边。</p><p>蜜蜂飞到房间里,见到盛着芙蓉花的花盘放在书架上,芙蓉花就这样向着窗边长去,让其可以看到外边的风景。</p><p>蜜蜂嗡嗡地绕着花儿飞着,看着芙蓉花粉色的脸庞,最后飞到黑暗处,好看见芙蓉花反射着路灯的样子。</p><p>“看够了吗?”芙蓉花转过身,用他尖细的声音说道。</p><p>“抱歉。”蜜蜂说道,“我本不想这样鲁莽。”他飞到窗沿上,好让芙蓉花能看清楚他。</p><p>“看起来你并不是一位绅士?”芙蓉花说道。</p><p>“不是。”蜜蜂说道,“我也不是一位女士,我只是一个 worker。”(worker 既有工人也有工蜂的意思)</p><p>“没关系。”芙蓉花说道,“并不是所有人都光鲜亮丽。”</p><p>“我本来可以当一个女王的。”蜜蜂反驳道。</p><p>“算了吧。”芙蓉花笑着说,“我还可能是一位公爵夫人呢,可我不是。”</p><p>蜜蜂跳起来,指了指芙蓉花,“你肯定花了好大功夫,才能看到窗外的风景。”蜜蜂说道。</p><p>“那不是我,是我身下的那棵植株。”芙蓉花说道,“植株待在那里,但花儿一直在变”</p><p>“马上就轮到我了,明天早上,我就要凋谢到地板上了。就像舞会过后的裙子一样皱巴巴的,至少我的最后一晚是一轮满月。”芙蓉花说道。</p><p>“我希望至少能有一点音乐”芙蓉花卷着花瓣,用他尖细的声音哼着调子,“这家人有时会放些唱片的,可惜他们今晚出去了。”芙蓉花说道,“最近越来越冷了,不是吗?”芙蓉花越发缩紧花瓣。</p><p>“可惜我不能唱歌给你”蜜蜂说道,“不过我会跳寻蜜舞,要我跳给你看吗?”</p><p>“哦,要的,”芙蓉花说道,“跳给我,务必!”,“就在窗边,这样我就能把你和月亮一起看在眼里。”</p><p>“这只舞是告诉别的蜜蜂,有最甜的蜜在这附近。”蜜蜂说道。</p><p>“甜蜜,甜蜜,最甜蜜,甜蜜,甜蜜,往这里。”蜜蜂随着话语跳了起来。</p><p>“甜蜜,甜蜜,最甜蜜……”芙蓉花咕哝道。蜜蜂在窗台上跳着,远处的火车一闪一闪的灯光伴随着柔和的月光照向窗前。“甜蜜,甜蜜,往这里……”</p><p>当蜜蜂跳着,有着一股杏仁的味道弥漫在四周,“甜蜜……甜蜜……”芙蓉花的声音低了下来。他缩紧了花瓣,望向了窗外低沉的明月,又对着蜜蜂说,“飞出去寻找蜂蜜吧。”</p><p>“飞吧,这样子我就能伴随最后一抹黄月看着你。”</p><p>“我真希望我可以当你的绅士。”蜜蜂飞起来靠近芙蓉花说道。</p><p>他飞了出去,伴着橱窗和明月发出的黄光。</p><p>……</p><p>可能是动画师为了维持绘本那样的对话格调吧,特意将大量经过调整的旁白放在了剧中:</p><p>“Minutes, hours,days,and years.”,Said the clock.</p><p>从而突出了类似于讲述者的语调。初听时感到古怪,但看完才发现,这种语调是这部动画营造迷人氛围的必不可少的手段。</p><p>《The Marzipan Pig》这部动画到处都洋溢着这样的氛围,古怪(对成年人来说)却又令人陶醉。虽有着儿童文学惯有万物有灵的泛灵论,但在充斥着说教的儿童文学领域,这部作品是那样的格格不入。对孤独、死亡等儿童文学不敢轻易触碰的话题作了讨论,不做说教,就仅仅是罗列出来,用一种事实就是如此的语调去讲述,就产生了如此的力量,不免让人啧啧称奇了。</p><p>本片用陈列出的孤独并不使人难受,甚至耐人寻味,接着又用着一种戏谑的态度讲述着孤独和爱情的关系(“你对我的爱有多少?”一只寻爱的猫头鹰对着出租车计价器说,“6便士”,计价器答道)。可能爱情在小孩子看来,爱情就是一种让人无厘头的事吧。</p><p>接着一期一会的故事,如果生命到明天就要结束,马上要变成像舞会过后皱巴巴的裙子躺在地上,那缩着身子看着月亮的心情又是怎样的呢?</p><p>这种思考,在一种考虑仁爱伦理之德教化的大部分儿童文学是少有的,也是难得的。如果我小时候能看到这部片子,我会因此而不同吗?不过,大概率还是过目就忘了吧(笑)。</p><p>在最后,老鼠在那对一切众生都平等对待的月光下,身穿芙蓉花制成的裙子在凌晨3点的大桥上跳起舞来,是如此的诗意,却有着一种异样的蛊惑力,似让人能忘却死亡和寂寞。</p><p>B站搬运的已经被河蟹了,现在要看到这片子,只能付上两美刀啦(笑)。</p><p> <a href="https://youtu.be/EqFmxJgUfnw">https://youtu.be/EqFmxJgUfnw</a></p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 随笔 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 动画 </tag>
|
||
|
||
<tag> 随笔 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>漫展?漫展!</title>
|
||
<link href="/2020/01/%E6%BC%AB%E5%B1%95%EF%BC%9F%E6%BC%AB%E5%B1%95%EF%BC%81/"/>
|
||
<url>/2020/01/%E6%BC%AB%E5%B1%95%EF%BC%9F%E6%BC%AB%E5%B1%95%EF%BC%81/</url>
|
||
|
||
<content type="html"><![CDATA[<p>我原本以为漫展这么二刺螈的东西是以我无关的,虽然有时候我也挺好奇的,也有朋友一直在催,但是我还是因为一个根本原因而懒得出去——没钱。</p><p>而这次又是什么原因让我这个家里蹲舍得出去呢?</p><span id="more"></span><p>那是在2019最后一天的凌晨,我正在为白天课上的期末项目做准备,期间百无聊赖的我开始找朋友吹水,闲极问到元旦的行程,答曰,漫展。</p><p>之后我去搜索了一下漫展的相关情况,看着嘉宾名单,感叹道我果然不是二刺螈,几乎一个都不认识,就在我打算关掉网页时,一个熟悉的名字划过视线,浣熊无二。</p><p><img src="https://media.southfox.me/ipfs/QmPutzVmU7VMwrvyHe8DABr8aEq8axQhBwSBDTJYJoyRW9">平常在无聊时,摸鱼网站是一扇对外的窗口,可以让我呼吸一点新鲜空气,通常我也会在上面随便翻看图片来寻找一点乐子,而在其中,一位叫作浣熊无二所作的作品的点赞数总是能排到前列,其所用素材大多都是天上飘得云所作,现在也算是出书了。没想到能在妖都看到他,我一开始感到有点惊奇,毕竟国内城市就那一个,而这个城市一般都不会是妖都。</p><p>我顿时犯了难,毕竟是真滴没钱,没钱还去展子,能凑得到什么热闹呢?经过几番挣扎,我还是买了票,然后睡了一觉之后,满脸仙气的起床,顿时有点后悔,难得的假期,应该猫在被窝里的,可是B站早已把我的后路断了——本票不接受退换,真有你的啊,阿B。</p><p>之后就经过一个多小时的地铁之旅,终于到达了漫展的地点,到达时已经是10点多了,朋友听到我签售是在12点时马上就催促我,我一开始还有点纳闷,不过当我正式进去时,我才发现他是对的,队伍七七八八挂的,进门兑票要排,进去也要排,在门前也要排,进去更要排队,让我除3号线地铁外能深刻感受到妖都身为一线城市的地位。</p><p>之后就终于进去了,兜兜转转的,终于在签售的最后一刻排到了</p><p><img src="https://media.southfox.me/ipfs/QmXeQsAMpLWiidRhM5Fjabfrh1Xy6aZRzfUneyK6qn2itK" alt="书本封面"></p><p><img src="https://media.southfox.me/ipfs/QmRSBnQw1qTPCmrWTJFUKgt2wuquFdF79khSafmNt1tDz1" alt="签售成果">感觉颇有一点为以往摸鱼时光买单的感觉,之后就是在其他地方瞎逛了,还去了明日方舟的展子逛了一下,买了一个洁哥的亚克力牌,一个文件夹,还有一个盲盒礼包,开出了一个小美羊羊的的亚克力牌,以及一些阿米娅的链子,其中美羊羊的牌子,用来当手机支架蛮棒的(</p><p>然后就在展子上消磨时光到三四点,就回去了,总体算下来,那还真是对不上70块的票价的,果然,死宅的钱真好骗。</p><p>在晚上准备入睡的时候,翻看一下书籍,感觉大部分都看过了,可能作者也考虑了这一点,所以最后一部分画了将近50页的书本独占篇幅来完善世界观,而且前面第一部分加了画云技巧(这也是为什么本书上架建议为漫画和。。。绘画技巧栏目的关系吧)但不到180页的书,就卖了将近60块,又作为“网红漫画”,精细度也别强求,感觉也是不值这个售价(其实还是因为穷)</p><p>之后入睡前搜索了一下作者的信息,在百科上惊奇的发现,他竟然是《阿衰online》的主笔,猫小乐工作室的成员之一,怪不得,怪不得,看他的作品总有一种若有若无的既视感,这到算得上是一个意外之喜吧。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>Hello World</title>
|
||
<link href="/2019/12/hello-world/"/>
|
||
<url>/2019/12/hello-world/</url>
|
||
|
||
<content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><span id="more"></span><p>恩嗯嗯,好好好,我知道了。</p><p>总之,就是把以前建立在WordPress的东西搬到这里来而已。</p><p>用上Hexo的原因是因为比较简(zhuang)洁(bi),好吧,其实还是因为原来的WordPress太繁了(不是错字),虽然功能强大,但代价就是非常臃肿。如果是这一点,还是可以忍受的,但因为,原来那一台是阿里云的国内机,因为某些<strong>不可抗力</strong>,与WordPress服务是无法直连的,还得我上梯子手动下安装包自己更新,我已经懒得这么做了,而一但WordPress不更新,那就是个鱼网,漏洞百出。</p><p>索性就搬到这里来吧,换上Hexo,变成静态博客,虽然不能提供什么高级功能,但是也反向的保证了核心需求,搬迁的时候,抛开太过乱七八糟的东西和随手乱留的文字,好像也没有什么文章能拿过来,希望以后能多写点东西出来吧。</p>]]></content>
|
||
|
||
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>抛开国产单机、迷文化地加成,《型骸骑士》究竟如何?</title>
|
||
<link href="/2019/12/%E6%8A%9B%E5%BC%80%E5%9B%BD%E4%BA%A7%E5%8D%95%E6%9C%BA%E3%80%81%E8%BF%B7%E6%96%87%E5%8C%96%E5%9C%B0%E5%8A%A0%E6%88%90%EF%BC%8C%E3%80%8A%E5%9E%8B%E9%AA%B8%E9%AA%91%E5%A3%AB%E3%80%8B%E7%A9%B6%E7%AB%9F%E5%A6%82%E4%BD%95%EF%BC%9F/"/>
|
||
<url>/2019/12/%E6%8A%9B%E5%BC%80%E5%9B%BD%E4%BA%A7%E5%8D%95%E6%9C%BA%E3%80%81%E8%BF%B7%E6%96%87%E5%8C%96%E5%9C%B0%E5%8A%A0%E6%88%90%EF%BC%8C%E3%80%8A%E5%9E%8B%E9%AA%B8%E9%AA%91%E5%A3%AB%E3%80%8B%E7%A9%B6%E7%AB%9F%E5%A6%82%E4%BD%95%EF%BC%9F/</url>
|
||
|
||
<content type="html"><![CDATA[<p><img src="https://media.southfox.me/ipfs/QmQ7WnER7VBet178Mmb5oEjKEuguuhoY5C7cGETJPaSsim"></p><span id="more"></span><h1 id="画面"><a href="#画面" class="headerlink" title="画面"></a>画面</h1><p>画面并不算特别精致的那种,但总体游玩下来也非常地养眼。<br>除了某些素材和道具动画,感觉像是拿系统工具画图画的 <s><del>没错就是那个幽灵宝宝的子弹,我真觉得像从PPT整出来的,还有那啥冲击波动画,那停止的感觉也太奇怪了吧(</del></s>,在这样精度不匹配的情况下给人一种怪怪的感觉。</p><h1 id="音乐"><a href="#音乐" class="headerlink" title="音乐"></a>音乐</h1><p>整体游玩过程中,我对音乐基本没什么感觉 <s>也许是因为我是个木耳</s>,而对于一个Rogue游戏来说,没有感觉就是最棒的,因为玩家一般都处于”无脑”状态,没有感觉就说明音乐契合游戏基调。<br>除了对话过程中的音乐切换,已经不能算是突兀了,已经可以算的上是吓人一跳的程度了,建议理一理。</p><h1 id="操作"><a href="#操作" class="headerlink" title="操作"></a>操作</h1><p>本作的操作比较亲民,例如起跳判定非常宽松,甚至都已经离开平台边了都能虚空起跳,非常之好,就是人物动作稍显梆硬了一点儿,希望后续更新能给人物动作加上更多缓冲帧吧。</p><h1 id="设计"><a href="#设计" class="headerlink" title="设计"></a>设计</h1><p>道具设计同时也非常亲民,不管是能连开两次的主动,还是其他的续航道具,做到了只要肯慢慢刷图,即使是手残到了BOSS战也能用道具莽死BOSS的程度,但在另一端,对于想要速刷的玩家的体验就没有那么好了,没有类似死亡细胞的限时门机制,导致想GKD点的玩家非常致命,比如我异化符文开局,8分钟冲到亡灵夫人门前,然后就萎倒在了人家裙下(<br>至于地图,每次开局,感觉就是把上一次的地图整体顺逆时针旋转了一下下而已,即视感非常强烈,不过EA阶段,房间池浅也能理解,期待后续更新能加入更多有趣的地图设计吧。<br>而在其他的小细节上,不管是教程达成不吃药威尔“剑动四方”的评价,还是在老师遗体上蹦迪这意义不明的成就,我都充分感觉到制作组的用心。<s>希望再整多一点!</s></p><h1 id="总评"><a href="#总评" class="headerlink" title="总评"></a>总评</h1><p>综上所述,在抛开各种国单,迷文化,粉丝加成下,现阶段我个人给出<u><strong>8.2</strong></u>分的评价 <s>但只要你给我谜酥看,我就给满分!!!</s> ,虽然突出亮点不多,但胜在非常扎实,值得一个Good评价,期待在后续的打磨下,能变成一个Amazing的游戏吧。</p><hr />最后,再说一下我个人对游戏非常担忧的一点,就是,<strong>游戏在不时地打断以Rogue为主体的体验</strong>。<p>私以为,Rogue的的乐趣在于通关过程上,用熟练的操作打过boos,在商店见到一个IMBA或是能和身上道具组合打出完美combo的道具地狂喜,都是Rogue游戏的爽点,而在这过程中,玩家一般都凭直觉行事,不管是夏季尔乱滚还是做出道具选择上,都处于一种“右脑”状态下,所以这也是为什么Rogue游戏大都选择了黑暗之魂式叙事手法,即,把剧情和相关设定掰碎分散在一个个道具说明或是一些小的剧情碎片中,由玩家来在游戏后自行拼凑出整体故事(以撒就是这方面的经典例子),这样做的目的,就是为了剧情阅读(左脑状态)<strong>不打断</strong>玩家游玩主体部分的体验(右脑状态)。</p><p>而本作似乎想把剧情当成一个重点?不管是大量穿插游戏的对白,还是地图上设计的“善良的怪物”都在整体拉高剧情的存在感,但不可避免的,<strong>和Rogue玩法产生冲突</strong>,就比如“善良的怪物”初看时会看上两眼,下一个不同对话,也会看上两眼,而下一次发现是相同对话,就开始疯狂不停地按键跳过了,这样子到最后就开始养成习惯了,冲到面前,按上,然后按按按按按,东西给的是什么也没看清就冲到下一个房间了,习惯养成后,即使到了新的地图,知道是一个新的剧情对话,也会不由自主的想按按按键跳过了。</p><p>放一个到后面都会按键跳过的对话,那还不如整一个,“啊,我心情不好,你帮我把下一个房间的怪搞定,我给你一瓶药”的任务来的更好。</p><p>而Rogue死亡人生重来又随机道具的特性,注定了重开是一件家常便饭的事,而且,<strong>下一盘总比这盘好</strong>,有时候,因为失误次数过多,或者没拿到好一点的道具,就会陷入自暴自弃的状态,”啊,要是我打不过下一个boss或者下一个宝箱不是个好道具,那我快速死掉重开得了“(以撒这方面已经做到了丧心病狂的程度了,长按个R键直接重来)。总而言之,就是利用玩家对随机的痴恋,让两次游玩的影响降到最小,啊我死了,没关系,我下一次一定能打败那BOSS!/一定能拿好道具!下一盘,我来了!!!。。。然后威尔就跳出来和你吹水了,诶,没办法,听吧。类似这样的的剧情对白真的满割裂整体体验的。</p><p>我的建议是,以其把剧情当成必经之路强制要玩家看,不如做成非强制或是奖励的形式(比如整个时光回廊啥的,加上各种丧病条件,让玩家一次次去冲击,最后再解锁某个人物的关键剧情之类的?),当然了,我相信制作组想在Rogue的叙事上做出突破的心思,现在的样子是做出取舍的结果?也许有后招憋着?但现在的样子,我是觉得不妥。</p><hr />最最后是一些我觉得需要改的小细节 <s>鸡蛋里挑骨头</s><ol><li>进去教程第一句话,按空格回车是没有用的,明明刚才进来是用回车,咋回事啊?然后键盘摸了个遍最后才发现按J才可以继续对话。 <s>大热天,浑冰凉,泪忍流,我们键鼠玩家什么时候才能真正站起来!</s></li><li>剧情文本逻辑有问题,第一次进图,看见威尔,主角自己吐槽这是平行世界的威尔吧。我当时就有点小疑惑,你咋知道这是平行世界啊,最后死回去才触发平行世界这条剧情对话。。。</li><li>平砍连打,起跳和冲刺可以打断攻击攻击动作。但为什么下平台不行?!经常出现我想下平台还要看完主角呆砍一会后,才下平台。</li><li>对话时候竟然不是无敌的?!我当时在实验室跟人对话呢,那个穿墙独眼怪就冲了过来,直接摸了我三格血。</li><li>樱闪配上兽人魂石(增加移动速度并改变跑步姿势那个)会让后续动作变得非常喜感。</li><li>JKUI的默认键位是真滴反人类,把必杀放到随手能按到的地方(shift,空格),要比起要移动右手指去按I反应速度快了不止一截。<s>大热天,浑冰凉,泪忍流,我们键鼠玩家什么时候才能真正站起来!</s></li><li>打开地图游戏会暂停,对于快节奏的Rogue游戏来说有点不适,而且最主要是不能通过地图选择传送门,经常出现为了去传送门而跑一大段图的事情。</li></ol>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 游戏 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 游戏 </tag>
|
||
|
||
<tag> 评测 </tag>
|
||
|
||
<tag> Kelipot </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>他们来啦</title>
|
||
<link href="/2019/10/%E4%BB%96%E4%BB%AC%E6%9D%A5%E5%95%A6/"/>
|
||
<url>/2019/10/%E4%BB%96%E4%BB%AC%E6%9D%A5%E5%95%A6/</url>
|
||
|
||
<content type="html"><![CDATA[<p>开头,又是丧尸横行的世界,我也是一如既往的被尸潮追着,但是这一次不一样,大概是因为我已经习惯了吧,这一次的焦躁感没有以前那么强烈了,感觉像是在跑田径一样。跑啊跑啊,就有一个丧尸追在我身后,然后我娴熟地(?)掏出<strong>一件东西</strong>反手一甩,就将丧尸击退了。</p><p>心中想着,<strong>只要保持前15%就好了</strong>,然后匀速的往前跑。突然身后传来惨叫声——回头瞟一眼,看起来是有人被追上了,心里却想着,鲜血和惨叫是绝佳的目标,后面的丧尸即使抢不到一块肉也会扑过去,好级了。之后的事,就是我加快脚步往前冲了。。。</p><span id="more"></span><p>接下来的场景似乎是在我家里里,我呆在房间里,突然后门传来敲门声,我赶过去,似乎是我妈在外面,但是当我的手碰到门把手的时候,我迟疑了,毕竟在一个丧尸横行的世界,开门小心点总没错,随后我小心的推门到半张,发现的是地上的一滩血迹,门后站着的身影眼珠也泛着惨白——果然!我碰的一声关上门,随即狂奔到阳台,发现的不人是我以为的人——是我的高中物理老师。</p><p>“你被咬了?”我对着老师,惊疑不定的问到。</p><p>诶呀,这也是没办法的事啊,老师开始用她那种<strong>惯有</strong>的语气说到。</p><p>。。。</p><p>不,不行,我不同意,这种事怎么可能发生呢?心中的念想逐渐激烈,随后达到了可以影响梦中事物的程度——场景一闪,<strong>时间开始倒流</strong>到我了站在门前的那一刻。。。还没当我的手碰到门把手,我就醒了,娴熟的翻过身,拿起手机,7点,好,还能再睡两个小时,睡之前不忘吐槽一句——怎么又是丧尸梦。</p><p>&nbsp;</p><p>接下来,我似乎身披一件黄色雨衣站在一块空地上,旁边也是形形色色披着各色雨衣的人影,之后我呼吸一滞——这些雨衣下的,不是人,<strong>是丧尸</strong>!我开始有些慌乱了起来,同时注意到了远处有一道墙,墙里面看起来是人类的聚集地,高墙上有着不少人影向这里观望。</p><p>好吧好吧,屏住呼吸,现在不能让他们发现我,看起来这些丧尸聚集在这里,,,<strong>似乎是在开会</strong>?之后我迷迷糊糊的熬到他们都解散了,然后混水摸鱼的摸到墙边,将衣服往里一抛,之后连忙地翻进墙去。。。</p><p>&nbsp;</p><p>&nbsp;</p><p>解析:</p><p>(怎么说,看起来因为丧尸这一元素出现的太多次了,我已经不太当一回事了,然后潜意识就改变了表现形式,以来激起我的注意!?)</p><p>第一个场景中的反手掏出的东西,第一感觉是枪,但我感觉又不是枪(?)这里我感觉是一个要着力的点,但不是枪,又会是什么呢?(<del datetime="2019-10-12T03:03:18+00:00">不可能是口口剑吧</del>)一般而言,丧尸对我来说代表焦虑,而对抗焦虑我一般会去喝肥宅快乐水,当天入睡前我也确实喝了一瓶,,,难道我反手一甩的是快乐水?emmmm,maybe?</p><p>之后的保持在前15%就好了,让我想起那个旅行人与熊的故事——</p><p>两人旅行,一人绑紧鞋带,另一人嗤笑到,怎么,你还想跑过熊?</p><p>他答到,我不求跑过熊,我只求<strong>跑过你</strong>。</p><p>结合之后的尸潮,看起来解释为关于竞争压力大半是对的,而且至少这次我没拉人当肉盾,看起来素质有了提高(?)</p><p>&nbsp;</p><p>下一个场景,令人在意的点是我妈和高中物理老师,可以肯定梦系统将两人压合到了一起,这代表潜意识要我注意两人的相同(或不同)点,可是关于这里,我还没有什么想法。</p><p>&nbsp;</p><p>再下一个场景,令我惊讶的事就是丧尸在开会?这代表丧尸产生了智慧,而如果只是单纯的焦虑,是没必要产生智能的,所以,要么就是丧尸在我梦中代表的意像发生了改变,要么就是我现如今焦虑的对象发生了改变,关于这一点,我暂且蒙在鼓里。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>年度后悔网站</title>
|
||
<link href="/2019/08/%E5%B9%B4%E5%BA%A6%E5%90%8E%E6%82%94%E7%BD%91%E7%AB%99/"/>
|
||
<url>/2019/08/%E5%B9%B4%E5%BA%A6%E5%90%8E%E6%82%94%E7%BD%91%E7%AB%99/</url>
|
||
|
||
<content type="html"><![CDATA[<p>梦见一开始好像是在浏览器的设置页面,随意的翻看下,看到了一个。。。什么什么的年度报告。</p><span id="more"></span><p>点进去之后,注意到它的网址是houhui.xxx(后悔?),然后就开始往下翻。</p><p>往下翻到的第一个专栏页面中间是一个罐装可乐,左边辐射状的散出可口可乐的颜色(红色),右边则辐射出百事可乐的颜色(蓝色),底下有一串字——…可乐…调剂</p><p>再往下翻则是一个图片,左上方是一个张着的嘴,看起来像是要吃掉下面的东西的样子,而下方是一团糊糊的马赛克,依稀看起来像是企鹅。</p><p>往周边留意,旁边文字写着,有那么多古老物种肉我们没有吃过,为了不浪费,我们应该去有效利用这些肉…</p><p>––––––––––––</p><p>解析:</p><p>首先是网址houhui.xxx,很明确的说明这个梦的基调——后悔,但具体指什么,又是谁让谁后悔,要具体分析一下。</p><p>第一个场景的可乐,让我想起了在QQ空间里一个朋友分享的动态,大概是三个人一起出去玩,然后玩猜可乐的游戏——蒙着眼睛喝下可乐去猜是什么牌子的可乐,最后一次测试他们就很不厚道的把两种品牌的可乐混在了一起。。。</p><p>所以这可乐是把朋友做的游戏和混合可乐结合印象,也许是映射了我人际关系的问题(某些地方的后悔之处?)调剂这个词也意味着我应该要处力好人际关系?但这个片段太模糊不清,还是很难分析出啥。</p><p>下一个是张着的嘴这个景象,想到吃和旁边的“我们应该多吃点不同物种的肉”也对应起来,这让我想到了川普政府重创濒危动物保护法的新闻(大幅缩减该法案的经费,理由在于这一理念拖了商业的后腿)</p><p>而这又让我想到了特朗普,可是从特朗普上我又实在是联想不出来什么,最近身边也没有类似特朗普的人或物,,,</p><p>而上面这两个场景和后悔的联系是:特朗普!你们这么做,一定会伤害到地球,伤害到环境,伤害到人类的!!!……嘛?我不觉得我的潜意识会这么高尚,但是我实在分析出来其他什么东西了。。。</p><p>最后是关于马赛克企鹅的场景,虽然梦中联想到吃,但是有时候应该把思维逆转一下,就会发现!——</p><p>张着嘴:除了吃下去还可以是吐出来</p><p>马赛克:是阻力的象征,也可以代表秘密</p><p>企鹅:一个神秘的软件形象代表</p><p>所以,综合起来,就是通过企鹅来吐露出秘密,这,和我最近为鱼鱼咸计划的功能非常有联系。。。</p><p>&nbsp;</p><p>190821按:</p><p>破案了,突然想到了我工作中的上司,把我辞职单的日期往后提了一个星期(计划于21号走,却被改到28号),让我的痛苦延长了一个星期,这个改动我辞职书的场景被梦系统和川普政府的行为整合到了一起。</p><p>所以,这段可以理解,叫你不以力据争,最后被修改了文件(保护法——辞职书),现在落到这样了地步了吧(被迫吃奇奇怪怪的肉——被迫多工作一星期),啊哈哈,该!后悔去吧!</p><p>这,就是一个悲伤的故事了。。。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>二战?!</title>
|
||
<link href="/2018/11/%E4%BA%8C%E6%88%98%EF%BC%9F%EF%BC%81/"/>
|
||
<url>/2018/11/%E4%BA%8C%E6%88%98%EF%BC%9F%EF%BC%81/</url>
|
||
|
||
<content type="html"><![CDATA[<p>早上9点才摸起来,然后打手游又摸到了12点,然后跑出去吃饭&mdash;&mdash;回来时又摸机到3点&mdash;&mdash;总之,摸爆了,所以爆了之后,就比较累,所以在下午三点种睡下.。。。</p><p>总之,做了个非常长的梦&mdash;&mdash;或者,剧情挺丰富的梦,但是想起来虽然挺鲜活,变成文字就有点苍白了,果然梦记这种东西得天天练习一下才行鸭&mdash;&mdash;</p><span id="more"></span><p>接下来是比较能串在一起的场景&mdash;&mdash;</p><p>一开始,我在一个庭院里&mdash;&mdash;不知道跟着谁,可能是家人,朋友,又有可能是独自一人,这个庭院是一个很标准的西式家庭房子的院子&mdash;&mdash;里面的家庭也挺标准的,一个男人,一个女人,还有几些孩子,他们梦中都提到了名字,可惜都比较模糊&mdash;&mdash;所以我都给忘了(惭愧惭愧),然后我们似乎处的很好,度过了一段愉快的时光&mdash;&mdash;</p><p> 然后场景几经变化&mdash;&mdash;中间似乎我醒来过,听到我们班班长进来找人的声音&mdash;&mdash;&nbsp; 之后,我重新睡了下去,然后发现,我还处在那个院子里,我旁边的人似乎已经走了,似乎就只有我在哪里,然后我发现,女主人在捂着脸在哭?我问她为什么在哭,然后她挥挥手指了周围,我抬起头环视周围,发现周围竟是一样的院子,院子周围的院子,还是一样的院子,然后一样的院子里,都是同样的女子在捂脸哭泣,这算什么?终究发现了自己的位置?像是一个NPC,就这样被安排在那里?我不知道。。。</p><p>接下来,我迷迷糊糊走了出去,走到了一个街道一样的地方,然后跟一名男子搭上了话,用的还是英语,我还在脑海里拼命的组词,哇,这么个逻辑活都没能让我知梦,将这个梦变成清明梦,果然睡前的暗示是有必要的(或者说我最近睡眠紊乱,dream power尽失)。</p><p>&ldquo;该死的,要不是最近几年的二战&mdash;&mdash;&rdquo;</p><p>what?!最近几年?可是我感觉到现在依然是8012年啊,然后我抬头,发现街角的一个房子上的标语上写着&ldquo;World War ⅱ&mdash;&mdash;&rdquo;</p><p> &ldquo;额,但是&mdash;&mdash;&rdquo;我语无伦次的说到&ldquo;我们那里,二战是1945年开。。。不,1945年就结束了啊,这里这么就&mdash;&mdash;&rdquo;然后梦就崩掉了,我醒过来了。</p><p>大概,我是梦穿到了一个其他的世界线?现在想来,梦里的2018年面没有出现什么高科技产品,大概,是因为事情走向的差异吧,相比于我们,科技发展和事情延迟了70几年吧&mdash;&mdash;</p><p>然后是一些零碎的场景</p><p>第一个是我在家里打开第二台笔记本电脑(但是也只是梦里的感觉,毕竟家里面没有第二台本本),发现系统已经被刷掉了,没有图形界面,打开竟是一些命令字符&mdash;&mdash;我感到几丝。。。惊诧和落寂?</p><p>然后 是一个礼堂什么的,吃了一些什么菜,然后是一个巴士开走了,不知道是什么人在追赶,大概&mdash;&mdash;以前也梦到过这个场景?</p><p>接下来是我梦到在一个楼梯隔间计划着什么事,不过回想不到什么,里面的阻力异常的大,大概是潜意识&ldquo;刻意&rdquo;为止压抑的,毕竟这个场景我有着比较大的情绪起伏的。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 梦记 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>形式主义过于浓重</title>
|
||
<link href="/2018/11/%E5%BD%A2%E5%BC%8F%E4%B8%BB%E4%B9%89%E8%BF%87%E4%BA%8E%E6%B5%93%E9%87%8D/"/>
|
||
<url>/2018/11/%E5%BD%A2%E5%BC%8F%E4%B8%BB%E4%B9%89%E8%BF%87%E4%BA%8E%E6%B5%93%E9%87%8D/</url>
|
||
|
||
<content type="html"><![CDATA[<p>总之,刚才,搞了个什么入党积极分子评选班会,上面还钦定划了指标,要占到全班的2/3,emmmmmm,还是第一次听说这么奇怪的要求,而且,过程也是极尽其繁琐,清规戒律也是多如牛毛,什么什么不能提前离场啦,要不就算作废,什么什么填报要求啦,BALABALA的&mdash;&mdash;不过,与我何干?反正我还没成年,入不了党,我也一直在用阅读器在美滋滋看着书,看得是克苏鲁的时光魅影,剧情走向到到是在我预料之中,这可能是我被现在发达的文化产业荼毒的结果吧,不过能在30年代就写出这种作品,爱手艺(H.P.LoveCraft)当真是大神了。</p><span id="more"></span><p>然后也是说到今天刚到货的新设备&mdash;&mdash;iReader Light版,或者说,穷人版,屏幕相比以前的那个显得比较小巧,不过我倒是蛮喜欢的,在手上把玩到不显累(相比以前那个)还有就是切换背光灯的按键被砍掉了,恩,省成本后果吗?硬件方面我到满意,不过赠品方面就不得不让我说出一句&ldquo;辣鸡坑阅&rdquo;了,以前本来的代金券是直接附送的,卡片样子还做的挺漂亮的,结果现在却是要微博分享才行&mdash;&mdash;而且每个星期才抽5位。。。不过,這阅读器的拆箱也是让我想起了在四中的时光呀。。。记得当初上面附赠的书好像有一本走进非洲来着呢。</p><p>早上因为是三四节才有课,所以一口气睡到了九点,所以做的梦也比较长&mdash;&mdash;情节也是比较荒诞离奇(即使在我做过的梦里来算),感觉大有东西可挖,不过现在才写出来,估计会缺失很多细节了。</p><p>—————————</p><p>是一座大厦&mdash;&mdash;外观似乎没什么,里面倒是没什么,然后就是没什么来由的我在里面,似乎我是一名看客,里面发生什么事都与我无关,然后目标就是往上走,但这个大厦,气氛有点压抑,发生了很多奇怪而又可怖的事,但是我还是往上走,其中记得比较清楚的是楼梯上的场景,一张铁丝网还有后面类似行李箱堆的东西?不过,往上走的不止我一个,还有其他人拼命得往上走,毕竟,这个大厦很恐怖,不过,我并没有强烈的感觉,还跟旁边的一个人说着,你想(离开这大厦?)的话。</p><p>然后场景变换&mdash;&mdash;大概是变了好多,其中我醒了几分钟,还听到一个舍友要出去,其他舍友要他帮忙带早餐的声音,不过因为我想赖床就继续睡了下去&mdash;&mdash;然后我在一个走廊里,旁边是一个房间门,门里边&mdash;&mdash;是一个妇女和一些人,他们。。。似乎就像是在地狱里边?不停的**<u>重复自己的死法</u>**?妇女拿着一把刀往自己的腹部割去,然后循环往复&mdash;&mdash;其他人好像也是一样的,我在走廊旁,似乎是不能动得样子,不过,我就是看着&mdash;&mdash;并没有情绪起伏。。。</p><p>&ldquo;呐,逃脱这里的诀窍&mdash;&mdash;&rdquo;一个人,就是之前我帮助的那个人,不知怎么的,呈坐姿出现在了我的差不多肩上(?)的地方,然后,我似乎又能动了,于是又一同前往更高层——</p><p>似乎场景错乱了(梦系统的运作总是稍显&ldquo;凌乱&rdquo;的)似乎又有一些在下层的故事,然后什么一个在顶层的我发现有一个很重要的事要做(找人?),打开门就急急忙忙往下走了&mdash;&mdash;之后就是带人来到上层,然后一个人挡在了我们面前(这可能也是我),然后对面的将一些抛射物扔向了我,看起来是开打了&mdash;&mdash;然后我伸出手,将最前面的抛射物阻住,将其勾划成一椭圆形挡住了后面的抛射物(感觉像是修仙文斗法一样)</p><p>后面就没什么了,其中梦中出现了多个我,感觉像是本我,自我,超我一样?还有好多细节也待考证,不过那个&rdquo;地狱&ldquo;房间肯定代表着什么负能量吧,不过,这次终于不是以丧尸的形式了,终于有点新花样了诶。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
<tag> 梦记 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>处于摸与不摸叠加态</title>
|
||
<link href="/2018/11/%E5%A4%84%E4%BA%8E%E6%91%B8%E4%B8%8E%E4%B8%8D%E6%91%B8%E5%8F%A0%E5%8A%A0%E6%80%81/"/>
|
||
<url>/2018/11/%E5%A4%84%E4%BA%8E%E6%91%B8%E4%B8%8E%E4%B8%8D%E6%91%B8%E5%8F%A0%E5%8A%A0%E6%80%81/</url>
|
||
|
||
<content type="html"><![CDATA[<p>大概是在5号的这个时间,大概也是在写着这篇日志的时候,大概是在鼠标的闪转腾挪清脆点击之声中&mdash;&mdash;BOOM!!!电脑卡死了,BGM的最后一个音符也被无限拉长,变成了刺耳的噪声,然后,电脑就蓝屏了&mdash;&mdash;错误代码DPC_WATCHDOG_VIOLATION,起初我还是存有忍耐之心的 ,觉得只是一次普通的卡死,重启了之后 肯定是不会再发生的,结果我还是太navie了,下一次不到二十分钟又蓝屏了。。。</p><span id="more"></span><p>经过几次的强制关机之后,我终于忍无可忍了,想着这破该系统,要不是看着装机附赠的office16学生版,我才不会用垃圾win10呢,更何况我已经把office绑在了微软账号上,现在系统已经这样了,那就更没有用的理由了。</p><p>接下来快速的选择备份一下,然后就开始安装Ubuntu了,这个系统安装一直在电脑里,只是我一直没怎么用而已&mdash;&mdash;现在只是重新安装一下把Windows覆盖掉就行了&mdash;&mdash;不过过程不顺利,可能是因为系统安装把自己的安装文件也给覆盖掉了,无限卡死,诶,看起来硬盘安装的缺陷就在于此啊,没法,只好跟旁人py一下,不过都不太情愿毕竟将u盘制作成安装盘得格式化一遍,最后是一位因为u盘是刚买的无所谓的 舍友将u盘借给了我,mua~感谢感谢,这可都算是再造之恩了鸭,接下来就是安装时间了&mdash;&mdash;也相当于跟巨硬诀别了,以往的随便动动鼠标就享受安装的过程或是多种多样的.exe是很难感受到了,不过,这也是我的选择,通过不停的折腾自己,自己的技能也会得到磨炼吧。</p><p>但是我还是低估折腾的程度了,比如校园网的验证,命令怎么使用,软件的安装路径,怎样兼容Windows的软件的BALABALA的,不得不感叹为什么微软的霸主地位是多么巩固了,其他系统不能简简单单运行.exe文件就是一道相当于王母娘娘发簪划下的银河了&mdash;&mdash;我是要抱着多大决心才能把非Windows系统作为自己的日常系统鸭——</p><p>不过,随着折腾,日常所需的各种需求也是能满足了,而且随着探索,我也尝到了几丝甜头,不过,想要如臂挥使新系统还是得多多磨合一下的。最近的空余时间也是扑在了这个新系统上,所以也是没什么时间写日志啦,不过,明天有就是还有一个单片机编程什么的,现在还摸着还合适吗?不过,大家都是擦菠萝(赤膊)上阵,所以不方。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>摸还是不摸?</title>
|
||
<link href="/2018/11/%E6%91%B8%E8%BF%98%E6%98%AF%E4%B8%8D%E6%91%B8%EF%BC%9F/"/>
|
||
<url>/2018/11/%E6%91%B8%E8%BF%98%E6%98%AF%E4%B8%8D%E6%91%B8%EF%BC%9F/</url>
|
||
|
||
<content type="html"><![CDATA[<p>总之,因为比赛的事,最近都很忙,而且比赛的结果也是当个分母&mdash;&mdash;虽然我一开始就知道了,我们队伍是最摸的,因为有我这个摸鱼FLAG在,所处的任何团体都会比较摸(算是诅咒嘛?)然后现在就比较咸了一点,当然也不知道干什么,不过开心的事还是有的,比如我破了10块的财买的阿里云的服务器体验还是蛮好的,设置的vpn服务还是可以帮我突破23点的断网限制,速度也有3~5M,延迟也喜人(有的时候甚至比宿舍楼开的网线还要好),不会玩个什么moba就化身迈克杰克逊了,全场太空步。现在也打算将博客安排在这里了。</p><span id="more"></span><p>今天早上,一直睡到9点多,睡的时间比较长,做得梦也非常多,但是没有什么是让我产生特别大情绪波动的梦,所以就没刻意去记了,然后摸到10点多起床,整理整理就出去了,校园里似乎在开什么越野比赛的样子,不过我只是远远的眺望了一会,并没有走近去看,我此行的目的是做一个调查,看一下学校里植物的种类(军训的时候我就打算干这个了)不过逛了逛,发现虽然认识的有一些,但是自己的知识储备还是太少了,连基本的分类标准也半生不熟,所以怎么准确识别植物名呢?所以打算先放一放,打算恶补一下知识再说,然后去剪了个头发,说来惭愧,没有父母的督促,自己的头发好像两个月都没剪了,校园里理发店的小哥一直推荐我修头发,开会员什么的,不过可惜,我穷,没钱,所以小哥是打算是注定不成功&mdash;&mdash;幸好没有遇到暴躁老哥,要不然剪刀往后颈一抹我就G了鸭。</p><p>然后我就在外面的一个椅子上肝着崩崩,今天的天气似乎不错,一直有着微风荡漾,天空也出了几丝微弱的太阳,刚剪短的头发感受尤为强烈,估计以后冬天到了就没有这么好的天气了。</p><p>从来没有在这种环境下肝过手游呢,算是一种新奇的体验吧,11点多的时候,我慢悠悠的晃上食堂,再摸了一阵子吃完之后,又慢悠悠的晃下来,发现我们班的同学在发传单,是破该协会搞的鬼吧,妈诶,免费苦力用的舒服的啊,然后我拿起传单&mdash;&mdash;单片机编程知识大赛,似乎有点兴趣,但是刚刚完事一个比赛又来一个?有点不情愿,但是编程知识还算好吧,只是笔试做试卷而已。。。先收下传单再慢慢考虑吧。</p><p>中午也就是摸了。。。不过今天有一个MC论坛上认识的网友要找我联机搞地图,只是希望到时候不要延迟感人吧,他是电信我是联通,感觉是要变成最远的距离鸭。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>军训结束了——咸鱼知多少?</title>
|
||
<link href="/2018/10/%E5%86%9B%E8%AE%AD%E7%BB%93%E6%9D%9F%E4%BA%86%E2%80%94%E2%80%94%E5%92%B8%E9%B1%BC%E7%9F%A5%E5%A4%9A%E5%B0%91%EF%BC%9F/"/>
|
||
<url>/2018/10/%E5%86%9B%E8%AE%AD%E7%BB%93%E6%9D%9F%E4%BA%86%E2%80%94%E2%80%94%E5%92%B8%E9%B1%BC%E7%9F%A5%E5%A4%9A%E5%B0%91%EF%BC%9F/</url>
|
||
|
||
<content type="html"><![CDATA[<p>早上起来,并不怎么困,虽然今天修仙到3点多,不过因为稍稍计算了一下睡眠周期,所以起来时不是在深度睡眠状态,不至于欲仙欲死,然后就是准备准备,面对军训生活的最后一天了!</p><span id="more"></span><p>到场时,人群挤成黑压压的一片,天空也少见的出现了太阳&mdash;&mdash;总之,是个好日子,不过,对于我们这种一直在多云天气训练下的我们,艳阳高照的天还是有些受不了(至少对咸鱼来说),然后就是总教官上场了,还小小得排练了一下,之后就是校领导登场了,一连报了十几个校领导,我们也得鼓掌十几次,有点小尴尬,最后的掌声都开始变稀稀拉拉的了。</p><p>之后就是演练了,检验一下十四天的结果,一个营一个营下去&mdash;&mdash;到下个议程时,我们教官已经离场了,我们转过头,教官已经上了包车了&mdash;&mdash;不知教官是怎样的心情呢?我们的营是最摸的,教官没少受气,不过,我想多少是有丝不舍的吧,最后的离场,教官连招呼都没有打,是已经习惯了吗?反正下一站,又要面对新的人了。。。不过即使教官离开了,他的口癖还是会在班上席卷一阵子的吧。</p><p>讲话讲完了之后,随着校领导嘴里蹦出&ldquo;到此结束&rdquo;时,全场都爆出了一些欢呼声,不过我的心情到还平静,毕竟,这个军训整体并没有什么太大波澜,对我来说,可有可无吧,不过我走在去宿舍的路上,听着身后的操场传来的劲歌声,心里还是会有几丝迷茫的吧,然后我到超市买了瓶冷饮慢慢晃上宿舍,打开电脑开始摸。</p><p> 13点时,终于集齐5人去守护京京了,看到加载界面一排过去的闺蜜挚友标志,不免也会有几分感慨吧,之后也是像极了在四中的时光,像是一直在玩单机的上路,不时会因为网络(虽然这次是因为机型问题)不时地杵在某地然后开始进进出出的某人,一直想着骚人的小东西,一直打中却基本没怎么支援过边路然后畏畏缩缩闷声毒瘤刷装备想着发大财的中路,一直在崩的下路。。。180天过去了,人们现在也各奔东西,但是有一些东西是不会变的吧,不知道这游戏的纪念系统会不会出到10年呢(看游戏的运营状况感觉悬),如果到那个时候,还能聚在一起时,到底是什么光景?真是好奇啊。</p><p>然后我去补觉到17点,然后摸到了晚上,想着明天都要上课了,还有一大堆事情要做,不免就有些脑壳痛。。。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>嗯。。。。?我现在在干什么呢?</title>
|
||
<link href="/2018/10/%E5%97%AF%E3%80%82%E3%80%82%E3%80%82%E3%80%82%EF%BC%9F%E6%88%91%E7%8E%B0%E5%9C%A8%E5%9C%A8%E5%B9%B2%E4%BB%80%E4%B9%88%E5%91%A2%EF%BC%9F/"/>
|
||
<url>/2018/10/%E5%97%AF%E3%80%82%E3%80%82%E3%80%82%E3%80%82%EF%BC%9F%E6%88%91%E7%8E%B0%E5%9C%A8%E5%9C%A8%E5%B9%B2%E4%BB%80%E4%B9%88%E5%91%A2%EF%BC%9F/</url>
|
||
|
||
<content type="html"><![CDATA[<p>星期五(1026)的时候,早上和往常一样,摸摸鱼,被教官训几顿,然后一切又照常——</p><p>期间唯一留下印象的是早上起来时候做的梦&mdash;&mdash;梦到了一只狐狸,不过倒是怪模怪样的,毛是炸炸的,活像下司犬,而且比例也不太对,大小像是阿拉撕家那样般大,根本不像一个正常的狐狸,所以应该是梦系统造中合成功能造成的吧。不过我没想到这些元素分开到底代表什么,或者说,我不想去想&mdash;&mdash;就让他变成一个美好的谜吧,毕竟不是每个梦都需要解析的。</p><span id="more"></span><p>下午晚上还是跟以前一样吧(或者说是因为军训久了,类似的程序过的多了大脑的印象就减少了)方队摸摸鱼,被教官训斥几顿又again了,没什么意思。。。晚上在寝室里想一下关于如何做word和ppt,不过好像就找了个模板就没什么进度了。。。好像后面转头给播放器搞个歌词功能去了。</p><p>星期六(1027)的时候,早上和往常一样,不对,应该是不一样了,毕竟明天就是结营了,所以得彩排一下,早上2次下午2次,晚上再来一次,总共5遍。。。可能。。。会有用吧,不过其中让我感到惊讶的就是彩排中的形式主义过于浓重了吧,</p><p>“有请xxx校长讲话!”</p><p>&nbsp; 几秒后——</p><p>“掌声!感谢主任带给我们的精彩讲话!”</p><p>哇,感觉有点小尴尬欸,要不要彩排到这种地步啦。</p><p>下午吃饭时,突然想起约定的京京活动动员了起来了没有,然后又是BALABALA的一顿,之后就是敲定好了成员,如果运气好的话大概能筹成五黑吧&mdash;&mdash;不知道能不能感受到以前的味道呢?希望今天结营仪式后下午不要冲出一个什么破该协会开会占我时间就行——</p><p>晚上——一想到word和ppt的问题我就头大。。。开始想要不要连夜爆肝做好&mdash;&mdash;好像现在似乎就是在这么做了。。。不过我有在10点钟睡了一小觉,不知道能欺骗体内的生物钟多久呢?这次修仙是经过密切筹划的,主要是给后面的生涯积点经验&mdash;&mdash;不过,一点了什么正经工作还没做真的好吗?啊啊,得加把劲了,也许中途凌晨4、5点时可以考虑拍张夜景挂到博客上。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>一如既往的摸</title>
|
||
<link href="/2018/10/%E4%B8%80%E5%A6%82%E6%97%A2%E5%BE%80%E7%9A%84%E6%91%B8/"/>
|
||
<url>/2018/10/%E4%B8%80%E5%A6%82%E6%97%A2%E5%BE%80%E7%9A%84%E6%91%B8/</url>
|
||
|
||
<content type="html"><![CDATA[<p>早上起来因为昨天(准确来说,今天)修仙的缘故,早上起来时是一副欲仙欲死的模样,训练时也无非训练几套就休息(毕竟动作教完了嘛),不过这样我就更想睡了,又睡不了,感觉又是。。。。在做睡眠训练</p><span id="more"></span><p>其中说到下午要进行消防演练,要我们起来时做好准备,一听到哨声就拿毛巾打湿弓着腰下去。。。</p><p>中午回去时早早就睡了,大概睡了一个多小时吧,中间有一段时候感觉自己口腔剧痛无比,不过现在看来,大概是被潜意识骗了,因为最近我口腔边边长出来一颗牙齿(难道是智齿?),感觉有点不舒服,不过远还没到达痛的程度,所以这次很有可能是一次假醒,其实我是在梦里。之后做的梦。。。大概是一个无脑的爽文的主角的故事,但是。。。剧情歪了,尽是被小潜调过的痕迹,感觉有点哭笑不得呢。</p><p>下午起来,整理之后拿着毛巾就等着了,然后依稀听到了几声哨声,没得说,冲下去吧,结果一到场,发现,竟然是假哨!真是想把那个人拖出来打死,然后就到超市买东西,买了个五羊雪糕,结果发现是5块钱,感觉奢侈的很啊。。。然后教官要求我们重新上去时,我们宿舍鸡贼的很,躲在二楼,一吹哨就冲下去了。</p><p>后就是讲座了,无非就是老调重弹的灭火器的使用,没有讲多久,剩下的时间就是训练了,解散去吃饭时的路上,惊觉要看看京京跟阿峰的纪念日是什么时候(虽然我昨天就有在考虑了),更新了80多M进去时发现还有九天,然后把截图发给他,然后东一句西一句的聊着。。。嗯,然后我提议要星期天要再现在四中的时候的阵容,虽然现在已经半年过去了。。。如果真能办到,我一定喊上一句&ldquo;呜呜,时隔半年的摸鱼号重新发车啦&rdquo;。</p><p>晚上,教官来了个报数,发现我们方阵少了50人,然后又来个大点名,不知道那些人怎么想的,昨天的事没有吸取教训的嘛?还是觉得晚上的集训无足轻重?反正看戏就行了,估计下一年这些小机灵鬼要重修吧,我还是挺想看到明天是什么样的光景呢,一定要火爆一点啊(看戏脸)。</p><p>总之,今天就是这样结束了(至少本文截止时)。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>标题摸了</title>
|
||
<link href="/2018/10/%E6%A0%87%E9%A2%98%E6%91%B8%E4%BA%86/"/>
|
||
<url>/2018/10/%E6%A0%87%E9%A2%98%E6%91%B8%E4%BA%86/</url>
|
||
|
||
<content type="html"><![CDATA[<p>内容也摸了。</p><span id="more"></span><p>早上没有什么值得说的事,就是快结束的时候又来个全营大集合,下午又来一个讲座&mdash;也是军事理论课,不过区别就是这次是面向整个级的吧。</p><p>中午,我在给这个博客进行优化工作,虽然这个博客可能一生的UV(独立访客浏览量,即1天内相同的访客多次访问的特产也只计算1个UV)都不会超过10啦,但是优化优化我觉得还是必须的吧,毕竟这博客算是自己一个小小的独属于自己的空间【而且我还可以让这个空间随时地开放或是不开放(比起那些一直开放不时会受气的空间来说,这也算是优点吧)】</p><p>然后我花了一中午的时间给这个博客做了read more功能,这样主页上的文章不全部显示了,只显示指定的部分(比如这个文章的小把戏也是这个功能的应用哦)感觉有一种含蓄之美(雾)。然后就是做了静态化的工作,这样在辣鸡网络的前提下,浏览速度都有一个大的提升,后面还做了一个邮件系统,这样有人在博客上留言我可以收到邮件通知,或者我回复留言时,系统可以根据访客留下的邮箱拟写一份提示有人回复的提醒邮件(这个才是重点),后面打算针对图片进行优化工作,不过没什么头绪。。。</p><p>下午,讲座时间,讲师是国务军训什么方面的主任,看起来来头很大,还能指挥我们的教官,不时得还能训斥两句,不过讲的内容倒是没什么,就讲一些什么古代军事啊,近代军事,现代军事啊什么的,什么古代孙子兵法,赵括,白起啥的,不过我都知道。。。所以我才感到无趣吧,然后跟旁边的一个我们班的小哥勾搭上了,东一句西一句的聊着,感觉这位小哥的兴趣面跟我重复的比较高(什么科学啊,三体啊,宇宙啊,什么什么的,不过就是感觉有点现充,哈哈)中场休息结束时,我们的总教官发怒了,主要是有些人上厕所没向教官打报告,还有一些人坐没坐相(没错,其中有我,毕竟见到那么大的草坪,还是人工的,可以不用担心虫子的问题,所以忍不住躺下,舒服的啊)。</p><p>讲座结束时,教官再一次发飙了,因为有一些人提前开溜了,没辙,大点名呗,搞一搞,吃吃饭,晚上,本以为会被整的很惨,结果没有什么,估计教官觉得对我们多说无益了吧&mdash;然后晚上摸摸鱼到一点,主要是继续搞博客优化的事,今天就这么结束了。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>窒息一天</title>
|
||
<link href="/2018/10/%E7%AA%92%E6%81%AF%E4%B8%80%E5%A4%A9/"/>
|
||
<url>/2018/10/%E7%AA%92%E6%81%AF%E4%B8%80%E5%A4%A9/</url>
|
||
|
||
<content type="html"><![CDATA[<p>今天因为升国旗的缘故,需要六点五十集合,而且昨天晚上还摸鱼到1点钟,所以起来真的有点走火入魔了&mdash;中间做了一个梦,似乎梦到一个生蔬市场,然后注意到里面的地板异常干净&mdash;然后就没了,本来应该有更多细节的,诶,看起来因为最近经常修仙,抛瓦尽失啊,现在看起来这个梦应该是有更多寓意的啊。</p><span id="more"></span><p>早上升国旗的时候,不知是什么学长还是什么破该部门,拿着无人机在哪里航拍,这样就算了,还拿个两三架来,螺旋桨的声音异常烦人,这可是军训诶,拜托,而且在旗手要装旗子的时候,发生异常窒息的一幕,其中一架无人机竟然撞到旗杆上!径直撞了上去!然后无人机打了几个转儿栽了下去,不知道有没有砸到旗手,本来应该是搞笑的一幕,但是这是升旗仪式诶,所以那时只感到更多火气,不过幸好哪些人不是完全蠢笨之人,在行注目礼之前把机儿开走了,没有噪音产生,但可惜在接下来的讲话环节无人机又开过来了,是有多喜欢无人机航拍哦。</p><p>虽然升了国旗,但是还是正常点集合,sad,只好匆匆吃了个早餐,集合时,因为队伍摸了,教官就rua了,开始大声责骂我们,比如升旗时队伍歪歪扭扭啦,走到附近还没站好军姿啦等等,最后让我们排练一次,完事后,一名满脸麻子的新教官闪亮登场了,又来了个责骂,直说82岁的老太婆都打的比我们好(虽然我也是这么觉得),然后直接开始暴力调教我们,搞得我们全部都湿了,一脸潮红,气喘吁吁,然后满嘴骚话的教官跳出来拯救了我们,让我们休息了&mdash;&mdash;不过因为动作都教完的缘故吧,休息时间意外的长。</p><p>中午,本来是想补补觉的,但是我的快递到了,然后因为中通驿站的点是定在学校外的,无奈,只好出门领了,不过在校一个月了,还没好好出门走走过,挺新奇的,因为学校地理位置较偏僻,所以周围都是不甚发达的城中村样,倒是意外的有感觉呢。</p><p>下午,就练了两套动作,然后就把我们带到报告厅听讲座,好吧,看起来是军训的思想工作嘛,主题是军事理论分析,大体就讲讲军队体系,世界现状之类的,不过我因为中午走了一遭,兴奋的很,所以中午没怎么睡,一在报告厅里放松就巨想睡,而且我的位置在主讲人正前方,更尴尬了,一直都是强撑着不睡,经常会意识瞬间消失一阵,然后又起来,感觉都能当睡眠练习了。</p><p>下午休息时本来是想摸爆的,但是一想团训还没写,就只好赶工干出来了,30分钟800字,总感觉像是在写作文,而且写的也有点糊弄&mdash;&mdash;&ldquo;军训使我的肉体和心灵都得到了升华&rdquo;我究竟是有多么恬不知耻才能写出这种话。。。</p><p> 晚上也是挺摸的。。。没什么训练,就挑几个倒霉蛋去唱歌而已,其中骚话教官还说出了&ldquo;不出来就打出去拖死&rdquo;这种鬼话。</p><p>晚上休息时间,无非就摸摸鱼吹吹水而已,顺便试了一下新拿到的OTG线效果怎么样,效果还不错~今天下午喉咙发炎就发展成感冒了,一直在打喷嚏留清鼻涕,不过神奇的是,一直在队伍中的我到没感觉到什么,或许是军训环境的魔力也说不定哦。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>摸ing。。。</title>
|
||
<link href="/2018/10/%E6%91%B8ing%E3%80%82%E3%80%82%E3%80%82/"/>
|
||
<url>/2018/10/%E6%91%B8ing%E3%80%82%E3%80%82%E3%80%82/</url>
|
||
|
||
<content type="html"><![CDATA[<p>昨天睡的比较早,所以早上比较精神,在集训时,教官新教了擒拿,流程是副手先踹两脚然后再打一拳,然后操作手反抓副手的最后一拳然后再抓住大腿头再从腋下将副手扛起来摔下去,我和一个物联网专业的小哥组队,本来上午是我做操作手的,但这位小哥一米六的个头竟然比我重多二十斤!(但是体型看起来跟我差不太多,神秘)然后我就扛不太起来,所以下午我果断换位置了,毕竟副手不用出力,可以摸啊。</p><span id="more"></span><p>下午也就是摸,没甚说的,晚上就是拉歌大赛了。。。拍了一些照,思考怎么放到博客里。。。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>军训中的摸鱼和安全讲座</title>
|
||
<link href="/2018/10/%E5%86%9B%E8%AE%AD%E4%B8%AD%E7%9A%84%E6%91%B8%E9%B1%BC%E5%92%8C%E5%AE%89%E5%85%A8%E8%AE%B2%E5%BA%A7/"/>
|
||
<url>/2018/10/%E5%86%9B%E8%AE%AD%E4%B8%AD%E7%9A%84%E6%91%B8%E9%B1%BC%E5%92%8C%E5%AE%89%E5%85%A8%E8%AE%B2%E5%BA%A7/</url>
|
||
|
||
<content type="html"><![CDATA[<p>因为周末时间不断网,昨天修炼功法有点晚,早上起来都有点经断脉碎的,早上训完拳法时,教官又开始教我们倒功(如何倒地如何起身),不过我还是想不通,倒功在哪里有用?难道被人打趴时,可以喊个123来个分解动作来个快速起身嘛?其中我还听到一个教官明天就要落跑了,跑到肇庆的一所学校里,虽然仅仅陪伴了两天时间,但还是有点点伤心的,不过另外一个骚话教官会一直教完我们,还算好吧。</p><span id="more"></span><p>学完拳之后我只有一个想法,不要招惹我们系的女生(或者男生?),因为她们现在都会几招捕俘拳的,尤其里面一些什么,上提下踹,插档抗摔的专门打关节和男性魂之所在的(物理)。</p><p>中午,没什么,就在那肝崩崩,这个星期起码浪费了10+小时在这破游戏里,感觉肝都要硬化了,其中用了个深陷苦海的代团的号抽了四发魔女搞了个量子小猫,感觉很妙,所以我也好想要,随即用自己的号抽了发十连加两个单抽,最后我盯着29/30的数字是懵逼的,无奈只好再给大伟的别墅添一块砖了,可能用3000氵仅为搞个娱乐东西看起来有点傻,不过谁叫这是有关量子的东西呢?(算不算一种侧面的为爱买单?)无所谓了,不过我还是想把米忽悠的数值策划拉出来打一顿,29/30是真的窒息。</p><p>下午来了个蓝天救援队开了个安全知识的讲座,不过这跟军训没什么关联吧,想不通,不过能摸自然是好事,晚上&mdash;&mdash;又是内务卫生检查!又 可以 摸 了!不过其中还是有点搞笑,教官进来检查时随便看两眼就匆匆走了,然后就流传这次只是预演,之后会有总教官专门检查的!搞得整个宿舍都瑟瑟发抖,然后到八点半也没什么音讯,感觉被耍了,可怜我的肥仔快乐条,就这样闷在柜子里,感觉现在打开柜子都有一股没来由的辣条味。</p><p>现在就躺在床上摸了,不过倒是把那“锦囊妙计”看了一下,嗯,总感觉回到了以前啊,我拿出坎卦和离卦的竹条来抽,抽到哪个就洗哪个澡(冷水,热水),感觉好怀念啊,也不知道那些个竹条有没有被虫子啃光呢(毕竟用棍子排卦不方便,大把拿在手上也卡手,所以就很久没用过了)</p><p>回首往昔,发现以前不以为意的小事,现在却又珍惜怀念的很啊,不免发出其实横穿中西古代先今都是烂大街的关于时光的感叹,掰着手指算着军训还剩8天就感觉有点难受,而且因为学号靠前的关系,我还被钦点写个什么关于军训主题的文章,不少于800字(还说什么写得好就发到学校公众号上),我还以为只要工科的就能离这些作文远一点的呢,果然我还是太navie了。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>看似不摸,但还是摸的</title>
|
||
<link href="/2018/10/%E7%9C%8B%E4%BC%BC%E4%B8%8D%E6%91%B8%EF%BC%8C%E4%BD%86%E8%BF%98%E6%98%AF%E6%91%B8%E7%9A%84/"/>
|
||
<url>/2018/10/%E7%9C%8B%E4%BC%BC%E4%B8%8D%E6%91%B8%EF%BC%8C%E4%BD%86%E8%BF%98%E6%98%AF%E6%91%B8%E7%9A%84/</url>
|
||
|
||
<content type="html"><![CDATA[<p>星期四早上,集训时,秉着摸鱼之心的我站在场上,惊讶的发现,教官换了,不是以前的两位教官,是其他方队的教官,随即,新教官说因为我们的表现,要换教官了,然后匕首也不耍了,改换成打捕俘拳了(我一开始听着像虎扑拳来着。。。)所以以后我们是表演打拳了,匕首也被收走了(到现在也没还回来,估计是直接像垃圾一样丢掉了吧,可惜我的神圣穿刺死棘之特制对摸鱼十字三重纷争概念类匕 +10 到最后也没用上,也同样没留下什么照片,诶)</p><span id="more"></span><p>虽然教官初看起来很严格,但是相处之后发现其实新教官也挺可爱的嘛,尤其里面一个喜欢飚口癖(比如什么八嘎呀路,呦西),似乎还把伤病不能参加的在旁边围观军训的人称为飞虎队。</p><p>今天也没什么出奇的事,就是天空久违的出现了太阳——然后我10点中就感到很疲乏了,应该是太阳的照耀加剧了体力消耗吧,感觉军训5天才终于有点军训的感觉啊,之后教完了捕俘拳完整十六动(虽然我还不怎么熟)然后下午5点时天空开始下起雨滴来,大大大!心里这么想着,结果雨势真的大了!怎么说,摸了,晚上本来是歌唱大赛的,结果变成了摸鱼的内务检查,之后晚上也没干什么,干了一些优化博客视觉效果的事(其实就是摸),这两天也就这样过去了。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>军训——摸就完事了</title>
|
||
<link href="/2018/10/%E5%86%9B%E8%AE%AD%E2%80%94%E2%80%94%E6%91%B8%E5%B0%B1%E5%AE%8C%E4%BA%8B%E4%BA%86/"/>
|
||
<url>/2018/10/%E5%86%9B%E8%AE%AD%E2%80%94%E2%80%94%E6%91%B8%E5%B0%B1%E5%AE%8C%E4%BA%8B%E4%BA%86/</url>
|
||
|
||
<content type="html"><![CDATA[<p>所以,我在军训了。。。但是没什么感觉,因为现在已经是深秋了,还恰好赶上雨季(真是心疼那些8、9月份就军训的)风吹的舒服的很,如果天空落下雨滴的时候,心里就想着&mdash;&mdash;让暴风雨来的更猛烈些吧!(不过通常情况就是原本就小的雨势越来越小,然后我顶着个懊恼的心情继续站着)</p><span id="more"></span><p>军训第一天上午雨下的挺大,本来是要开个开学典礼暨军训开营仪式(但是为什么开学快半个月才弄开学典礼啊)然后让我们进到主席台旁的观众席上,不幸的是雨水打在上面的护栏上,还是让水一台阶一台阶的流下来,搞的我屁股都湿♂了,可是比起哪些一直在淋雨的学院,我还算幸运的。。。哈哈,所以也不能再抱怨什么。</p><p>最后还是放我们回去整理内务了,嗯,其实就是摸了,好像我就在床上看了会无脑爽文就摸过去了&mdash;&mdash;没什么意思,下午就是军训正式开始了,我们的教官挺随和的,不会太刁难我们&mdash;&mdash;所以更摸了!这可能是我觉得军训无聊的原因吧,一小半时间都是废废的整队无聊时间,然后我们是匕首操队,风气有点懒散(这可能跟我有关,从小到大我都有种象征&mdash;&mdash;所在的集体对比其它集体都会有点摸,诶,可能我有成为摸鱼之王的潜质吧)</p><p>第二天就一整天天气都挺好,所以摸不了,可怜,然后训练的时候,无非就是趁在教官目光死角时摸摸鱼然后在压腿拉韧带时鄙视鄙视那些稍微拉一下就嗷嗷直叫的人(可能跟我一年级在舞蹈队待过的原因,身体柔韧性在平均水准之上&mdash;&mdash;不过随着长大之后越来越摸,一字马很早就下不去了,不免是桩憾事)</p><p>然后就是晚上的教军歌唱歌的时候了,然后就是什么拉歌什么军式笑话横行的时间了,这些笑话本身并不高明,但在那种环境下,有能笑得东西已经不错了!然后教官分配任务,什么要做个用纸什么的做个匕首啦(毕竟我们是匕首操方队嘛),然后抄一抄歌词啦,回去时,我一边吹水一边做匕首,然后我本来是想把任务二合一将歌词抄在匕首上的,妄图给这把匕首附上精神伤害,可惜胶带已经捆上了只好作罢,另外这把匕首是用肉松饼的盒子做的,所以我将这把匕首命名为&mdash;&mdash;肉松匕!</p><p>然后上床修炼一下“功法”到一点半就睡了。。。之后半夜三点醒来时恍然听到下雨声。。。做的梦气氛也挺安详的,跟学校学习还有饭堂有关&mdash;&mdash;早上起来,看着外面,下着雨&mdash;&mdash;哇,精神激动,有摸的可能了,然后果然,延迟集合了,出去吃早饭,回来宿舍补觉到九点,然后又要搞什么内务检查,摸到中午,诶,可惜,在下午解散时乱糟糟的情况下我的肉松匕不见了,也许是有人看的我做的太好私自据为己有?应该拍个照的,可以挂到这里缅怀一下。</p><p>晚上集合时&mdash;&mdash;讲了一下内务方面的问题又放我们回去了&mdash;&mdash;又是摸鱼的内务检查!诶,摸就完事了,然后我再做好了一把匕首,命名为&mdash;&mdash;神圣穿刺死棘之特制对摸鱼十字三重纷争概念类匕 +10(其实就是纸棍和胶带随便乱搞的东西啦,这次连瓦楞纸都没用上,好摸啊),然后这就是我三天的经历了,总结为&mdash;&mdash;摸。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>凌晨三点的天空是怎样的?</title>
|
||
<link href="/2018/09/%E5%87%8C%E6%99%A8%E4%B8%89%E7%82%B9%E7%9A%84%E5%A4%A9%E7%A9%BA%E6%98%AF%E6%80%8E%E6%A0%B7%E7%9A%84%EF%BC%9F/"/>
|
||
<url>/2018/09/%E5%87%8C%E6%99%A8%E4%B8%89%E7%82%B9%E7%9A%84%E5%A4%A9%E7%A9%BA%E6%98%AF%E6%80%8E%E6%A0%B7%E7%9A%84%EF%BC%9F/</url>
|
||
|
||
<content type="html"><![CDATA[<p>夜雀生活的的第二天,因为之前的教训,我已经提前买好了功能性饮料,让我惊喜的是,这个傻缺的1元换购的活动,我竟然连续中了两次!按照古典概型来说,一百分之一的概率!我也许把整周的运气都花在这上面了。</p><span id="more"></span><p>有了饮料支持,我凌晨三点的休息时间决定出去走走,想着到时候可以炫耀一下——你知道凌晨三点的夜空是怎样的玛?我知道~</p><p>可惜抱着这个想法的人不在少数,走到广场,休息的人坐在两旁,吸烟者占据多数,这让广场烟雾缭绕,让人感觉在修仙——好吧,其实就是在修仙。我飞似的逃了,虽然这不是过人墙,但是我还是忍受不了如此浓重的烟味,逃的时候望着天空——月朗星稀,好吧,低纬度的地区能看的到什么星星?等我有钱了一定要往纬度高的地方旅一次游,实际看看“Milky Way”,当然,等我有钱了。。。</p>]]></content>
|
||
|
||
|
||
<categories>
|
||
|
||
<category> 日常 </category>
|
||
|
||
</categories>
|
||
|
||
|
||
<tags>
|
||
|
||
<tag> 日常 </tag>
|
||
|
||
</tags>
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
<entry>
|
||
<title>世界,您好!</title>
|
||
<link href="/2018/06/%E4%B8%96%E7%95%8C%EF%BC%8C%E6%82%A8%E5%A5%BD%EF%BC%81/"/>
|
||
<url>/2018/06/%E4%B8%96%E7%95%8C%EF%BC%8C%E6%82%A8%E5%A5%BD%EF%BC%81/</url>
|
||
|
||
<content type="html"><![CDATA[<p>看到这个就意味着你输了。</p>]]></content>
|
||
|
||
|
||
|
||
</entry>
|
||
|
||
|
||
|
||
|
||
</search>
|