<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>主页 on 牧雨博客</title><link>https://www.everains.com/</link><description>Recent content in 主页 on 牧雨博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 01 Jan 2026 08:00:00 +0800</lastBuildDate><atom:link href="https://www.everains.com/index.xml" rel="self" type="application/rss+xml"/><item><title>有了 Codex，女娲捏人也只用 7 小时——一个下午从零自制主题</title><link>https://www.everains.com/p/526/</link><pubDate>Thu, 01 Jan 2026 08:00:00 +0800</pubDate><guid>https://www.everains.com/p/526/</guid><description>&lt;p&gt;这件事终于发生了：这是每一个折腾博客爱好者终将到来的时刻——从各种换主题、选插件，走到自己从头到尾定制一个主题。&lt;/p&gt;
&lt;p&gt;自从换到 Hugo 之后，虽然说有很多特别精致的主题，效果也都很好，但是每个主题都稍微会偏离一点我的需求：Stack 主题觉得太过华丽，PaperMod 主题又有点过于简单。&lt;/p&gt;
&lt;p&gt;我一直想要把以后的博客内容往更偏文字的方向走一点（虽然这两年啥也没写），尽量简化以便把注意力放在内容上，但又想要稍微有点俏皮的感觉。所以我经常在各种 awesome-hugo 仓库之间流连，却总觉得每一个主题都差点什么，不能完全如意。&lt;/p&gt;
&lt;p&gt;终于，我对自己说：现在都有 Codex 了，为什么我不能自己写一个？&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="codexclaude-code-带来的科技普惠"&gt;Codex、Claude Code 带来的科技普惠&lt;/h3&gt;
&lt;p&gt;在津津乐道播客里听到过一个观点：从前软件开发的逻辑，是先寻找共性，找到一个大多数人都共有的需求，然后围绕这个共性开发一个软件。而现在，可能每个群聊、每个班级，都能为自己独特的需求定制一个专属的小程序。&lt;/p&gt;
&lt;p&gt;自从 22 年底 ChatGPT-3.5 面世，到后来的 Claude Code、Codex，一路看下来，AI coding 的能力在与日俱增。最开始的大模型，写个简单的 Python 脚本都可能会报错；到 25 年早期，Claude Code 已经能自己 debug；再到 Codex，甚至可以做到：它写出来的代码直接运行，在大概 90% 的情况下都不会有任何报错。&lt;/p&gt;
&lt;p&gt;像当前这个博客主题，从 0 到 1，一共 29 次 commit，只出现过两次编译错误，而且都是因为调用了 Hugo 没有的接口。把报错贴给 Codex 之后，也都轻轻松松就解决了。&lt;/p&gt;
&lt;figure class="image image_resized" style="width:74.64%;"&gt;&lt;img style="aspect-ratio:1474/970;" src="4_有了 Codex，女娲捏人也只用 7 小时——一个下.png" width="1474" height="970"&gt;&lt;/figure&gt;
&lt;p&gt;一个下午，Codex 帮我完成了页面整体风格的设计：分页、搜索、目录树、MathJax、代码块风格……可以说，除了评论功能之外，几乎把我想要的一切都实现了。对一个前端苦手来说，如果没有 Codex，我得自己查文档、抄代码、搜报错，才能实现现在这些功能，可能两个星期都打不住。&lt;/p&gt;
&lt;p&gt;或许以后很多程序员都可以就地转职产品经理：只要能搭好架构，能够清楚地描述自己想要什么功能，Codex 就能帮你把它实现出来。&lt;/p&gt;
&lt;p&gt;描述清楚「想要什么功能」，火过一阵又迅速过时的 Prompt Engineering，或许是当下面向大模型编程最重要的一项技能。&lt;/p&gt;
&lt;p&gt;比如说：你不知道有「粘性定位（sticky positioning）」这个概念，就很难把「目录一直悬停在同一位置」这种视觉效果讲得足够具体；不了解多栏布局的思路，做出来的就是「一个页面一个布局」。在这种「言出即法」的年代，怎么把需求表达得精准，就显得格外重要。&lt;/p&gt;
&lt;p&gt;至于为什么说是「当前」最重要——也许再过几年，套上脑机接口，真把 Codex 变成「指哪打哪」，那又是另一回事了。&lt;/p&gt;
&lt;h3 id="现在的主题有啥特色"&gt;现在的主题有啥特色&lt;/h3&gt;
&lt;p&gt;惭愧地说，其实就是把我平时刷博客时看到心水的点，全都往里塞了一遍。&lt;/p&gt;
&lt;p&gt;第一次看到 &lt;a href="https://onojyun.com/"&gt;莫比乌斯&lt;/a&gt; 的时候，就觉得：这个类纸的风格配上可变字重的设计也太好看了吧。&lt;/p&gt;
&lt;figure class="image"&gt;&lt;img style="aspect-ratio:2000/1063;" src="6_有了 Codex，女娲捏人也只用 7 小时——一个下.png" width="2000" height="1063"&gt;&lt;/figure&gt;
&lt;p&gt;于是我就借鉴了一下：用了一个暖色加横纹的纸质背景，再配上 Noto Sans SC 字体。&lt;/p&gt;</description></item><item><title>博客从Typecho迁移至Hugo</title><link>https://www.everains.com/p/%E5%8D%9A%E5%AE%A2%E4%BB%8Etypecho%E8%BF%81%E7%A7%BB%E8%87%B3hugo/</link><pubDate>Thu, 15 Feb 2024 11:35:49 +0800</pubDate><guid>https://www.everains.com/p/%E5%8D%9A%E5%AE%A2%E4%BB%8Etypecho%E8%BF%81%E7%A7%BB%E8%87%B3hugo/</guid><description>&lt;p&gt;自从建这个博客到现在已经快 6 年了，最开始用的是 Jekyll，用的服务器甚至是放在家里的树莓派 Zero W。接着是使用 Handsome 主题的 Typecho，虽然没有几张图片但是还为他专门架设了一个 Chevereto 图床。配合上 Handsome 主题的 Typecho 功能很齐全也很美观，但是热衷于重装系统的我自然而然的每隔一两年都要重装一次服务器的系统，并徘徊在安装 Typecho 和 Chevereto 的各种文件权限问题中。而 Handsome 主题大而全的另一个反面就是繁杂的配置选项，尽管外观上仍然保持了作者的克制，但我更希望我的博客能更专注于传达信息。于是借着给实验室搭建官网的工夫，我就顺手将博客迁移到了 Hugo。&lt;/p&gt;
&lt;h2 id="typecho-数据导出"&gt;Typecho 数据导出&lt;/h2&gt;
&lt;p&gt;我最希望能够原样从 Typecho 原样迁移的数据大概有以下几个部分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;文章内容及封面&lt;/li&gt;
&lt;li&gt;几年来积累的评论&lt;/li&gt;
&lt;li&gt;友链&lt;/li&gt;
&lt;li&gt;由于 Typecho 和 Hugo 的 URL 结构有所不同，我需要将原先博客文章的链接 301 映射到新链接，避免 SEO 降低权重。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;幸运的是，我的大部分需求都能被 &lt;a href="https://www.imwxz.com/posts/74f52ab0.html"&gt;从 Typecho 完美迁移到 Hexo&lt;/a&gt; 这篇文章满足，基于这位作者提供的代码，我进行了一些修改以满足我的需求。&lt;/p&gt;
&lt;h3 id="导出文章内容及封面"&gt;导出文章内容及封面&lt;/h3&gt;
&lt;p&gt;使用这个脚本可以导出文章的标题、头图、发表日期、标签、分类、slug 等信息。由于 slug 通常是唯一的，且相对于标题更容易搜索，后续脚本将使用这个字段在创建新旧链接对应表时进行数据库搜索。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;请注意，该脚本仅能处理文章属于一个分类的情况。如果有多个分类，建议先在 Typecho 中手动将所有属于多个分类的文章去掉多余的分类。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; re
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; datetime &lt;span style="color:#f92672"&gt;import&lt;/span&gt; datetime
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; mariadb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;db &lt;span style="color:#f92672"&gt;=&lt;/span&gt; mariadb&lt;span style="color:#f92672"&gt;.&lt;/span&gt;connect(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; host&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;127.0.0.1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; port&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;3306&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;root&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; password&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; database&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Your-Database-Name&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cur &lt;span style="color:#f92672"&gt;=&lt;/span&gt; db&lt;span style="color:#f92672"&gt;.&lt;/span&gt;cursor()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cur&lt;span style="color:#f92672"&gt;.&lt;/span&gt;execute(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;SELECT * FROM `typecho_contents` WHERE `template` IS NULL AND `type`=&amp;#39;post&amp;#39;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;res &lt;span style="color:#f92672"&gt;=&lt;/span&gt; cur&lt;span style="color:#f92672"&gt;.&lt;/span&gt;fetchall()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cur&lt;span style="color:#f92672"&gt;.&lt;/span&gt;execute(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;SELECT * FROM `typecho_fields` WHERE `name` = &amp;#39;thumb&amp;#39;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;covers &lt;span style="color:#f92672"&gt;=&lt;/span&gt; cur&lt;span style="color:#f92672"&gt;.&lt;/span&gt;fetchall()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(covers)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; x &lt;span style="color:#f92672"&gt;in&lt;/span&gt; res:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# print(x)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; content &lt;span style="color:#f92672"&gt;=&lt;/span&gt; x[&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;]&lt;span style="color:#f92672"&gt;.&lt;/span&gt;removeprefix(&lt;span style="color:#e6db74"&gt;&amp;#39;&amp;lt;!--markdown--&amp;gt;&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; created &lt;span style="color:#f92672"&gt;=&lt;/span&gt; datetime&lt;span style="color:#f92672"&gt;.&lt;/span&gt;fromtimestamp(x[&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;])&lt;span style="color:#f92672"&gt;.&lt;/span&gt;strftime(&lt;span style="color:#e6db74"&gt;&amp;#34;%Y-%m-&lt;/span&gt;&lt;span style="color:#e6db74"&gt;%d&lt;/span&gt;&lt;span style="color:#e6db74"&gt; %H:%M:%S&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; updated &lt;span style="color:#f92672"&gt;=&lt;/span&gt; datetime&lt;span style="color:#f92672"&gt;.&lt;/span&gt;fromtimestamp(x[&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;])&lt;span style="color:#f92672"&gt;.&lt;/span&gt;strftime(&lt;span style="color:#e6db74"&gt;&amp;#34;%Y-%m-&lt;/span&gt;&lt;span style="color:#e6db74"&gt;%d&lt;/span&gt;&lt;span style="color:#e6db74"&gt; %H:%M:%S&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; draft &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;true&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; x[&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;9&lt;/span&gt;] &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;publish&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; draft &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;false&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# check cover&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cover_link &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; cover &lt;span style="color:#f92672"&gt;in&lt;/span&gt; covers:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; cover[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;] &lt;span style="color:#f92672"&gt;==&lt;/span&gt; x[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cover_link &lt;span style="color:#f92672"&gt;=&lt;/span&gt; cover[&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; cover_link &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#34;no cover&amp;#34;&lt;/span&gt;, x[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cur&lt;span style="color:#f92672"&gt;.&lt;/span&gt;execute(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;SELECT * FROM `typecho_relationships` JOIN `typecho_metas` WHERE `typecho_relationships`.`mid`=`typecho_metas`.`mid` AND `typecho_relationships`.`cid`=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;x[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; meta &lt;span style="color:#f92672"&gt;=&lt;/span&gt; cur&lt;span style="color:#f92672"&gt;.&lt;/span&gt;fetchall()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; category &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tag &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; y &lt;span style="color:#f92672"&gt;in&lt;/span&gt; meta:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; y[&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;] &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;category&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; category&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append([y[&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;], y[&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;]])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;elif&lt;/span&gt; y[&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;] &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;tag&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tag&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append(y[&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(x[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;], &lt;span style="color:#e6db74"&gt;&amp;#39;error unhandled&amp;#39;&lt;/span&gt;, y[&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; len(category) &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(x[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;], &lt;span style="color:#e6db74"&gt;&amp;#39;category length warning&amp;#39;&lt;/span&gt;, len(category))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; link &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;category[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;][&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;x[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;.html&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; title &lt;span style="color:#f92672"&gt;=&lt;/span&gt; re&lt;span style="color:#f92672"&gt;.&lt;/span&gt;sub(&lt;span style="color:#e6db74"&gt;r&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;[^\w\-_\. ]&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;-&amp;#39;&lt;/span&gt;, x[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;with&lt;/span&gt; open(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;./source/_posts/&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;title&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;.md&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; f:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; f&lt;span style="color:#f92672"&gt;.&lt;/span&gt;write(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&amp;#39;---
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;title: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;x[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;image: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;cover_link&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;slug: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;x[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;date: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;created&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;updated: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;updated&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;tags: [&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join(tag)&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;categories: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;category[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;][&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;toc: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;draft: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;draft&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;content&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="映射新旧文章链接"&gt;映射新旧文章链接&lt;/h3&gt;
&lt;p&gt;你需要将以下脚本的倒数第二行链接修改为你在 Typecho 中设置的格式。下图是我之前设置的文章路径，你需要将脚本修改为你设置的路径格式。&lt;/p&gt;</description></item><item><title>基于 Matlab 的冰下光源检测</title><link>https://www.everains.com/p/359/</link><pubDate>Tue, 28 Mar 2023 20:51:00 +0000</pubDate><guid>https://www.everains.com/p/359/</guid><description>&lt;p&gt;嗨嗨嗨，又是一次年更成就。本文其实是我的一门 matlab 选修课的大作业，出成绩后直接转过来当博客发 ::aru:diving::&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="问题重述"&gt;问题重述&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;冰耗子&amp;quot;冰底航行器，是一款能够依靠刺轮驱动并实现冰底爬行的冰下探测航行器，不同于 ROV、AUV 等依靠水下推进器进行三维冰下运动的航行器。&amp;ldquo;冰耗子&amp;quot;利用其正浮力依附冰面下表面，具有自持能力强、续航能力强等特点，适合对冰底单一目标进行长时间探测监控。&lt;/p&gt;
&lt;p&gt;然而，由于冰面及水面对 GPS 信号的阻隔，全球定位系统 (GPS) 无法在水下运行[1]，冰下的定位问题一直是相关领域的研究重点，尤其是在冰底航行器的回收过程要求航行器精准定位冰洞的具体位置，并靠近冰洞以便科研人员或无人机对其进行回收。&lt;/p&gt;
&lt;p&gt;利用冰下光环境较为单一的特点，在实验中，我们使用黄光灯作为信号光源，利用航行器的前端广角摄像头实时拍摄的图像进行光源检测并以此确定冰洞方向。在光源检测过程中，传统的利用深度学习的目标检测手段在较小的样本量下无法充分学习光源特征。因此项目最初使用 Python 基于 OpenCV 框架进行针对光源颜色进行光源的方向检测，然而在 OpenCV 过滤颜色方面有着较不完善、直观等问题，本作业使用 Matlab 基于Color Thresholder 工具包以及其他形态学处理模块对光源检测程序进行了重写。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/image-20230328204604056.png" alt="实拍图像，由航行器摄于码头浮筒下"&gt;&lt;/p&gt;
&lt;h2 id="数学建模"&gt;数学建模&lt;/h2&gt;
&lt;h3 id="图像色彩过滤"&gt;图像色彩过滤&lt;/h3&gt;
&lt;p&gt;末期光源引导采用 20w 黄光光源作为回收位置标注光源，原因是经过实验[2]，黄光能够在环境水域中的衰减距离更小，并且环境水域中的图像噪声更小。视觉识别采用 75°广角摄像头作为光源识别的传感器，能够获得更大的回收位置识别范围，有效避免由于转向过冲导致的 航行器无法识别目标。&lt;/p&gt;
&lt;p&gt;由冰耗子前部摄像头拍摄的图像是数字图像，即根据每个像素包含的（R、G、B）三个颜色通道范围对该像素点颜色进行定义。其中 R、G、B 的范围是 0~255，因此能够定义 $256 \times 256\times256=16777216$ 种颜色，这几乎包含了人类视觉所能感知的所有颜色。我们的需求就是通过前部摄像头拍摄的图像寻找出黄光标记点的位置，因此，我们需要给出目标光源的颜色范围，并过滤出除目标光源外的其他干扰颜色信息。然而，虽然 RGB 值提供了一种定义颜色信息的简单方法，但当环境中的亮度发生变化时，R、G、B 的变化是非线性，并且三种颜色分量的取值与所生成的颜色联系并不直观。这导致在处理图像时搜索特定值可能会变得困难. 因此对于数字图像处理，通常将 RGB 图像转换为 HSV。图像像素的定义由 RGB 色彩空间转换为 HSV（色相、饱和度、明度）色彩空间这样 HSV 颜色格式可以直观处理由环境光照变化产生的影响，并便于设定目标光源的色彩变化范围。
航行器设定的搜索光谱范围是：$\begin{bmatrix}30, 100, 167\end{bmatrix} to \begin{bmatrix}70, 193, 255\end{bmatrix}$，经实验这个搜索范围能够较好的水下感知 4m 以内的黄光光源。&lt;/p&gt;
&lt;h3 id="图像二值化"&gt;图像二值化&lt;/h3&gt;
&lt;p&gt;完成色彩过滤后，所得到的图像信息依旧是彩色的，需要将彩色图像灰度化并二值化转换为黑白图像。图像二值化处理是指将图像上的每个像素点根据阈值分割设定合适的阈值，将低于该阈值的像素点全部设为黑，将高于该阈值的像素点全部设为白。这个操作可以滤除一部分的干扰噪声，并能够清晰化、明确化目标光源的光斑图像，也能够大幅度减小后期图像处理数据、便于后续的程序处理。二值化的图像的转换方式主要体现在对每个像素色彩值进行套入到映射函数进行计算，采用大津阈值处理法（OSTU）以此得到二值化后的该像素点色彩值，函数可以表示为：
$$
Binary(x,y)=
\begin{cases}
maxvalue, &amp;amp;\text if\ src(x,y)&amp;gt;thresh\
0, &amp;amp;\text otherwise
\end{cases}
$$&lt;/p&gt;</description></item><item><title>为UNRAID 系统配置插件下载代理</title><link>https://www.everains.com/p/352/</link><pubDate>Sat, 09 Jul 2022 20:40:00 +0000</pubDate><guid>https://www.everains.com/p/352/</guid><description>&lt;p&gt;&lt;img src="images/image-20220707175953581.png" alt="image-20220707175953581"&gt;&lt;/p&gt;
&lt;p&gt;UNRAID 是好文明！&lt;/p&gt;
&lt;p&gt;在看完油管上某知名催眠 youtuber 长达一个半小时的UNRAID教程后，我决心把家里那台 HPE 的家用小服务器刷上 UNRAID 的系统，不为别的，就图 UNRAID 的字面意思——不做 RAID，不需要买4个相同空间的硬盘就能给小姐姐们一个舒适的家。&lt;/p&gt;
&lt;p&gt;UNRAID 的具体安装教程这里不做过多介绍，无论是油管上的司波图或是SMZDM的阿文菌都讲的足够清楚。&lt;/p&gt;
&lt;p&gt;这篇文章主要解决一个国内 UNRAID 新手可能都会遇到的一个问题——UNRAID 备受好评的社区应用商店 (Community Applications) 那是一个应用也装不上。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/image-20220707191005216.png" alt="image-20220707191005216"&gt;&lt;/p&gt;
&lt;h3 id="how-to-solve-it"&gt;How to solve it&lt;/h3&gt;
&lt;p&gt;问题的原因在于里面大部分的插件下载都需要访问 raw.githubusercontent.com 这个地址，然而众所周知，这个域很久以前就被墙了，而 UNRAID 系统并没有全局代理这一选项。&lt;/p&gt;
&lt;p&gt;但是——插件下载是调用 wget 命令完成的，因此我们不需要配置全局系统代理，只需要让 wget 程序默认使用代理即可。&lt;/p&gt;
&lt;p&gt;UNRAID 管理界面打开浏览器终端，输入&lt;font color=blue&gt;nano /etc/wgetrc&lt;/font&gt; ，找到以下几行&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# You can set the default proxies for Wget to use for http, https, and ftp.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# They will override the value in the environment.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#https_proxy = http://proxy.yoyodyne.com:18023/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#http_proxy = http://proxy.yoyodyne.com:18023/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#ftp_proxy = http://proxy.yoyodyne.com:18023/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# If you do not want to use proxy at all, set this to off.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#use_proxy = on&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;只需要去掉几个注释，并将你的代理地址填入即可&lt;/p&gt;</description></item><item><title>从零开始的Django项目 开发环境 &amp; Django项目初始化</title><link>https://www.everains.com/p/351/</link><pubDate>Wed, 16 Feb 2022 15:37:00 +0000</pubDate><guid>https://www.everains.com/p/351/</guid><description>&lt;p&gt;从OneDrive里翻出来的草稿，发现完成度还挺高的，修改一下就先发出来了。&lt;/p&gt;
&lt;p&gt;初始编辑：2021/01/29 &amp;ndash;&amp;gt; 初步完稿：2022/2/16&lt;/p&gt;
&lt;p&gt;之前草稿里的插入的图片甚至因为经历了一次图床删库事件&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;（我真不是鸽子王&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;当初写这篇教程是因为正在开发我的第一个Django项目,也是我的第一个开源项目&lt;a href="https://github.com/raiots/TasksManager"&gt;任务管理工具&lt;/a&gt;，欢迎来Star！&lt;/p&gt;
&lt;h2 id="初始化一个完美的django环境"&gt;初始化一个完美的Django环境&lt;/h2&gt;
&lt;h3 id="笔者的"&gt;笔者的&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;平台：Windows 10 20H2&lt;/li&gt;
&lt;li&gt;版本：Python 3.7.9&lt;/li&gt;
&lt;li&gt;框架：Django 3.1&lt;/li&gt;
&lt;li&gt;IDE：PyCharm 20.3&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="pycharm创建django项目"&gt;PyCharm创建Django项目&lt;/h3&gt;
&lt;h4 id="为什么选择pycharm"&gt;为什么选择PyCharm&lt;/h4&gt;
&lt;p&gt;PyCharm会为你提供一个&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;快速配置的虚拟环境&lt;/li&gt;
&lt;li&gt;便捷的包管理系统&lt;/li&gt;
&lt;li&gt;自动代码提示（在前端抄css的时候超管用！）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="创建pycharm项目"&gt;创建PyCharm项目&lt;/h4&gt;
&lt;p&gt;安装后开启 PyCharm Professional 版本，在下图界面中选择右上角的 New Project：&lt;/p&gt;
&lt;p&gt;&lt;img src="images/image-20220709210107920ad5336cb14e3ab7d.png" alt="image-20220709210107920"&gt;&lt;/p&gt;
&lt;p&gt;进入下图界面，点击左侧边栏中的Django选项卡，进入Django项目配置。&lt;/p&gt;
&lt;p&gt;其中，一般需要修改的是两个字段：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Location字段代表项目存储位置&lt;/li&gt;
&lt;li&gt;Base interpreter字段你需要选择安装在你电脑上的python解释器。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="images/image-20220709210233016.png" alt="image-20220709210233016"&gt;&lt;/p&gt;
&lt;p&gt;单击create后，PyCharm会自动创建出一个Django项目环境。&lt;/p&gt;
&lt;h3 id="配置django项目设置"&gt;配置Django项目设置&lt;/h3&gt;
&lt;h4 id="1-配置静态文件"&gt;1. 配置静态文件&lt;/h4&gt;
&lt;p&gt;在项目根目录右键新建文件夹static，用于存放项目的静态文件（JavaScript，CSS&amp;hellip;&amp;hellip;）&lt;/p&gt;
&lt;p&gt;并在settings.py 中添加如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;STATIC_URL &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/static/&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;STATICFILES_DIRS &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; BASE_DIR &lt;span style="color:#f92672"&gt;/&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;static&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="tips为什么需要专门设置文件夹放置静态文件"&gt;tips.为什么需要专门设置文件夹放置静态文件：&lt;/h5&gt;
&lt;p&gt;几乎每一个网页都会需要图片、JavaScript等额外文件，一般来说仅需要提供该文件的原始地址，但在django编写过程中，必须将所有静态文件交给Django管理，所以，我们需要指定一个目录来告诉Django静态文件会被存放在什么地方。&lt;/p&gt;
&lt;p&gt;在开发过程中，仅需在模板文件头部用static模板标签帮助Django构建URL。&lt;/p&gt;
&lt;p&gt;官网给出的例子如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{% load static %}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;img&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;src&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;{% static &amp;#39;my_app/example.jpg&amp;#39; %}&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;alt&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;My image&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;更多配置方式，详见&lt;a href="https://docs.djangoproject.com/zh-hans/3.1/howto/static-files/"&gt;管理静态文件（比如图片、JavaScript、CSS）&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="2-创建应用app"&gt;2. 创建应用（app）&lt;/h4&gt;
&lt;p&gt;Django可以将网站核心功能以应用程序的形式分开编写，在规划应用的过程中，要以宜少不宜多的原则。&lt;/p&gt;
&lt;p&gt;本项目由两个模块组成，包括作为核心的任务管理模块以及用户管理模块。&lt;/p&gt;
&lt;p&gt;我习惯将所有的应用都放在一个文件夹里，这样可以获得一个更清晰的项目结构，因此我们首先在项目根目录下新建apps文件夹用于存放应用。&lt;/p&gt;</description></item><item><title>基于Mnist Fashion数据集的卷积神经网络</title><link>https://www.everains.com/p/339/</link><pubDate>Sat, 06 Nov 2021 22:17:00 +0000</pubDate><guid>https://www.everains.com/p/339/</guid><description>&lt;p&gt;[scode type=&amp;ldquo;blue&amp;rdquo;]之前参与实验室视觉方向考核的时候写的报告，顺便分享到博客上来吧。[/scode]
（成就+1：年更博主 ::aru:cryingface::&lt;/p&gt;
&lt;h2 id="问题重述"&gt;问题重述&lt;/h2&gt;
&lt;p&gt;构建卷积神经网络模型（CNN）对fashion-mnist数据集进行分类(10类)。&lt;/p&gt;
&lt;h2 id="数据简介"&gt;数据简介&lt;/h2&gt;
&lt;p&gt;FashionMNIST 是一个替代 &lt;a href="https://link.zhihu.com/?target=http%3A//yann.lecun.com/exdb/mnist/"&gt;MNIST 手写数字集&lt;/a&gt;的图像数据集。 它是由 Zalando（一家德国的时尚科技公司）旗下的研究部门提供。其涵盖了来自 10 种类别的共 7 万个不同商品的正面图片,分别是：t-shirt（T恤），trouser（牛仔裤），pullover（套衫），dress（裙子），coat（外套）,sandal（凉鞋），shirt（衬衫），sneaker（运动鞋），bag（包），ankle boot（短靴）。&lt;/p&gt;
&lt;p&gt;FashionMNIST 的大小、格式和训练集/测试集划分与原始的 MNIST 完全一致。60000/10000 的训练测试数据划分，28x28 的灰度图片。你可以直接用它来测试你的机器学习和深度学习算法性能，&lt;strong&gt;且不需要改动任何的代码&lt;/strong&gt;（实测跑mnist的模型用在fashion上的准确率能到60%）。&lt;/p&gt;
&lt;p&gt;这个数据集的样子大致如下（每个类别占三行）：&lt;/p&gt;
&lt;p&gt;&lt;img src="images/v2-2eef619bec492f9c054b22c8f0bafcc9_r.jpg" alt="preview"&gt;&lt;/p&gt;
&lt;h2 id="数据读取及预处理"&gt;数据读取及预处理&lt;/h2&gt;
&lt;p&gt;使用Keras模块可以轻松导入&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; keras.datasets &lt;span style="color:#f92672"&gt;import&lt;/span&gt; fashion_mnist
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(x_train, y_train), (x_test, y_test) &lt;span style="color:#f92672"&gt;=&lt;/span&gt; fashion_mnist&lt;span style="color:#f92672"&gt;.&lt;/span&gt;load_data()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;x_train &lt;span style="color:#f92672"&gt;=&lt;/span&gt; x_train&lt;span style="color:#f92672"&gt;.&lt;/span&gt;reshape(x_train&lt;span style="color:#f92672"&gt;.&lt;/span&gt;shape[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;], &lt;span style="color:#ae81ff"&gt;28&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;28&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;x_test &lt;span style="color:#f92672"&gt;=&lt;/span&gt; x_test&lt;span style="color:#f92672"&gt;.&lt;/span&gt;reshape(x_test&lt;span style="color:#f92672"&gt;.&lt;/span&gt;shape[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;], &lt;span style="color:#ae81ff"&gt;28&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;28&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;y_train &lt;span style="color:#f92672"&gt;=&lt;/span&gt; to_categorical(y_train)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;y_test &lt;span style="color:#f92672"&gt;=&lt;/span&gt; to_categorical(y_test)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中，首先使用reshape函数将x_train,x_test张量形状转为(60000, 28, 28, 1),(10000, 28, 28, 1)这一四阶张量,这意味着训练样本数量为60000份测试样本数量为10000份，每张样本图像大小为28*28。由于每个样本的像素值是0至255之间的值，因此在训练网络之前进行了归一化的操作。&lt;/p&gt;
&lt;p&gt;而y_train,y_test则存储每个样本所对应的服装种类，用1~10表示。&lt;/p&gt;
&lt;h2 id="模型建立"&gt;模型建立&lt;/h2&gt;
&lt;p&gt;模型方面，参考了VGG网络结构&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;，大致特征为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用连续的小卷积核(3×3)做连续卷积，卷积的固定步长为1，并在图像的边缘填充1个像素，这样卷积后保持图像的分辨率不变。&lt;/li&gt;
&lt;li&gt;连续的卷积层会接着一个池化层，降低图像的分辨率。空间池化由两个最大池化层进行，并在2×2像素窗口上进行最大池化。&lt;/li&gt;
&lt;li&gt;卷积层后，接着的是3个全连接层，前两个分别为512、64个通道，第三是输出层输出10个分类。&lt;/li&gt;
&lt;li&gt;每个隐藏层的激活函数均使用ReLU。&lt;/li&gt;
&lt;li&gt;使用多次Dropout，以避免多次训练后的过拟合问题（具体表现为损失率后期增高）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下为网络详细结构&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Model: &amp;#34;sequential_1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Layer (type) Output Shape Param # 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;==============================================================
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;conv2d_6 (Conv2D) (None, 28, 28, 32) 320 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;conv2d_7 (Conv2D) (None, 28, 28, 32) 9248 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dropout_5 (Dropout) (None, 28, 28, 32) 0 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;conv2d_8 (Conv2D) (None, 28, 28, 64) 18496 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;max_pooling2d_2 (MaxPooling2 (None, 14, 14, 64) 0 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dropout_6 (Dropout) (None, 14, 14, 64) 0 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;conv2d_9 (Conv2D) (None, 14, 14, 128) 73856 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;conv2d_10 (Conv2D) (None, 14, 14, 128) 147584 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;conv2d_11 (Conv2D) (None, 14, 14, 256) 295168 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;max_pooling2d_3 (MaxPooling2 (None, 7, 7, 256) 0 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dropout_7 (Dropout) (None, 7, 7, 256) 0 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flatten_1 (Flatten) (None, 12544) 0 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dense_3 (Dense) (None, 512) 6423040 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dropout_8 (Dropout) (None, 512) 0 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dense_4 (Dense) (None, 64) 32832 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dropout_9 (Dropout) (None, 64) 0 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;______________________________________________________________&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dense_5 (Dense) (None, 10) 650 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;==============================================================
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Total params: 7,001,194
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Trainable params: 7,001,194
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Non-trainable params: 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="分析结果"&gt;分析结果&lt;/h2&gt;
&lt;p&gt;&lt;img src="images/05410b49d6d1245c14e7d0ff4611091f.png" alt="下载"&gt;&lt;/p&gt;</description></item><item><title>在LNMP环境下安装fileinfo扩展</title><link>https://www.everains.com/p/323/</link><pubDate>Mon, 07 Dec 2020 21:06:00 +0000</pubDate><guid>https://www.everains.com/p/323/</guid><description>&lt;p&gt;[scode type=&amp;ldquo;yellow&amp;rdquo;]此教程仅针对已安装lnmp1.5及以上的环境[/scode]&lt;/p&gt;
&lt;p&gt;在使用lnmp的过程中，有很多网站程序是需要fileinfo这个php扩展的。但是由于lnmp默认安装是不会安装fileinfo这个扩展。网上很多相关教程是根据lnmp1.4及更低版本，自行安装fileinfo扩展。[&lt;a href="https://www.laozuo.org/11801.html"&gt;1&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;但是，在lnmp1.5的更新中，增加了安装或升级时可以选择是否安装开启fileinfo的更新选项。&lt;/p&gt;
&lt;p&gt;因此，如果已经安装lnmp环境，如果想要添加fileinfo扩展，仅需：&lt;/p&gt;
&lt;p&gt;1.进入lnmp的安装目录&lt;/p&gt;
&lt;p&gt;2.修改&lt;span style="color:#0000FF"&gt;lnmp.conf&lt;/span&gt; 文件中&lt;span style="color:#FF0000	"&gt;Enable_PHP_Fileinfo=&amp;lsquo;n&amp;rsquo;&lt;/span&gt;行，将n改为y&lt;/p&gt;
&lt;p&gt;3.&lt;code&gt;./upgrade.sh php&lt;/code&gt;&lt;/p&gt;</description></item><item><title>使用LNMP在CentOS7部署nodebb论坛系统！</title><link>https://www.everains.com/p/269/</link><pubDate>Sat, 01 Aug 2020 17:35:00 +0000</pubDate><guid>https://www.everains.com/p/269/</guid><description>&lt;p&gt;&lt;a href="https://nodebb.org/"&gt;NodeBB&lt;/a&gt;是一款专为现代网络构建的基于Node.js的论坛软件。&lt;/p&gt;
&lt;p&gt;在诸多论坛系统之中，NodeBB不说最好，至少也是最好之一了。界面也是比较耐看的。&lt;/p&gt;
&lt;p&gt;在部署上，确实稍许有些麻烦，本文中，笔者会讲述如何在CentOS7上部署NodeBB&lt;/p&gt;
&lt;h2 id="准备"&gt;准备&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CentOS 7x64服务器（RAM大于等于1G）&lt;/li&gt;
&lt;li&gt;EPEL yum库&lt;/li&gt;
&lt;li&gt;root权限&lt;/li&gt;
&lt;li&gt;善用Google&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="始"&gt;始&lt;/h2&gt;
&lt;p&gt;首先，我们应该确保CentOS是最新的，我们可以使用以下命令来做到这一点：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum -y update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装epel版本&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum -y install epel-release
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;之后，安装依赖软件&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum -y groupinstall &lt;span style="color:#e6db74"&gt;&amp;#34;Development Tools&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum -y install git redis ImageMagick
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过npm安装nodejs&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl https://raw.githubusercontent.com/creationix/nvm/v0.13.1/install.sh | bash
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source ~/.bash_profile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nvm list-remote
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nvm install v13.8.0 &lt;span style="color:#75715e"&gt;# 在上一个命令所列出来的列表中挑一个比较新的&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;现在启动redis并将其设置为开机自启&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl start redis
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl enable redis
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接下来，克隆NodeBB存储库：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd /path/to/nodebb/install/location
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone -b v1.13.2 https://github.com/NodeBB/NodeBB nodebb
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd nodebb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意：要克隆master分支，可以使用相同的命令，但不带“ -b”选项。&lt;/p&gt;
&lt;p&gt;安装依赖并进行基础设置&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./nodebb setup
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;设置防火墙&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;firewall-cmd --zone&lt;span style="color:#f92672"&gt;=&lt;/span&gt;public --add-port&lt;span style="color:#f92672"&gt;=&lt;/span&gt;4567/tcp --permanent
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;firewall-cmd --reload
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;启动论坛！&lt;/p&gt;</description></item><item><title>在设置crontab定时任务时出现时差问题</title><link>https://www.everains.com/p/306/</link><pubDate>Wed, 01 Jul 2020 09:46:00 +0000</pubDate><guid>https://www.everains.com/p/306/</guid><description>&lt;p&gt;最近在学习python爬虫时，需要配置crontab定时执行python脚本，以此爬取yande.re上的每日热图并po到我的[telegram频道][1]上，但是crontab并未定时执行任务。&lt;/p&gt;
&lt;p&gt;输入
tail -f /var/log/cron
有以下结果：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-log" data-lang="log"&gt;Apr 2 21:01:01 InsidiousFlickering-VM run-parts(/etc/cron.hourly)[12107]: starting 0anacron
Apr 2 21:01:01 InsidiousFlickering-VM run-parts(/etc/cron.hourly)[12116]: finished 0anacron
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输入date命令查看系统时间：
Fri Apr 3 09:10:20 CST 2020
可以得出crontab的时间比系统时间差了12个时区（这是因为我修改之前系统时间到东八区，而crontab所运行的环境与系统直接运行命令所调用的环境不同）&lt;/p&gt;
&lt;p&gt;因此如果出现系统时间与crontab时间不同步的情况，使用如下命令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 重启rsyslog日志服务&amp;amp;crontab&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;service rsyslog restart
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;service crond restart
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再次输入：
tail -f /var/log/cron&lt;/p&gt;
&lt;p&gt;就可以看到crontab时间已经与系统时间同步啦。&lt;/p&gt;
&lt;h3 id="至于修改系统时间"&gt;至于修改系统时间&lt;/h3&gt;
&lt;h1 id="使用东八区"&gt;使用东八区&lt;/h1&gt;
&lt;p&gt;[root]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[1]: &lt;a href="https://t.me/yande_hot"&gt;https://t.me/yande_hot&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Hostloc签到脚本[python3]</title><link>https://www.everains.com/p/294/</link><pubDate>Mon, 01 Jun 2020 15:57:00 +0000</pubDate><guid>https://www.everains.com/p/294/</guid><description>&lt;p&gt;[scode type=&amp;ldquo;green&amp;rdquo;]基于&lt;a href="https://www.hostloc.com/thread-533656-1-1.html"&gt;Vicer大佬的脚本&lt;/a&gt;，添加了sever酱微信推送服务。[/scode]&lt;/p&gt;
&lt;p&gt;使用Python3自带模块及requests
请按字典格式写好账户密码。&lt;/p&gt;
&lt;h3 id="安装requests"&gt;安装requests&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip3 install requests
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="下载签到脚本"&gt;下载签到脚本&lt;/h3&gt;
&lt;p&gt;可以使用以下命令下载：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget https://github.com/raiots/Script/raw/master/hostloc.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或者直接复制
[collapse status=&amp;ldquo;false&amp;rdquo; title=&amp;ldquo;点击展开&amp;rdquo;]&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# -*- coding: UTF-8 -*-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Author: MoeClub.org&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Adaptation: Raiot.me&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; re
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; sys
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; urllib &lt;span style="color:#f92672"&gt;import&lt;/span&gt; request, parse
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; http &lt;span style="color:#f92672"&gt;import&lt;/span&gt; cookiejar
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; requests
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 请务必将 SCKEY 替换为自己的！（第63行）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;account_dict &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;0&amp;#39;&lt;/span&gt;: {&lt;span style="color:#e6db74"&gt;&amp;#39;username&amp;#39;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;用户A&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;密码&amp;#39;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Login&lt;/span&gt;(URL, UserData):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; _cookies &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; _cookie &lt;span style="color:#f92672"&gt;=&lt;/span&gt; cookiejar&lt;span style="color:#f92672"&gt;.&lt;/span&gt;CookieJar()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; _handler &lt;span style="color:#f92672"&gt;=&lt;/span&gt; request&lt;span style="color:#f92672"&gt;.&lt;/span&gt;HTTPCookieProcessor(_cookie)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; _req &lt;span style="color:#f92672"&gt;=&lt;/span&gt; request&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Request(URL, data&lt;span style="color:#f92672"&gt;=&lt;/span&gt;parse&lt;span style="color:#f92672"&gt;.&lt;/span&gt;urlencode(UserData)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;encode(&lt;span style="color:#e6db74"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; request&lt;span style="color:#f92672"&gt;.&lt;/span&gt;build_opener(_handler)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;open(_req)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; cookie &lt;span style="color:#f92672"&gt;in&lt;/span&gt; _cookie:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; _cookies &lt;span style="color:#f92672"&gt;+=&lt;/span&gt; cookie&lt;span style="color:#f92672"&gt;.&lt;/span&gt;name &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;=&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; cookie&lt;span style="color:#f92672"&gt;.&lt;/span&gt;value &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; _cookies
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;GetPage&lt;/span&gt;(URL, Header_Cookies):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; _Header &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {&lt;span style="color:#e6db74"&gt;&amp;#39;Cookie&amp;#39;&lt;/span&gt;: str(Header_Cookies)}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; _req &lt;span style="color:#f92672"&gt;=&lt;/span&gt; request&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Request(URL, headers&lt;span style="color:#f92672"&gt;=&lt;/span&gt;_Header)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; request&lt;span style="color:#f92672"&gt;.&lt;/span&gt;urlopen(_req)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;read()&lt;span style="color:#f92672"&gt;.&lt;/span&gt;decode(&lt;span style="color:#e6db74"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;GetCredit&lt;/span&gt;(user_data, proto&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;https&amp;#39;&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; username &lt;span style="color:#f92672"&gt;=&lt;/span&gt; user_data[&lt;span style="color:#e6db74"&gt;&amp;#39;username&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Login_URL &lt;span style="color:#f92672"&gt;=&lt;/span&gt; proto &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;://www.hostloc.com/member.php?mod=logging&amp;amp;action=login&amp;amp;loginsubmit=yes&amp;amp;infloat=yes&amp;amp;lssubmit=yes&amp;amp;inajax=1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; My_Credit &lt;span style="color:#f92672"&gt;=&lt;/span&gt; proto &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;://www.hostloc.com/home.php?mod=spacecp&amp;amp;ac=credit&amp;amp;showcredit=1&amp;amp;inajax=1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; My_Home &lt;span style="color:#f92672"&gt;=&lt;/span&gt; proto &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;://www.hostloc.com/home.php?mod=spacecp&amp;amp;inajax=1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; My_Cookies &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Login(Login_URL, user_data)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;lt;td&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; str(username) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;lt;/td&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;not&lt;/span&gt; &lt;span style="color:#f92672"&gt;in&lt;/span&gt; GetPage(My_Home, My_Cookies):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#39;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;%s&lt;/span&gt;&lt;span style="color:#e6db74"&gt;] Login Fail!&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;%&lt;/span&gt; username)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CreditNum0 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; str(re&lt;span style="color:#f92672"&gt;.&lt;/span&gt;findall(&lt;span style="color:#e6db74"&gt;&amp;#39;[0-9]+&amp;#39;&lt;/span&gt;, GetPage(My_Credit, My_Cookies))[&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;except&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CreditNum0 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;Null&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; x &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(&lt;span style="color:#ae81ff"&gt;25297&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;25309&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; GetPage(proto &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;://www.hostloc.com/space-uid-&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;.html&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;format(x), My_Cookies)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; CreditNum0 &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;Null&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;raise&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Exception&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CreditNum1 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; str(re&lt;span style="color:#f92672"&gt;.&lt;/span&gt;findall(&lt;span style="color:#e6db74"&gt;&amp;#39;[0-9]+&amp;#39;&lt;/span&gt;, GetPage(My_Credit, My_Cookies))[&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; CreditNum0 &lt;span style="color:#f92672"&gt;==&lt;/span&gt; CreditNum1:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CreditDetails &lt;span style="color:#f92672"&gt;=&lt;/span&gt; str(CreditNum1)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CreditDetails &lt;span style="color:#f92672"&gt;=&lt;/span&gt; str(CreditNum0) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;-&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; str(CreditNum1)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;except&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CreditDetails &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;Null&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#39;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;%s&lt;/span&gt;&lt;span style="color:#e6db74"&gt;] Login Success! (Credit: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;%s&lt;/span&gt;&lt;span style="color:#e6db74"&gt;)&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;%&lt;/span&gt; (username, CreditDetails))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 请务必将 SCKEY 替换为自己的&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;http://sc.ftqq.com/SCKEY.send?text=签到成功! &amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;[&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; username &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;]&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;Credit:&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; CreditDetails 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; req &lt;span style="color:#f92672"&gt;=&lt;/span&gt; requests&lt;span style="color:#f92672"&gt;.&lt;/span&gt;get(sc)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; __name__ &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; len(sys&lt;span style="color:#f92672"&gt;.&lt;/span&gt;argv) &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; account_dict &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; account_list &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [sys&lt;span style="color:#f92672"&gt;.&lt;/span&gt;argv[x] &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; x &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, len(sys&lt;span style="color:#f92672"&gt;.&lt;/span&gt;argv))]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; account &lt;span style="color:#f92672"&gt;in&lt;/span&gt; account_list:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;:&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;not&lt;/span&gt; &lt;span style="color:#f92672"&gt;in&lt;/span&gt; account:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; account_dict[str(n)] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; account_dict[str(n)][&lt;span style="color:#e6db74"&gt;&amp;#39;username&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; str(str(account)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;split(&lt;span style="color:#e6db74"&gt;&amp;#34;:&amp;#34;&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; account_dict[str(n)][&lt;span style="color:#e6db74"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; str(str(account)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;split(&lt;span style="color:#e6db74"&gt;&amp;#34;:&amp;#34;&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)[&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n &lt;span style="color:#f92672"&gt;+=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, len(account_dict)):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; GetCredit(account_dict[str(i)])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;except&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;[/collapse]&lt;/p&gt;</description></item><item><title>在lnmp环境下搭建Tiny Tiny RSS</title><link>https://www.everains.com/p/273/</link><pubDate>Fri, 01 May 2020 15:17:00 +0000</pubDate><guid>https://www.everains.com/p/273/</guid><description>&lt;p&gt;自建RSS服务不仅可以使数据更可控，它还有丰富的插件可以满足各种各样的需求，比如全文内容提取、Fever API 模拟、DOM 操控、繁体转简体。&lt;/p&gt;
&lt;h3 id="安装fileinfo扩展"&gt;安装fileinfo扩展&lt;/h3&gt;
&lt;h4 id="对于lnmp-15版本"&gt;对于lnmp 1.5+版本：&lt;/h4&gt;
&lt;p&gt;修改lnmp安装包目录下的lnmp.conf 文件，将里面的Enable_PHP_Fileinfo=&amp;lsquo;n&amp;rsquo; 后面的n改成y 保存，然后 ./upgrade.sh php 升级一下PHP就会安装好fileinfo模块&lt;/p&gt;
&lt;h4 id="对于lnmp-14及更低版本"&gt;对于lnmp 1.4及更低版本：&lt;/h4&gt;
&lt;p&gt;建议参考：&lt;a href="https://www.laozuo.org/11801.html"&gt;LNMP一键环境安装Fileinfo扩展组件支持的办法&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="创建vhost"&gt;创建vhost&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lnmp vhost add
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;按以下方式配置：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-conf" data-lang="conf"&gt;Please enter domain(example: www.lnmp.org): ttrss.axiss.world
 Your domain: ttrss.axiss.world
Enter more domain name(example: lnmp.org *.lnmp.org): 
Please enter the directory for the domain: ttrss.axiss.world
Default directory: /home/wwwroot/ttrss.axiss.world: 
Virtual Host Directory: /home/wwwroot/ttrss.axiss.world
Allow Rewrite rule? (y/n) n
You choose rewrite: none
Enable PHP Pathinfo? (y/n) y
Enable pathinfo.
Allow access log? (y/n) n
Disable access log.
Create database and MySQL user with same name (y/n) y
Enter current root password of Database (Password will not shown): 
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="安装tiny-tiny-rss"&gt;安装Tiny Tiny RSS&lt;/h3&gt;
&lt;p&gt;git clone &lt;a href="https://git.tt-rss.org/fox/tt-rss.git"&gt;https://git.tt-rss.org/fox/tt-rss.git&lt;/a&gt; tt-rss
复制代码到网站目录下：
cp -R ttrss/* /home/wwwroot/ttrss.axiss.world
此时访问网站就可以进一步配置了。&lt;/p&gt;</description></item><item><title>【转】基于萌咖大佬的DD脚本</title><link>https://www.everains.com/p/301/</link><pubDate>Wed, 01 Apr 2020 20:37:00 +0000</pubDate><guid>https://www.everains.com/p/301/</guid><description>&lt;p&gt;[scode type=&amp;ldquo;blue&amp;rdquo;]loc上大佬修改的，解决萌咖脚本中一些导致安装错误的问题，并支持了CentOS7。[/scode]&lt;/p&gt;
&lt;p&gt;在这里备份一下。&lt;/p&gt;
&lt;h3 id="支持重装的系统"&gt;支持重装的系统：&lt;/h3&gt;
&lt;p&gt;Debian 9/10
Ubuntu 18.04/16.04
CentOS 6/7
自定义DD镜像&lt;/p&gt;
&lt;h3 id="特性优化"&gt;特性/优化：&lt;/h3&gt;
&lt;p&gt;自动获取IP地址、网关、子网掩码
自动判断网络环境，选择国内/外镜像，再也不用担心卡半天了
超级懒人一键化，无需复杂的命令
解决萌咖脚本中一些导致安装错误的问题
CentOS 7 镜像抛弃LVM，回归ext4，减少不稳定因素&lt;/p&gt;
&lt;h3 id="使用方法"&gt;使用方法：&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget --no-check-certificate -O AutoReinstall.sh https://git.io/AutoReinstall.sh &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; bash AutoReinstall.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意，脚本执行过程中会给出默认密码，如图：
&lt;img src="https://images.raiot.me/images/2020/04/01/SScreenshot.jpg" alt="passwd"&gt;&lt;/p&gt;
&lt;p&gt;自动退出后需要等一下再重新登录哦。&lt;/p&gt;
&lt;p&gt;ps. 一些玄学问题得不到解释：在阿里云上测试全功能可用，在aws上测试dd功能正常，其他还没有测试&amp;hellip;..&lt;/p&gt;
&lt;p&gt;&lt;a href="https://hostloc.com/thread-645870-1-1.html"&gt;原址&lt;/a&gt;&lt;/p&gt;</description></item><item><title>在linux上分割txt</title><link>https://www.everains.com/p/232/</link><pubDate>Sun, 01 Mar 2020 21:07:00 +0000</pubDate><guid>https://www.everains.com/p/232/</guid><description>&lt;p&gt;以前在mp3上导入小说就是先用这个命令分割了txt文件，然后再导入的。&lt;/p&gt;
&lt;p&gt;主要适用于无法加书签的mp3。&lt;/p&gt;
&lt;h3 id="split命令"&gt;split命令&lt;/h3&gt;
&lt;p&gt;split 是以一个很好的分割工具，它可以将一个文件[scode type=&amp;ldquo;yellow&amp;rdquo;]按行[/scode]分割出来。
split的用法：
split [OPTION]… [INPUT [PREFIX]&lt;/p&gt;
&lt;h4 id="使用实例"&gt;使用实例&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;split -l &lt;span style="color:#ae81ff"&gt;10000&lt;/span&gt; 诡秘之主.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样就能将 诡秘之主.txt 分割成许多个10000行的txt文件了。&lt;/p&gt;
&lt;p&gt;（最后一个文件不满10000行）&lt;/p&gt;
&lt;p&gt;&lt;del&gt;耶✌，油水了一篇&lt;/del&gt;&lt;/p&gt;</description></item><item><title>一键提取typecho中的所有文章！</title><link>https://www.everains.com/p/254/</link><pubDate>Sat, 01 Feb 2020 19:49:00 +0000</pubDate><guid>https://www.everains.com/p/254/</guid><description>&lt;p&gt;在typecho中发布的文章一般都是存在数据库里的，如果想要将博客迁移到Hexo/jekyll这样的静态博客还得挨个复制文章内容，十分的麻烦。&lt;/p&gt;
&lt;p&gt;直到笔者发现了&lt;a href="https://github.com/NewbMiao"&gt;NewbMiao大佬&lt;/a&gt;写的转换脚本。&lt;/p&gt;
&lt;h3 id="转换"&gt;转换！&lt;/h3&gt;
&lt;p&gt;整个步骤非常的简单，只需要如下三步：&lt;/p&gt;
&lt;h4 id="下载转换脚本"&gt;下载转换脚本&lt;/h4&gt;
&lt;p&gt;进入想要存放提取出来的md文件目录，输入：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget https://raw.githubusercontent.com/NewbMiao/typecho2Hexo/master/converter.php
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="修改数据库信息"&gt;修改数据库信息&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nano converter.php
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;你会看到如下的部分内容&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 运行 php converter.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$db &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;mysqli&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 根据实际情况更改
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$db&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;connect&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;username&amp;#39;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;,&lt;span style="color:#e6db74"&gt;&amp;#39;database&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$prefix &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;typecho_&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$sql &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;TEXT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;select&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;title&lt;/span&gt;,&lt;span style="color:#a6e22e"&gt;text&lt;/span&gt;,&lt;span style="color:#a6e22e"&gt;created&lt;/span&gt;,&lt;span style="color:#a6e22e"&gt;category&lt;/span&gt;,&lt;span style="color:#a6e22e"&gt;tags&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;from&lt;/span&gt; {$prefix}&lt;span style="color:#a6e22e"&gt;contents&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;c&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将localhost，username，password，database，typecho_填写为你安装typecho时输入的信息。&lt;/p&gt;
&lt;h4 id="一键起飞"&gt;一键起飞！&lt;/h4&gt;
&lt;p&gt;输入 p[scode type=&amp;ldquo;blue&amp;rdquo;]php converter.php[/scode]&lt;/p&gt;
&lt;p&gt;就会发现文章都被提取出来了。&lt;/p&gt;
&lt;p&gt;直接粘贴进hexo的_posts即可使用！&lt;/p&gt;</description></item><item><title>在Ubuntu环境下通过apt安装python3.7</title><link>https://www.everains.com/p/226/</link><pubDate>Fri, 01 Nov 2019 09:17:00 +0000</pubDate><guid>https://www.everains.com/p/226/</guid><description>&lt;p&gt;相比于CentOs安装python3的轻松自在，在Ubuntu系安装实在磕磕绊绊，一些网上的教材似乎没有效用，各种缺少依赖的问题非常的令人崩溃。&lt;/p&gt;
&lt;p&gt;尤其是使用源码安装，这里暂且不表。&lt;/p&gt;
&lt;p&gt;[scode type=&amp;ldquo;share&amp;rdquo;]Python是世界上最受欢迎的编程语言之一。Python语法简单易学，是初学者和经验丰富的开发人员的理想选择。Python是一种用途广泛的编程语言，您可以使用它来执行几乎任何您想做的事情，编写小型脚本，构建游戏，开发网站，创建机器学习算法，分析数据等等。[/scode]&lt;/p&gt;
&lt;h2 id="使用apt在ubuntu上安装python-37"&gt;使用Apt在Ubuntu上安装Python 3.7&lt;/h2&gt;
&lt;h4 id="1使用apt在ubuntu上安装python-37是一个相对简单的过程只需几分钟"&gt;1.使用apt在Ubuntu上安装Python 3.7是一个相对简单的过程，只需几分钟：&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install software-properties-common
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="2接下来将deadsnakes-ppa添加到您的来源列表中"&gt;2.接下来，将Deadsnakes PPA添加到您的来源列表中：&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo add-apt-repository ppa:deadsnakes/ppa
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;出现提示的时候按enter就行。&lt;/p&gt;
&lt;h4 id="3启用存储库后请使用以下命令安装python-37"&gt;3.启用存储库后，请使用以下命令安装Python 3.7：&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install python3.7
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="4至此python-37已安装在您的ubuntu系统上可以使用了您可以通过键入以下内容进行验证"&gt;4.至此，Python 3.7已安装在您的Ubuntu系统上，可以使用了。您可以通过键入以下内容进行验证：&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python3.7 --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考：&lt;a href="https://linuxize.com/post/how-to-install-python-3-7-on-ubuntu-18-04/"&gt;How to install python3.7 on ubuntu 18-04&lt;/a&gt;&lt;/p&gt;</description></item><item><title>分享一个下载youtube视频的网站</title><link>https://www.everains.com/p/228/</link><pubDate>Tue, 01 Oct 2019 08:46:00 +0000</pubDate><guid>https://www.everains.com/p/228/</guid><description>&lt;p&gt;这个真的巨好用，不像有些网站一堆重定向还会让你误点广告什么的。&lt;/p&gt;
&lt;p&gt;比如说一个地址是&lt;a href="https://youtube.com/watch?v=aAhPaiajwDY"&gt;https://youtube.com/watch?v=aAhPaiajwDY&lt;/a&gt;在youtube前面加两个s变成&lt;a href="https://ssyoutube.com/watch?v=aAhPaiajwDY"&gt;https://ssyoutube.com/watch?v=aAhPaiajwDY&lt;/a&gt;就可以了😊&lt;/p&gt;
&lt;p&gt;还有一个能同时下载字幕的，不过是软件。https://github.com/free-ssr/free-ss/wiki/youtube-%E4%B8%8B%E8%BD%BD&lt;/p&gt;</description></item><item><title>CentOS安装Python3</title><link>https://www.everains.com/p/223/</link><pubDate>Sun, 01 Sep 2019 07:25:00 +0000</pubDate><guid>https://www.everains.com/p/223/</guid><description>&lt;p&gt;centos7原本就安装了Python2，而且这个Python2不能被删除，因为有很多系统命令，比如yum都要用到。&lt;/p&gt;
&lt;h3 id="安装python3"&gt;安装python3&lt;/h3&gt;
&lt;p&gt;安装依赖包(这一点对于源码安装特别重要，如果少了像SQLite这样的包，正常使用没啥问题，但一旦要import sqlite 就得麻爪&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum -y groupinstall &lt;span style="color:#e6db74"&gt;&amp;#34;Development tools&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;创建一个存放源码的文件夹并进入：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir /usr/local/python3 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd /usr/local/python3 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后根据自己需求下载不同版本的Python3，这里笔者安装的是Python3.7.2:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;开始源码安装：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-shlp" data-lang="shlp"&gt;tar -xvJf Python-3.7.2.tar.xz
cd Python-3.7.2
./configure --prefix=/usr/local/python3
make &amp;amp;&amp;amp; make install
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;最后创建软链接:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ln -s /usr/local/python3/bin/python3 /usr/bin/python3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后，就可以在命令行中输入&lt;strong&gt;python3&lt;/strong&gt;测试啦～&lt;/p&gt;
&lt;p&gt;参考：&lt;a href="https://www.cnblogs.com/FZfangzheng/p/7588944.html"&gt;Centos7安装Python3的方法&lt;/a&gt;&lt;/p&gt;</description></item><item><title>让树莓派成为一个FM发射电台</title><link>https://www.everains.com/p/215/</link><pubDate>Fri, 02 Aug 2019 21:34:00 +0000</pubDate><guid>https://www.everains.com/p/215/</guid><description>&lt;p&gt;[scode type=&amp;ldquo;red&amp;rdquo;]本文仅供学习与交流，请遵守当地法律。[/scode]&lt;/p&gt;
&lt;h3 id="初"&gt;初&lt;/h3&gt;
&lt;p&gt;相比于淘宝上的那些几毫瓦功率的fm发射器，树莓派的GPIO口功率还是蛮大的！&lt;/p&gt;
&lt;p&gt;看如果加上一节70cm的杜邦线，范围可以达到100m！&lt;/p&gt;
&lt;p&gt;运行频率为0~250Mhz。&lt;/p&gt;
&lt;h4 id="主要原理"&gt;主要原理&lt;/h4&gt;
&lt;p&gt;根据&lt;a href="https://zh.wikipedia.org/wiki/%E9%A6%AC%E5%85%8B%E5%A3%AB%E5%A8%81%E6%96%B9%E7%A8%8B%E7%B5%84"&gt;&lt;strong&gt;麦克斯韦的电磁场理论&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;变化的磁场能够在周围空间产生电场，变化的电场能够在周围空间产生磁场。&lt;/li&gt;
&lt;li&gt;随时间均匀变化的磁场(电场)产生稳定电场(磁场)。随时间不均匀变化的磁场(电场)产生变化的电场(磁场)。&lt;/li&gt;
&lt;li&gt;变化的电场和变化的磁场总是相互关系着，形成一个不可分割的统一体，这就是电磁场。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;随时间变化的电场产生磁场，而随时间变化的磁场又产生电场，两者互为因果。这种不断转化的场统称为电磁场。这种相互的转化形成电磁振荡。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;所以如果在树莓派的 GPIO 上，通过软件控制以一定频率输出高低电平(0/1)，再加上适当长度的天线(一根杜邦线即可)就可以将能量以电磁波的形式发射出去。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;于是，&lt;a href="http://www.icrobotics.co.uk/wiki/index.php/Turning_the_Raspberry_Pi_Into_an_FM_Transmitter"&gt;Oliver Mattos和Oskar Weigl开发了一个能将 16bit wav 的音乐文件转化为二进制并以电磁波形式发射的项目。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;可以注意到，这里只能使用WAV格式文件，并且WAV文件必须是16 bit 22.5kHz Mono格式的。&lt;/p&gt;
&lt;p&gt;为此，ma6157通过mpg123这个软件进行解码，解码之后输出到终端上，这时就已经转换成wav格式了。然后树莓派的pifm程序设置成从终端读取音频，这样再通过一个管道将两个程序连起来，就能实现一边解码一边播放了。&lt;/p&gt;
&lt;p&gt;这是一个不错的项目，不过因为时间长了，大部分代码已经失效。&lt;/p&gt;
&lt;p&gt;提了issue之后原作者删除了关于根据歌名，自动前往搜狗提取直链的代码。&lt;/p&gt;
&lt;p&gt;只保留了通过访问 http://0.0.0.0:8080 &lt;strong&gt;自行输入音乐链接&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;然而……web服务器似乎仍然有一些问题，比如在输入音乐链接后cpu飙到100%，无法播放音乐等一系列问题……&lt;/p&gt;
&lt;p&gt;so……&lt;del&gt;笔者删除了关于web服务器方面的的所有代码&lt;/del&gt;(还是没删，只是在start.sh里更改了引导)，使它只能根据list.py的歌单播放本地音乐。&lt;/p&gt;
&lt;p&gt;先使用setup.sh安装依赖再使用start.sh启动fm即可～&lt;/p&gt;
&lt;p&gt;音乐文件在list.py中修改目录和mp3文件名称。&lt;/p&gt;
&lt;h3 id="始"&gt;始&lt;/h3&gt;
&lt;p&gt;整体还是比较简单的，首先下载源代码。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget https://github.com/kirainl/fmpi/archive/v1.0.zip
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;解压。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;unzip v1.0.zip
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;进入文件夹。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd fmpi-1.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;首先运行setup.sh安装依赖。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo bash setup.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>博客添加Google Adsense广告</title><link>https://www.everains.com/p/210/</link><pubDate>Wed, 10 Jul 2019 15:43:00 +0000</pubDate><guid>https://www.everains.com/p/210/</guid><description>&lt;p&gt;前几天递交的 Google Adsense发布商 申请竟然过了，着实把笔者惊讶了一番。&lt;/p&gt;
&lt;p&gt;才刚发到第23篇文章耶！&lt;/p&gt;
&lt;p&gt;管它，既然通过了，那不放几个广告怎么对得起主题设置上“文章页脚广告位那个选项呢“ ::aru:meditation::&lt;/p&gt;
&lt;p&gt;&lt;img src="images/5d2599a5628b177028.jpg" alt="GA"&gt;&lt;/p&gt;
&lt;p&gt;所以以后文章的页脚就会出现一个小小的广告。&lt;/p&gt;
&lt;p&gt;不会影响阅读体验哒！&lt;/p&gt;</description></item><item><title>在vps上设置 SSH 通过密钥登录</title><link>https://www.everains.com/p/203/</link><pubDate>Mon, 08 Jul 2019 15:00:00 +0000</pubDate><guid>https://www.everains.com/p/203/</guid><description>&lt;p&gt;一般我们使用 Xshell 等 SSH 客户端来远程管理 Linux 服务器。&lt;/p&gt;
&lt;p&gt;But，一般的密码方式登录，就会产生密码可能被暴力破解的问题。（用16位乱序密码的大触除外）&lt;/p&gt;
&lt;p&gt;那么，如何&lt;strong&gt;一劳永逸&lt;/strong&gt;地解决服务器被暴力破解的问题呢？&lt;/p&gt;
&lt;p&gt;那就是通过密钥方式登录。&lt;/p&gt;
&lt;h5 id="使用密钥登入的好处"&gt;使用密钥登入的好处：&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;del&gt;逼格高&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;安全性强&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;tips. 使用密钥登入只会改变ssh登入方式，在vps使用sudo时让你输的密码还是之前的密码。&lt;/p&gt;
&lt;h2 id="始"&gt;始&lt;/h2&gt;
&lt;h3 id="1-制作密钥对"&gt;1. 制作密钥对&lt;/h3&gt;
&lt;p&gt;首先在服务器上制作密钥对。（只要是linux系统的就行，有特殊癖好的可以在家里的linux电脑上做。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root@Angle:~ ssh-keygen &lt;span style="color:#75715e"&gt;#建立密钥对&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;enerating public/private rsa key pair.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Enter file in which to save the key &lt;span style="color:#f92672"&gt;(&lt;/span&gt;/root/.ssh/id_rsa&lt;span style="color:#f92672"&gt;)&lt;/span&gt;: &lt;span style="color:#75715e"&gt;#按Enter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Enter passphrase &lt;span style="color:#f92672"&gt;(&lt;/span&gt;empty &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; no passphrase&lt;span style="color:#f92672"&gt;)&lt;/span&gt;: &lt;span style="color:#75715e"&gt;#输入密钥锁码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Enter same passphrase again: &lt;span style="color:#75715e"&gt;#再输入一遍密钥锁码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Your identification has been saved in /root/.ssh/id_rsa. &lt;span style="color:#75715e"&gt;#私钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Your public key has been saved in /root/.ssh/id_rsa.pub. &lt;span style="color:#75715e"&gt;#公钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;The key fingerprint is:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;balabala
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;密钥锁码在使用私钥时必须输入，这样就可以保护私钥不被盗用。当然，也可以留空，实现无密码登录。&lt;/p&gt;
&lt;p&gt;现在，在 root 用户的主目录中生成了一个 .ssh 的隐藏目录，内含两个密钥文件。id_rsa 为私钥，id_rsa.pub 为公钥。&lt;/p&gt;</description></item><item><title>LNMP部署Chevereto图床</title><link>https://www.everains.com/p/174/</link><pubDate>Sat, 15 Jun 2019 10:39:00 +0000</pubDate><guid>https://www.everains.com/p/174/</guid><description>&lt;p&gt;Chevereto图床总得来说还不错，批量上传图片的话可以自动生成markdown链接。&lt;/p&gt;
&lt;p&gt;现在有收费版本（有破解版）以及免费版本；建议使用正版的免费版本，免费版本功能个人用户完全够用。&lt;/p&gt;
&lt;h2 id="初"&gt;初&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;建议使用作者提供的免费版本。&lt;/li&gt;
&lt;li&gt;Lnmp环境采用的是 &lt;a href="https://lnmp.org/"&gt;https://lnmp.org/&lt;/a&gt;提供的一键脚本。&lt;/li&gt;
&lt;li&gt;PHP版本推荐7.1。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="始"&gt;始&lt;/h2&gt;
&lt;h4 id="1lnmp安装并添加vhost"&gt;1.lnmp安装并添加vhost。&lt;/h4&gt;
&lt;h4 id="2配置伪静态"&gt;2.配置伪静态&lt;/h4&gt;
&lt;p&gt;在/usr/local/nginx/conf/vhost中找到你的vhost配置文件，加入到server块内：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Image not found replacement
location ~* (jpe?g|png|gif) {
 log_not_found off;
 error_page 404 /content/images/system/default/404.gif;
}

# CORS header (avoids font rendering issues)
location ~ \.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$ {
 add_header Access-Control-Allow-Origin &amp;#34;*&amp;#34;;
}

# Pretty URLs
location / {
try_files $uri $uri/ /index.php？$query_string;
}
location /admin {
 try_files $uri /admin/index.php?$args;
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;[1]: https://blog.tearth.me/chevereto/
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="3下载源码"&gt;3.下载源码&lt;/h4&gt;
&lt;p&gt;首先进入事先添加好的虚拟主机目录：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd /home/wwwroot/domain.com
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;下载Chevereto程序文件到网站目录，这里下载安装的是 Free1.1.3版本；如果需要下载最新版，访问&lt;a href="https://github.com/Chevereto/Chevereto-Free/releases"&gt;chevereto的github存储库&lt;/a&gt;
&lt;a href="https://github.com/Chevereto/Chevereto-Free/archive/1.1.3.zip"&gt;https://github.com/Chevereto/Chevereto-Free/archive/1.1.3.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;解压并将程序文件移动到网站根目录：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;unzip 1.1.3.zip &amp;amp;&amp;amp; cd Chevereto-Free-1.1.1 &amp;amp;&amp;amp; mv * ../
cd ../ &amp;amp;&amp;amp; rm -rf Chevereto-Free-1.1.1.zip Chevereto-Free-1.1.1
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="4事先建立数据库"&gt;4.事先建立数据库&lt;/h4&gt;
&lt;p&gt;可以使用phpmyadmin，navicat premium等可视化工具创建数据库创建数据库，也可以在终端使用SQL命令；数据库名称自定。&lt;/p&gt;</description></item><item><title>linux初级个性化设置</title><link>https://www.everains.com/p/172/</link><pubDate>Sat, 08 Jun 2019 23:17:00 +0000</pubDate><guid>https://www.everains.com/p/172/</guid><description>&lt;p&gt;这个教程主要针对于服务器用户的更换主机名与motd。&lt;/p&gt;
&lt;h2 id="更换主机名hostname"&gt;更换主机名（hostname）&lt;/h2&gt;
&lt;h3 id="修改hosts文件"&gt;修改hosts文件&lt;/h3&gt;
&lt;p&gt;首先，修改hosts文件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo nano /etc/hosts
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你会看到如下内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;127.0.0.1 localhost
……
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;只需要在localhost下面加一行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;127.0.0.1 你想要的hostname
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;修改之后：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;127.0.0.1 localhost
127.0.0.1 你想要的hostname
……
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="修改hostname文件"&gt;修改hostname文件&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo nano /etc/hostname
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;把里面原有的内容全部删掉，换成你所要的hostname&lt;/p&gt;
&lt;h4 id="注意hostname文件里的内容必须和hosts文件中你所添加的那个hostname一致否则会出现-hostname-unable-to-resolve-错误"&gt;注意：hostname文件里的内容必须和hosts文件中你所添加的那个hostname一致，否则会出现 hostname unable to resolve 错误！！！&lt;/h4&gt;
&lt;h2 id="修改motd"&gt;修改motd&lt;/h2&gt;
&lt;p&gt;这个motd好像是ubuntu自带的：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你使用过Debian/Ubuntu分发版，你可能已经发现，Ubuntu默认就已经有一个动态的MOTD信息提示（通过SSH或本地登录时显示系统当前的一些信息）。在RHEL/CentOS中不可能实现像在Debian/Ubuntu中这样的功能，因为RHEL/CentOS并没有提供与之相关的任何脚本。我们可以通过环境变量文件，如/etc/profile、/etc/bashrc等，将需要执行的命令或脚本添加到这些文件末尾，这样当每次用户登陆时，系统就会读取这些文件，执行文件里定义好的脚本。除此之外，也可以结合使用crontab计划任务，将预先准备好的脚本，如系统监控，异常信息收集通过crontab在后台定期执行，并把收集到的信息重定向写到/etc/motd文件中。在用户登录系统时，就可以显示这些系统监控、异常处理信息了。——https://blog.51cto.com/7424593/1922111&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在Ubuntu中，提供了一组脚本在目录/etc/update-motd.d/中，在用户登录时，按照脚本名字前缀的数字(00-99)顺序执行，并将这些脚本的输出保存到文件/run/motd.dynamic中，最终用户成功登录后，在登录的屏幕界面中打印出来。输出结果如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.kirain.me:6001/images/2019/07/08/IMG_20190608_231402.jpg" alt="l"&gt;&lt;/p&gt;
&lt;p&gt;但是这个motd好烦啊，因为我是ubuntu16.04的系统，所以它每次都要提醒我“ubuntu18.04 LTS is avalible ” balabala……&lt;/p&gt;
&lt;p&gt;对于强迫症患者简直。。。&lt;/p&gt;
&lt;p&gt;但是你不能把/etc/update-motd.d/中的文件直接删掉，删掉之后还会自动蹦出来。&lt;/p&gt;
&lt;p&gt;所以怎么办？&lt;/p&gt;
&lt;p&gt;挨个修改/etc/update-motd.d/里的文件，把里面的“printf”语句全都注释掉！&lt;/p&gt;
&lt;p&gt;eq：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;printf &amp;quot;Welcome to %s (%s %s %s)\n&amp;quot; &amp;quot;$DISTRIB_$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;变成&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# printf &amp;quot;Welcome to %s (%s %s %s)\n&amp;quot; &amp;quot;$DISTRIB_$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;大功告成！&lt;/p&gt;</description></item><item><title>deepin——一个令人惊艳的操作系统</title><link>https://www.everains.com/p/170/</link><pubDate>Sun, 02 Jun 2019 19:53:00 +0000</pubDate><guid>https://www.everains.com/p/170/</guid><description>&lt;p&gt;深度操作系统（deepin）是一个致力于为全球用户提供美观易用、安全可靠的Linux发行版。&lt;/p&gt;
&lt;h3 id="序"&gt;序&lt;/h3&gt;
&lt;p&gt;接触deepin，主要还是因为家里的这台 lenovo X61。&lt;/p&gt;
&lt;p&gt;笔者也不知道家里为什么会有一台这么老的机子，每当开机，总能听到那种如老耕牛般的的喘息声。&lt;/p&gt;
&lt;p&gt;那是机械硬盘的过电，是冷却风扇在挪移。&lt;/p&gt;
&lt;p&gt;等开机了，那是老到掉牙的xp系统。&lt;/p&gt;
&lt;p&gt;不如&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;h3 id="初"&gt;初&lt;/h3&gt;
&lt;p&gt;虽然准备装个linux来开启这台老电脑的第二春，但本来也不准备装deepin。&lt;/p&gt;
&lt;p&gt;因为，ta是国产系统。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1.深度Linux（Deepin）&lt;/p&gt;
&lt;p&gt;2.优麒麟（UbuntuKylin）（由中国CCN联合实验室支持和主导的开源项目）&lt;/p&gt;
&lt;p&gt;3.中标麒麟（NeoKylin&lt;/p&gt;
&lt;p&gt;4.威科乐恩Linux（WiOS）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;国产系统，用的也不是很多，但还是换了个皮骗经费的居多。&lt;/p&gt;
&lt;p&gt;so，Raspbian系统是我最初的打算。&lt;/p&gt;
&lt;p&gt;但是嘛，因为种种不可描述的原因，还是被某人刻了一个deepin的安装盘。&lt;/p&gt;
&lt;p&gt;嘛，盘都刻了，只好装咯。&lt;/p&gt;
&lt;p&gt;安装盘插入，F1重启，选择startup&amp;hellip;&amp;hellip;这些步骤根据自己的电脑。&lt;/p&gt;
&lt;h3 id="始"&gt;始&lt;/h3&gt;
&lt;h4 id="界面"&gt;界面&lt;/h4&gt;
&lt;p&gt;进入桌面，emmm，奈何学识不多，只能一句我屮艸芔茻&lt;/p&gt;
&lt;p&gt;&lt;img src="images/_20190602182253.png" alt="好看的桌面"&gt;&lt;/p&gt;
&lt;p&gt;抱歉，实在是因为ubuntu的界面low爆了，各种美化也救不回来。&lt;/p&gt;
&lt;p&gt;这种反差。&lt;/p&gt;
&lt;p&gt;作为颜控，我只能说——吹爆！&lt;/p&gt;
&lt;p&gt;程序坞有两种模式，一种始类似win7，另一种类似macos。&lt;/p&gt;
&lt;p&gt;整体感观类似于mac和win的混合？&lt;/p&gt;
&lt;p&gt;不管了，吹爆就是了。&lt;/p&gt;
&lt;h4 id="功能"&gt;功能&lt;/h4&gt;
&lt;p&gt;功能更是wonderful&lt;/p&gt;
&lt;p&gt;系统自带WPS，QQ，网易云音乐以及大许多的系统自带&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="images/_20190602193837.png" alt="l"&gt;&lt;/p&gt;
&lt;p&gt;可以说，很适合小白，也满足了基本办公需要。&lt;/p&gt;
&lt;p&gt;应用商城自带wine，所以兼容大部分的windows程序。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/_20190602193902.png" alt="ll"&gt;&lt;/p&gt;
&lt;h5 id="流畅"&gt;流畅？&lt;/h5&gt;
&lt;p&gt;听说前几个版本还会不时卡顿，现在笔者所使用的15.10没有这些问题。&lt;/p&gt;
&lt;p&gt;毕竟是linux内核，自带buff。&lt;/p&gt;
&lt;p&gt;先说到这，通篇就俩字：吹爆。&lt;/p&gt;</description></item><item><title>linux基本命令-Ubuntu</title><link>https://www.everains.com/p/167/</link><pubDate>Sat, 25 May 2019 18:23:00 +0000</pubDate><guid>https://www.everains.com/p/167/</guid><description>&lt;p&gt;一个朋友打算在 linux 环境下搭一个 minecraft 的服务器，顺便写了这个教程。&lt;/p&gt;
&lt;p&gt;所有命令均可在 Ubuntu16.04 系统中使用。&lt;/p&gt;
&lt;h2 id="系统"&gt;系统&lt;/h2&gt;
&lt;h3 id="管理员"&gt;管理员&lt;/h3&gt;
&lt;p&gt;sudo +命令 使用管理员权限。&lt;/p&gt;
&lt;h3 id="进程"&gt;进程&lt;/h3&gt;
&lt;h4 id="查看进程"&gt;查看进程&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;ps aux | less
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中，&lt;/p&gt;
&lt;p&gt;-A：显示所有进程&lt;/p&gt;
&lt;p&gt;a：显示终端中包括其它用户的所有进程&lt;/p&gt;
&lt;p&gt;x：显示无控制终端的进程&lt;/p&gt;
&lt;h4 id="杀进程"&gt;杀进程&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;kill [pid]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[pid] 是指查看进程中出现的 pid 对应数字。&lt;/p&gt;
&lt;h3 id="软件"&gt;软件&lt;/h3&gt;
&lt;h4 id="安装软件"&gt;安装软件&lt;/h4&gt;
&lt;p&gt;安装软件softname1&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install softname1
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id="卸载软件"&gt;卸载软件&lt;/h4&gt;
&lt;p&gt;卸载软件softname1&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt remove softname1
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="文件"&gt;文件&lt;/h2&gt;
&lt;h3 id="常用"&gt;常用&lt;/h3&gt;
&lt;p&gt;创建目录&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir 目录名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看当前目录内文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ls 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;进入目录&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd 目录名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;回到上级目录&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ..
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;删除文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rm 文件名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;删除目录&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rm -rf 目录名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;移动文件或目录&lt;/p&gt;</description></item><item><title>WebGL流体模拟</title><link>https://www.everains.com/p/164/</link><pubDate>Fri, 24 May 2019 20:23:00 +0000</pubDate><guid>https://www.everains.com/p/164/</guid><description>&lt;p&gt;这是一个完全在GPU上运行的快速，稳定的流体模拟。&lt;/p&gt;
&lt;p&gt;流体无处不在：水流经河岸之间，烟雾从发光的香烟中卷曲，蒸汽从茶壶中涌出，水蒸气形成云层，油漆混合在罐中。所有这些都是流体的流动。所有这些都是我们想要在交互式图形应用程序中逼真描绘的现象。&lt;/p&gt;
&lt;p&gt;笔者在gayhub上发现了这样的一个web项目&lt;a href="https://github.com/PavelDoGreat/WebGL-Fluid-Simulation"&gt;WebGL&lt;/a&gt;，挺有意思的。&lt;/p&gt;
&lt;p&gt;已将源码上传至服务器，可以通过&lt;a href="https://kirain.me/usr/extra/WebGL/"&gt;DEMO（点我）&lt;/a&gt;使用。&lt;/p&gt;
&lt;p&gt;手机的话用手指滑动屏幕绘制 ::aru:pouting::&lt;/p&gt;
&lt;p&gt;emmm挺漂亮的 ::aru:smile::&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.kirain.me:6001/images/2019/07/08/IMG_20190524_201733.jpg" alt="q"&gt;&lt;/p&gt;</description></item><item><title>推荐一个百度网盘文件下载工具</title><link>https://www.everains.com/p/160/</link><pubDate>Sat, 18 May 2019 20:04:00 +0000</pubDate><guid>https://www.everains.com/p/160/</guid><description>&lt;p&gt;前几天打算下一个Elise the Devil的无圣光补丁，但是由于文件比较大，是无法在百度网盘网页版中进行下载的。本来准备在chrome上找一个获取直链的插件，结果也找不到了。（主要是懒&lt;/p&gt;
&lt;p&gt;于是我就使用了&lt;a href="https://www.speedpan.com/#"&gt;SpeedPan&lt;/a&gt;下载&lt;/p&gt;
&lt;p&gt;说到SpeedPan，在之前也用过，当时用的是免费版。只不过免费的东西最贵，各种断链，使用观感不是很好。&lt;/p&gt;
&lt;p&gt;而这次老眼昏花，没咋看清直接点下载，使用了他的付费版本。&lt;/p&gt;
&lt;p&gt;总体来说还算不错，1RMB 可买到10G 的流量，对于我这种百度网盘的低频使用者来说倒是够用。&lt;/p&gt;
&lt;p&gt;在目前的网络环境下，我的下载速度是2.5m/s&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.kirain.me:6001/images/2019/07/08/52b762deeffa3b6567c9f402f8a7dd86.png" alt="speed"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.kirain.me:6001/images/2019/07/08/1.png" alt="a"&gt;&lt;/p&gt;
&lt;p&gt;也就是是应急用用，能下就行 ::aru:pouting::&lt;/p&gt;
&lt;p&gt;Q1 为啥不用百度的超级会员&lt;/p&gt;
&lt;p&gt;之前也买过一个月，主要是笔者使用百度网盘的频率实在是低，甚至连它的客户端都懒得下 ::aru:distressed::&lt;/p&gt;
&lt;p&gt;就酱，成功的水了一篇 OωO&lt;/p&gt;</description></item><item><title>福利/注册office365教育版</title><link>https://www.everains.com/p/159/</link><pubDate>Sat, 11 May 2019 14:57:00 +0000</pubDate><guid>https://www.everains.com/p/159/</guid><description>&lt;p&gt;众多周知,office365教育版是目前最好的白嫖onedrive1T方式 ::aru:proud::&lt;/p&gt;
&lt;p&gt;翻车的可能性也比较低，一些不重要的资料也可以放在上面。&lt;/p&gt;
&lt;p&gt;感兴趣的朋友可以去试试。&lt;/p&gt;
&lt;p&gt;这里使用的是临时教育邮箱注册。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://t.odmail.cn/"&gt;临时edu邮箱&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;笔者注册了一次之后第二次就接收不到验证邮件了，可能有ip限制。&lt;/p&gt;
&lt;p&gt;可以使用临时邮箱分配的随机地址，但自己也可以修改。&lt;/p&gt;
&lt;p&gt;把邮箱地址复制之后，输入office365的注册地址即可。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://signup.microsoft.com/signup?sku=student"&gt;office365教育版注册&lt;/a&gt;&lt;/p&gt;</description></item><item><title>搭建hexo博客引擎</title><link>https://www.everains.com/p/132/</link><pubDate>Mon, 06 May 2019 21:12:00 +0000</pubDate><guid>https://www.everains.com/p/132/</guid><description>&lt;h4 id="恕我直言hexo实在是如果服务器配置有限还是建议jekyll或者"&gt;恕我直言，hexo实在是。。。如果服务器配置有限，还是建议&lt;a href="https://kirain.me/index.php/archives/7/"&gt;jekyll&lt;/a&gt;或者：&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;Tom CzHen:
你先在 pc上生成静态文件，zero w 只做静态托管就ok了。
如果是生成好的静态文件放在nginx 访问，那么问题不是在hexo上面，如果是 hexo-server 通过 nginx 反代，就先换成我说的方式，再试试。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="引"&gt;引&lt;/h2&gt;
&lt;p&gt;&lt;del&gt;如你所见，现在Blog的主题似乎变得“花哨”了一点（反正我是这么认为）。&lt;/del&gt;(现在改回来了&lt;/p&gt;
&lt;p&gt;不过此Blog也不是纯技术向的，所以花一点好像也没什么大不了。&lt;/p&gt;
&lt;p&gt;而笔者的 树莓派 zero w 又恰好在吃灰中，于是笔者就萌生了在树莓派上搭一个hexo博客引擎的想法。顺便也能作为现在博客的备份，再说next主题看起来也挺简洁的～&lt;/p&gt;
&lt;h2 id="安装依赖"&gt;安装依赖&lt;/h2&gt;
&lt;h3 id="安装nvm"&gt;安装nvm&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.4/install.sh | bash
# 安装全后要重新打开新会话
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装这个NVM有什么好处呢？我觉得最大的好处就是你可以安装多个版本的node到你的系统里。&lt;/p&gt;
&lt;h3 id="安装nodejs"&gt;安装Node.js&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;nvm install node
# 默认安装最新版
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id="如果需要指定版本"&gt;如果需要指定版本&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;nvm install 4.2
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="安装-git"&gt;安装 Git&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;apt install git-core -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看git版本&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git --version
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="安装hexo"&gt;安装hexo&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;npm install hexo-cli -g
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在 hexo 目录下初始化 hexo 博客，也可以是任意你想要的名字&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;hexo init hexo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;进入博客根目录，并且安装相关插件依赖等&lt;/p&gt;</description></item><item><title>handsome主题魔改教程</title><link>https://www.everains.com/p/135/</link><pubDate>Sat, 27 Apr 2019 14:51:00 +0000</pubDate><guid>https://www.everains.com/p/135/</guid><description>&lt;p&gt;&lt;img src="images/IMG_20190427_152411.jpg" alt="demo1"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="images/3629756096.png" alt="demo2"&gt;&lt;/p&gt;
&lt;p&gt;改过了之后感觉界面太杂，于是改回来了～&lt;/p&gt;
&lt;p&gt;这里使用的是&lt;a href="https://moe.best"&gt;神代綺凜&lt;/a&gt;制作的css。&lt;/p&gt;
&lt;p&gt;教程参考&lt;a href="https://www.caixiaojing.com/Tech-Otakus/handsome.html"&gt;handsome主题魔改教程&lt;/a&gt;，笔者对其中css文件进行了更新以及背景图片方面的修改。&lt;/p&gt;
&lt;h2 id="魔改教程"&gt;魔改教程&lt;/h2&gt;
&lt;h3 id="step-1"&gt;Step 1&lt;/h3&gt;
&lt;p&gt;下载css&lt;/p&gt;
&lt;p&gt;[button color=&amp;ldquo;primary&amp;rdquo; icon=&amp;ldquo;glyphicon glyphicon-download-alt&amp;rdquo; url=&amp;ldquo;https://kirain.me/usr/themes/handsome/assets/css/handsome.css&amp;rdquo; type=&amp;quot;&amp;quot;]CSS下载[/button]&lt;/p&gt;
&lt;p&gt;将文件放在 /usr/themes/handsome/assets/css中,文件名为 handsome.css&lt;/p&gt;
&lt;h3 id="step-2"&gt;Step 2&lt;/h3&gt;
&lt;p&gt;打开 /usr/themes/handsome/component/header.php,在&amp;quot;&lt;!-- 本地css静态资源 --&gt;&amp;ldquo;下多加一行&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;link rel=&amp;#34;stylesheet&amp;#34; href=&amp;#34;&amp;lt;?php echo STATIC_PATH; ?&amp;gt;css/handsome.css?v=1.6.1&amp;#34; type=&amp;#34;text/css&amp;#34;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;修改后：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;!-- 本地css静态资源 --&amp;gt;
&amp;lt;link rel=&amp;#34;stylesheet&amp;#34; href=&amp;#34;&amp;lt;?php echo STATIC_PATH; ?&amp;gt;css/handsome.css?v=1.6.1&amp;#34; type=&amp;#34;text/css&amp;#34;&amp;gt;
&amp;lt;link rel=&amp;#34;stylesheet&amp;#34; href=&amp;#34;&amp;lt;?php echo STATIC_PATH; ?&amp;gt;css/function.min.css?v=&amp;lt;?php echo Handsome::$version.Handsome::$versionTag ?&amp;gt;&amp;#34; type=&amp;#34;text/css&amp;#34; /&amp;gt;
&amp;lt;link rel=&amp;#34;stylesheet&amp;#34; href=&amp;#34;&amp;lt;?php echo STATIC_PATH; ?&amp;gt;css/handsome.min.css?v=&amp;lt;?php echo Handsome::$version.Handsome::$versionTag ?&amp;gt;&amp;#34; type=&amp;#34;text/css&amp;#34; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;然后保存。&lt;/p&gt;
&lt;h3 id="step-3"&gt;Step 3&lt;/h3&gt;
&lt;p&gt;打开 /usr/themes/handsome/component/headnav.php,在第一行后加一行 &lt;div id="bg"&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;修改后：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;?php if (!defined(&amp;#39;__TYPECHO_ROOT_DIR__&amp;#39;)) exit; ?&amp;gt;
&amp;lt;div id=&amp;#34;bg&amp;#34;&amp;gt;&amp;lt;/div&amp;gt;
 &amp;lt;header id=&amp;#34;header&amp;#34; class=&amp;#34;app-header navbar&amp;#34; role=&amp;#34;menu&amp;#34;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="大功告成"&gt;大功告成&lt;/h3&gt;
&lt;h2 id="设置魔改背景图片"&gt;设置魔改背景图片&lt;/h2&gt;
&lt;p&gt;编辑/usr/themes/handsome/assets/css/handsome.css&lt;/p&gt;</description></item><item><title>物理学习札记</title><link>https://www.everains.com/p/125/</link><pubDate>Fri, 19 Apr 2019 20:58:00 +0000</pubDate><guid>https://www.everains.com/p/125/</guid><description>&lt;p&gt;最近学动量感觉都学傻了，于是就有了这篇文章。&lt;/p&gt;
&lt;p&gt;省得高三复习还得琢磨半天。。。&lt;/p&gt;
&lt;p&gt;部分文章内容来自知乎问答。&lt;/p&gt;
&lt;p&gt;（也正是因为这些理论性内容复制粘贴容易才发blog里 ::aru:meditation::&lt;/p&gt;
&lt;p&gt;如有困扰，请联系删除。&lt;/p&gt;
&lt;p&gt;持续更新～&lt;/p&gt;
&lt;h2 id="动量"&gt;动量&lt;/h2&gt;
&lt;h3 id="定义"&gt;定义&lt;/h3&gt;
&lt;p&gt;历史上，一种观点认为应该用物理量mv来量度运动的“强弱”，另一种观点认为应该用物理量mv²来量度运动的“强弱”。
主张以mv量度运动的代表人物是笛卡尔，他认为“在物质中存在一定量的运动，它的总和在世界上永远不会增加也不会消失”。这实际上是后来所说的动量守恒定律的雏形。
主张以mv²量度运动的代表人物是莱布尼兹。他认为守恒的应该是∑mv²而不是∑mv。
法国科学家达朗贝尔用他的研究指出，双方实际上是从不同的角度描述了运动的守恒性。
动能1/2mv²决定了物体在力F的阻碍下能够运动多远，而动量mv则决定了物体在力F的阻碍下能够运动多长时间。也就是说，动量定理反映了力对时间的累积效应，动能定理反映了力对空间的累积效应。&lt;/p&gt;
&lt;p&gt;所以，我的理解是动能和动量都是描述运动度量的，只不过在研究不同问题时的角度不同而已。&lt;/p&gt;
&lt;h2 id="粒子"&gt;粒子&lt;/h2&gt;
&lt;h3 id="光量子"&gt;光量子&lt;/h3&gt;
&lt;h4 id="双缝干涉实验"&gt;双缝干涉实验&lt;/h4&gt;
&lt;p&gt;双缝，顾名思义，就是在一块隔板上开两条缝。&lt;/p&gt;
&lt;p&gt;用一个发射光子的机枪对着双缝扫射，从缝中漏过去的光子，打在缝后面的屏上，就会留下一个光斑。（等效于 1961 年电子双缝干涉实验）&lt;/p&gt;
&lt;p&gt;在实验之前，科学家的推测如下：&lt;/p&gt;
&lt;h5 id="第一种可能"&gt;第一种可能&lt;/h5&gt;
&lt;p&gt;如果光子是纯粒子，那么屏幕留下两道杠。&lt;/p&gt;
&lt;p&gt;光子像机枪发射的子弹一样笔直地从缝中穿过，那么屏幕上留下的一定是 2 道杠，因为其他角度的光子都被板挡住了。&lt;/p&gt;
&lt;h5 id="第二种可能"&gt;第二种可能&lt;/h5&gt;
&lt;p&gt;如果光子是纯波，那么屏幕上会留下斑马线般的一道道条纹。&lt;/p&gt;
&lt;p&gt;光子穿过缝时，会形成 2 个波源。两道波各自震荡交汇（干涉），波峰与波峰之间强度叠加，波峰与波谷之间正反抵消，最终屏幕上会出现一道道复杂唯美的斑马线（干涉条纹）。&lt;/p&gt;
&lt;h5 id="第三种可能"&gt;第三种可能&lt;/h5&gt;
&lt;p&gt;如果光子是波粒二象，那么屏幕图案应该是以上两种图形的杂交混合体。&lt;/p&gt;
&lt;p&gt;总之，&lt;/p&gt;
&lt;p&gt;两道杠 = 粒派胜；&lt;/p&gt;
&lt;p&gt;斑马线 = 波派胜；&lt;/p&gt;
&lt;p&gt;四不像 = 平局。&lt;/p&gt;
&lt;p&gt;是波是粒还是二合一，看屏幕结果一目了然，无论实验结果如何，都在我们的预料之中。&lt;/p&gt;
&lt;h5 id="第一次实验-把光子发射机对准双缝发射"&gt;第一次实验 ：把光子发射机对准双缝发射。&lt;/h5&gt;
&lt;p&gt;结果 ：标准的斑马线。&lt;/p&gt;
&lt;p&gt;根据之前的分析，这证明光子是纯波。OK，实验结束，大家回家洗洗睡吧。&lt;/p&gt;
&lt;p&gt;粒派不服：我明明知道光子是一个一个的粒子！&lt;/p&gt;
&lt;p&gt;这样，我们再做一次实验，把光子一个一个地发射出去，看会怎么样，一定会变成两道杠的！&lt;/p&gt;
&lt;h5 id="第二次实验-把光子机枪切换到点射模式保证每次只发射一个光子"&gt;第二次实验 ：把光子机枪切换到点射模式，保证每次只发射一个光子。&lt;/h5&gt;
&lt;p&gt;结果 ：斑马线，竟然还是斑马线，怎么可能？我们明明是一、个、一、个把光子发射出去的啊！&lt;/p&gt;
&lt;p&gt;最令人震惊的是，一开始光子数量较少时，屏幕上的光点看上去一片杂乱无章，随着积少成多，渐渐显出了斑马线条纹！&lt;/p&gt;
&lt;p&gt;光子要真的是波，那粒派也不得不服。&lt;/p&gt;
&lt;p&gt;问题是：根据波动理论，斑马线来源于双缝产生的两个波源之间的干涉叠加；而单个光子要么穿过左缝、要么穿过右缝，穿过一条缝的光子到底是在和谁发生干涉？&lt;/p&gt;
&lt;p&gt;难道……光子在穿过双缝时分裂成了两个？一个光子分裂成左半光子和右半光子，自己的左手和右手发生了关系？事情好像越来越复杂了。干脆一不做二不休，我们倒要看看，光子究竟是怎样穿过缝的。&lt;/p&gt;
&lt;h5 id="第三次实验-在屏幕前加装两个摄像头一边一个左右排开哪边的摄像头看到光子就说明光子穿过了哪条缝同样还是点射模式发射光子"&gt;第三次实验 ：在屏幕前加装两个摄像头，一边一个左右排开。哪边的摄像头看到光子，就说明光子穿过了哪条缝。同样，还是点射模式发射光子。&lt;/h5&gt;
&lt;p&gt;结果：每次不是左边的摄像头看到一个光子，就是右边看到一个。一个就是一个，从来没有发现哪个光子分裂成半个的情况。&lt;/p&gt;
&lt;p&gt;大家都松了一口气。 光子确实是一个个粒子，然而在穿过双缝时，不知怎么就会变形成两道波同时穿过，形成干涉条纹。&lt;/p&gt;
&lt;p&gt;虽然诡异了些，不过据说这就是 波粒二象性 了，具体细节以后再研究吧，这个实验做得人都要精分了。&lt;/p&gt;
&lt;p&gt;然而，就在这时，真正诡异的事情发生了……&lt;/p&gt;</description></item><item><title>在LNMP环境下搭建Typecho博客程序</title><link>https://www.everains.com/p/84/</link><pubDate>Thu, 18 Apr 2019 23:22:00 +0000</pubDate><guid>https://www.everains.com/p/84/</guid><description>&lt;p&gt;Typecho博客程序不说了吧，本博客就是用它搭的。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.moerats.com/archives/896/"&gt;Rat&amp;rsquo;s Blog&lt;/a&gt;也写了一个，不过他的是基于宝塔面板搭建的，而笔者作为一名中度强迫症患者，自然是不大喜欢请一个别的程序来管理自己的服务器。&lt;/p&gt;
&lt;p&gt;于是，从各方面考虑，笔者选择了lnmp一键脚本来搭建web环境。&lt;/p&gt;
&lt;h2 id="一网站环境构建"&gt;一、网站环境构建&lt;/h2&gt;
&lt;h3 id="安装lnmp"&gt;安装lnmp&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://kirain.me/tech/ar85.html"&gt;参考之前的教程&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="添加虚拟主机"&gt;添加虚拟主机&lt;/h3&gt;
&lt;p&gt;输入&lt;/p&gt;
&lt;h1 id="添加虚拟主机-1"&gt;添加虚拟主机&lt;/h1&gt;
&lt;p&gt;lnmp vhost add&lt;/p&gt;
&lt;h1 id="输入域名-kirainme"&gt;输入域名 kirain.me，&lt;/h1&gt;
&lt;p&gt;kirain.me&lt;/p&gt;
&lt;h1 id="设置伪静态规则lnmp一键包已经内置了typecho的支持-所以只需要输入-typecho即可它会自定incloud-typecho的伪静态配置"&gt;设置伪静态规则，lnmp一键包已经内置了typecho的支持 所以只需要输入 typecho即可，它会自定Incloud Typecho的伪静态配置&lt;/h1&gt;
&lt;p&gt;typecho&lt;/p&gt;
&lt;h1 id="创建mysql数据库-这就不说了-按照提示来"&gt;创建mysql数据库 这就不说了 按照提示来&lt;/h1&gt;
&lt;h1 id="然后我们的虚拟主机就配置好了"&gt;然后我们的虚拟主机就配置好了&lt;/h1&gt;
&lt;h2 id="二部署博客程序"&gt;二、部署博客程序&lt;/h2&gt;
&lt;h3 id="下载typecho程序"&gt;下载typecho程序&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://typecho.org"&gt;点击选择下载版本&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="将博客程序上传至网站根目录"&gt;将博客程序上传至网站根目录&lt;/h3&gt;
&lt;h4 id="这个不用我说吧"&gt;这个不用我说吧&lt;/h4&gt;
&lt;p&gt;直接sftp就行。&lt;/p&gt;
&lt;h2 id="三关于nginx的一些配置"&gt;三、关于nginx的一些配置&lt;/h2&gt;
&lt;p&gt;有一点要注意的是，如果用的是国内服务器且未备案的话，直接访问80端口会出现183错误。&lt;/p&gt;
&lt;p&gt;解决方法有三个：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;购买境外服务器
参考教程&lt;a href="https://kirain.me/tech/ar22.html"&gt;购买一个云主机&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;更改nginx监听端口&lt;/li&gt;
&lt;li&gt;备案&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="更改nginx监听端口"&gt;更改nginx监听端口：&lt;/h3&gt;
&lt;p&gt;nano /usr/local/nginx/conf/vhost/kirain.me
将 listen 80 中的 80 改成你想要的端口号&lt;/p&gt;
&lt;h3 id="配置ssl"&gt;配置ssl&lt;/h3&gt;
&lt;p&gt;直接&lt;/p&gt;
&lt;p&gt;vhost ssl add&lt;/p&gt;
&lt;h2 id="四访问网站"&gt;四、访问网站&lt;/h2&gt;
&lt;p&gt;输入 之前你设置的域名&lt;/p&gt;
&lt;p&gt;如果更改了端口号，则输入：&lt;/p&gt;
&lt;p&gt;你的域名:端口号&lt;/p&gt;</description></item><item><title>LNMP日常使用指北</title><link>https://www.everains.com/p/85/</link><pubDate>Fri, 12 Apr 2019 23:52:00 +0000</pubDate><guid>https://www.everains.com/p/85/</guid><description>&lt;h3 id="lnmp是什么"&gt;LNMP是什么？&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;LNMP是一个用Linux Shell编写的可以为CentOS/RHEL/Fedora/Aliyun/Amazon、Debian/Ubuntu/Raspbian/Deepin/Mint Linux VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQL/PHP/Apache)、LAMP(Apache/MySQL/PHP)生产环境的Shell程序。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;通俗来说，lnmp就是一个脚本。&lt;/p&gt;
&lt;p&gt;无需一个一个的输入命令，无需值守，编译安装优化编译参数，提高性能，解决不必要的软件间依赖，特别针对配置自动优化。&lt;/p&gt;
&lt;p&gt;通过这个脚本，我们可以快速配置LNMP（nginx，mysql，php）环境，达到快速建站的效果。&lt;/p&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;h3 id="通过无人值守脚本一键安装"&gt;通过无人值守脚本一键安装&lt;/h3&gt;
&lt;h4 id="注意"&gt;注意：&lt;/h4&gt;
&lt;p&gt;安装MySQL 5.6或5.7及MariaDB 10必须1G以上内存，更高版本至少要2G内存!
安装PHP 7及以上版本必须1G以上内存!&lt;/p&gt;
&lt;p&gt;确认以后，输入指令：&lt;/p&gt;
&lt;p&gt;wget &lt;a href="http://soft.vpser.net/lnmp/lnmp1.5.tar.gz"&gt;http://soft.vpser.net/lnmp/lnmp1.5.tar.gz&lt;/a&gt; -cO lnmp1.5.tar.gz &amp;amp;&amp;amp; tar zxf lnmp1.5.tar.gz &amp;amp;&amp;amp; cd lnmp1.5 &amp;amp;&amp;amp; ./install.sh lnmp
运行上述LNMP安装命令后，会出现提示需要安装的自定义配置，按需选择即可。具体可以查看&lt;a href="https://lnmp.org/install.html"&gt;lnmp一键安装&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;安装过程大概40min，建议使用screen使安装进程在后台运行。&lt;/p&gt;
&lt;h2 id="lnmp常用命令"&gt;lnmp常用命令&lt;/h2&gt;
&lt;p&gt;终于到本文的主体部分了，下面汇总了笔者使用lnmp时的常用命令。&lt;/p&gt;
&lt;h3 id="网站搭建"&gt;网站搭建&lt;/h3&gt;
&lt;p&gt;一般使用&lt;/p&gt;
&lt;p&gt;lnmp vhost add
在之后的界面中会让你输入网站域名，php伪静态，以及是否启用ssl。&lt;/p&gt;
&lt;h3 id="权限配置"&gt;权限配置&lt;/h3&gt;
&lt;p&gt;chown www /home/wwwroot/yoursite
chmod 755 /home/wwwroot/yoursite
可以解决大部分的权限问题。&lt;/p&gt;
&lt;h3 id="删除网站文件夹"&gt;删除网站文件夹&lt;/h3&gt;
&lt;p&gt;当想要删除网站文件夹时，会出现这个错误：&lt;/p&gt;
&lt;p&gt;rm: cannot remove &amp;lsquo;kirain.me/.user.ini&amp;rsquo;: Operation not permitted&lt;/p&gt;
&lt;h4 id="解决办法"&gt;解决办法：&lt;/h4&gt;
&lt;p&gt;chattr -i /home/wwwroot/siteroot/.user.ini&lt;/p&gt;
&lt;h4 id="原因"&gt;原因：&lt;/h4&gt;
&lt;p&gt;有时可能会用chattr命令锁定该文件, 导致root不能修改文件。通过chattr命令修改属性能够提高系统的安全性，但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。&lt;/p&gt;
&lt;p&gt;有些粗略，遇到再补～&lt;/p&gt;</description></item><item><title>【Personal Server】购买一个云主机</title><link>https://www.everains.com/p/22/</link><pubDate>Sun, 31 Mar 2019 13:30:00 +0000</pubDate><guid>https://www.everains.com/p/22/</guid><description>&lt;p&gt;玩站到现在有差不多半年了吧，有些浅见。大佬
轻喷～&lt;/p&gt;
&lt;p&gt;首先要入门，那买一个服务器是势在必行的了。博主最早接触这个是在2018年的8月份，买了一个树莓派zero w，算是第一台服务器了。&lt;/p&gt;
&lt;p&gt;期间在上面搭了一个jekyll博客，（本站建站前的那些博客就是在那上面写的。）曾经还用nukkitx搭建了mcpe的服务器，但大家也知道zero w ram才512mb，遂未果&amp;hellip;&amp;hellip;目前吃灰中。&lt;/p&gt;
&lt;p&gt;一直用到2019年一月份，在基安老哥的推荐下了解了阿里云的学生机优惠，一个月9.5，一核，2G Ram，40G SSD,1T流量。倒是很实惠，但是国内开80口得要备案啊。&lt;/p&gt;
&lt;p&gt;不然的话我kirain.me这么好个域名要是加个端口号岂不是很low (=_=)&lt;/p&gt;
&lt;p&gt;而国内是出名的建站五分钟，备案五星期。又是得寄绿幕拍照&amp;hellip;等这一套弄完我都该上大学了好伐。&lt;/p&gt;
&lt;p&gt;遂pass～&lt;/p&gt;
&lt;h4 id="重点来了"&gt;重点来了&lt;/h4&gt;
&lt;p&gt;那么如何“多快好省”的搭建一个个人服务器呢？&lt;/p&gt;
&lt;p&gt;这就是我今天的教程：&lt;/p&gt;
&lt;h3 id="一购买bandwagon服务器"&gt;一、购买bandwagon服务器&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://bandwagonhost.com/aff.php?aff=45694"&gt;https://bandwagonhost.com/aff.php?aff=45694&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;点击上面的链接进入购买页。（得用电脑浏览器进入）&lt;/p&gt;
&lt;p&gt;购买时需要挂上科学上网，不然进不去。&lt;/p&gt;
&lt;p&gt;映入眼帘的就是下面的页面。我们可以看到套餐详情。我们需要选择一下配置，这里我选择的是49.9$/年 这款的。然后进入下一步。&lt;/p&gt;
&lt;p&gt;重复选择。。。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/006uEVWXly1g1lxhq0zwsj30ws09wjuh.jpg" alt="选购"&gt;&lt;/p&gt;
&lt;p&gt;继续。。。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/006uEVWXly1g1lxjhg6jyj30pw0d1dk0.jpg" alt="接着选择"&gt;&lt;/p&gt;
&lt;p&gt;我们可以看到套餐详情。然后我们需要选择一下付款周期，可以选择月付、季付、半年付或者年付。年付比较便宜，会比月付便宜不少。当然也可以先月付，然后用的爽，再在后台修改续费周期为年付，看各人选择。这里我选择年付。然后添加到购物车，进入下一步。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/006uEVWXly1g1lxm9ygamj30qf0fjmzd.jpg" alt="确认订单"&gt;&lt;/p&gt;
&lt;p&gt;然后是第二次确认。&lt;/p&gt;
&lt;p&gt;这里可以输入优惠码&lt;/p&gt;
&lt;p&gt;优惠码：BWH26FXH3HIQ&lt;/p&gt;
&lt;p&gt;优惠码能拿到 6.25% 的优惠。&lt;/p&gt;
&lt;p&gt;输入完优惠码后，点击“Validate Code”，验证优惠码。没问题的话，进入结算页面。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/006uEVWXly1g1lxr45f1yj30o00bwgn8.jpg" alt="第二次确认以及输入优惠码"&gt;&lt;/p&gt;
&lt;p&gt;首先可以确认一下金额，没有问题的话就开始填表了。我相信大多数人这种表格都是Chrome记好的模板，直接填进去即可。具体怎么填下面都写上了。&lt;/p&gt;
&lt;h5 id="注意事项"&gt;注意事项：&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;国家必须选择中国，省市可以随意一点；&lt;/li&gt;
&lt;li&gt;邮箱地址必须正确，邮箱就是之后的登陆名（服务器ip和root密码也会通过邮箱发送）；&lt;/li&gt;
&lt;li&gt;密码设置的强一点，尽量大小写、数字、特殊符号都用上；&lt;/li&gt;
&lt;li&gt;支付方式选择 Alipay，也就是支付宝，如果想用其他支付方式，自行选择；&lt;/li&gt;
&lt;li&gt;条款前面的勾必须勾上。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;没什么问题，就可以提交订单了。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/006uEVWXly1g1lxteddo5j30o40fkwg9.jpg" alt="填写基本信息"&gt;&lt;/p&gt;
&lt;p&gt;提交订单之后会自动跳转支付宝的付款页面，只需扫码付款即可。&lt;/p&gt;
&lt;h5 id="之后服务器的ip和root密码会发到注册时的邮箱"&gt;之后服务器的ip和root密码会发到注册时的邮箱。&lt;/h5&gt;
&lt;h3 id="二连接购买的服务器"&gt;二、连接购买的服务器&lt;/h3&gt;
&lt;p&gt;服务器已经购买，那么应该如何连接呢？&lt;/p&gt;
&lt;p&gt;这里首推Xshell,能申请免费的个人版。&lt;/p&gt;
&lt;p&gt;具体教程之后再写。&lt;/p&gt;
&lt;p&gt;有需要的可以在下方留言&lt;/p&gt;
&lt;p&gt;如果您觉得这篇教程对您有帮助，欢迎戳赞赏按钮，请博主喝杯咖啡～&lt;/p&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.bandwagonhost.net/716.html"&gt;2019 最新搬瓦工购买教程 &amp;amp; 支付宝支付教程&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Blog已被授权使用handsome主题</title><link>https://www.everains.com/p/46/</link><pubDate>Sat, 30 Mar 2019 21:32:00 +0000</pubDate><guid>https://www.everains.com/p/46/</guid><description>&lt;p&gt;淘汰了之前的jekyll，换上了typecho。&lt;/p&gt;
&lt;p&gt;就是为了使用handsome主题 ::aru:shy::&lt;/p&gt;
&lt;p&gt;最早是在&lt;a href="https://www.moerats.com/"&gt;Rat&amp;rsquo;s Blog&lt;/a&gt;上看到的这个主题，真的是精致，而又美妙。&lt;/p&gt;
&lt;p&gt;借用&lt;a href="https://blog.liusy.tk/"&gt;SY_Liu&lt;/a&gt;的一句话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这可能是我见过的个人博客主题里最优秀的一款。当用上这个主题时，你会感受到它的细节和用心。而且买断的机制说实话便宜的像白嫖一样。 ::aru:thumb::&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;官方购买地址：&lt;a href="https://www.ihewro.com/archives/489/"&gt;handsome —— 一如少年般模样&lt;/a&gt;&lt;/p&gt;</description></item><item><title>搭建Nextcloud私有云盘</title><link>https://www.everains.com/p/8/</link><pubDate>Mon, 11 Mar 2019 11:36:00 +0000</pubDate><guid>https://www.everains.com/p/8/</guid><description>&lt;p&gt;搭建个人云存储一般会想到ownCloud，堪称是自建云存储服务的经典。而Nextcloud是ownCloud原开发团队打造的号称是“下一代”存储。初一看觉得“口气”不小，刚推出来就重新“定义”了Cloud，真正试用过后就由衷地赞同这个Nextcloud：它是个人云存储服务的绝佳选择。&lt;/p&gt;
&lt;p&gt;与ownCloud相比，Nextcloud的功能丝毫没有减弱，甚至由于可以安装云存储服务应用，自制性更强，也更符合用户的需求。Nextcloud官网的帮助文档写得相当地详细，几乎任何关于Nextcloud的问题都可以找到答案，这说明Nextcloud开发团队确实比ownCloud更加优秀。&lt;/p&gt;
&lt;p&gt;一开始以为Nextcloud只是一个网盘云存储，后来看到Nextcloud内置了Office文档、图片相册、日历联系人、两步验证、文件管理、RSS阅读等丰富的应用，我发现Nextcloud已经仅仅可以用作个人或者团队存储与共享，还可以打造成为一个个人办公平台，几乎相当于一个个人的Dropbox了。&lt;/p&gt;
&lt;p&gt;Nextcloud运行环境与平常我们常用的程序差不多，LAMP是官方首选，不过LNMP也照样可以运行，只不过需要自己写URL重写规则。当然，官方还提供了SNAP一键安装包，一分钟内就可以在VPS上部署好Nextcloud，非常地方便。本篇文章就来分享SNAP安装Nextcloud的方法。&lt;/p&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;h3 id="一一键安装nextcloud"&gt;一、一键安装Nextcloud&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;sudo&lt;/span&gt; &lt;span style="color:#f92672"&gt;apt-get&lt;/span&gt; &lt;span style="color:#f92672"&gt;update&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;sudo&lt;/span&gt; &lt;span style="color:#f92672"&gt;apt&lt;/span&gt; &lt;span style="color:#f92672"&gt;install&lt;/span&gt; &lt;span style="color:#f92672"&gt;snapd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;sudo&lt;/span&gt; &lt;span style="color:#f92672"&gt;snap&lt;/span&gt; &lt;span style="color:#f92672"&gt;install&lt;/span&gt; &lt;span style="color:#f92672"&gt;nextcloud&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接着，打开你的域名或者IP地址，然后会让你设置好管理员账号与密码，确定，完成安装。&lt;/p&gt;
&lt;p&gt;其中snap的用法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;#&lt;/span&gt; &lt;span style="color:#f92672"&gt;检察snap版本信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;snap&lt;/span&gt; &lt;span style="color:#f92672"&gt;--version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;#&lt;/span&gt; &lt;span style="color:#f92672"&gt;找出一切snap使用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;snap&lt;/span&gt; &lt;span style="color:#f92672"&gt;find&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;#&lt;/span&gt; &lt;span style="color:#f92672"&gt;安装使用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;snap&lt;/span&gt; &lt;span style="color:#f92672"&gt;install&lt;/span&gt; &lt;span style="color:#f92672"&gt;包名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;#&lt;/span&gt; &lt;span style="color:#f92672"&gt;重启使用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;snap&lt;/span&gt; &lt;span style="color:#f92672"&gt;restart&lt;/span&gt; &lt;span style="color:#f92672"&gt;使用名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;#&lt;/span&gt; &lt;span style="color:#f92672"&gt;晋级使用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;snap&lt;/span&gt; &lt;span style="color:#f92672"&gt;refresh&lt;/span&gt; &lt;span style="color:#f92672"&gt;使用名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;#&lt;/span&gt; &lt;span style="color:#f92672"&gt;检察安装的使用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;snap&lt;/span&gt; &lt;span style="color:#f92672"&gt;list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;#&lt;/span&gt; &lt;span style="color:#f92672"&gt;卸载使用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;snap&lt;/span&gt; &lt;span style="color:#f92672"&gt;remove&lt;/span&gt; &lt;span style="color:#f92672"&gt;使用名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="配置"&gt;配置&lt;/h2&gt;
&lt;h3 id="二nextcloud添加应用"&gt;二、Nextcloud添加应用&lt;/h3&gt;
&lt;p&gt;Nextcloud官方提供了非常多的应用：https://apps.nextcloud.com/，Office文档、图片相册、日历联系人、两步验证、文件管理、RSS阅读等丰富的应用。这些应用你可以手动下载安装，也可以直接在Nextcloud后台一键激活。&lt;/p&gt;
&lt;p&gt;其中，手动下载的应用解压后放在/var/snap/nextcloud/common/apps下&lt;/p&gt;
&lt;h3 id="三nextcloud安装ssl证书"&gt;三、Nextcloud安装SSL证书&lt;/h3&gt;
&lt;p&gt;如果你使用Snap安装的Nextcloud，那么添加SSL加密访问将是一件非常简单的事情。先确保你的域名已经成功解析到你的VPS主机上，然后执行命令：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;sudo&lt;/span&gt; &lt;span style="color:#f92672"&gt;nextcloud&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;enable-https&lt;/span&gt; &lt;span style="color:#f92672"&gt;lets-encrypt&lt;/span&gt; #安装Let&lt;span style="color:#960050;background-color:#1e0010"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;s&lt;/span&gt; &lt;span style="color:#f92672"&gt;Encrypt&lt;/span&gt; &lt;span style="color:#f92672"&gt;SSL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#如果你想使用自己的证书&lt;span style="color:#960050;background-color:#1e0010"&gt;，&lt;/span&gt;&lt;span style="color:#f92672"&gt;请执行&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;sudo&lt;/span&gt; &lt;span style="color:#f92672"&gt;nextcloud&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;enable-https&lt;/span&gt; &lt;span style="color:#f92672"&gt;self-signed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;###&lt;/span&gt;#如果提示 &lt;span style="color:#f92672"&gt;command&lt;/span&gt; &lt;span style="color:#f92672"&gt;not&lt;/span&gt; &lt;span style="color:#f92672"&gt;found&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;，&lt;/span&gt;&lt;span style="color:#f92672"&gt;请加上路径&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;sudo&lt;/span&gt; &lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;snap&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;bin&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;nextcloud&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;enable-https&lt;/span&gt; &lt;span style="color:#f92672"&gt;lets-encrypt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;sudo&lt;/span&gt; &lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;snap&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;bin&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;nextcloud&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;enable-https&lt;/span&gt; &lt;span style="color:#f92672"&gt;self-signed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果你是使用自已的证书，请在执行命令后找到SSL证书的路径，将自己的证书上传替换生成的自签名证书文件即可。&lt;/p&gt;
&lt;h3 id="四更换nextcloud服务端口"&gt;四、更换nextcloud服务端口&lt;/h3&gt;
&lt;p&gt;因为国内的80端口是默认被封的，访问必须要输入ip地址才行，而且如果服务器运行了nginx会有冲突的情况。&lt;/p&gt;
&lt;p&gt;所以可以通过下面这条命令更改nextcloud默认端口：&lt;/p&gt;
&lt;p&gt;sudo snap set nextcloud ports.http=81&lt;/p&gt;
&lt;h1 id="这一条命令是将http端口设为81也可以将http改成https来修改使用https的默认端口"&gt;这一条命令是将http端口设为81，也可以将http改成https来修改使用https的默认端口。&lt;/h1&gt;
&lt;h3 id="五nextcloud备份与恢复"&gt;五、Nextcloud备份与恢复&lt;/h3&gt;
&lt;p&gt;备份MysqL数据库。使用Snap安装的Nextcloud，数据库文件在以下路径中，你直接将Nextcloud这个数据库全部备份即可。&lt;/p&gt;
&lt;p&gt;备份文件。Nextcloud上传的文件存储在/var/snap/nextcloud/common/data路径中，将里面的Data文件全部备份即可。&lt;/p&gt;
&lt;p&gt;Nextcloud恢复。重装安装了Nextcloud后，将上面的数据库文件与文件数据全部导入到新的服务器，保持原来的路径即可。&lt;/p&gt;
&lt;h3 id="六总结"&gt;六、总结&lt;/h3&gt;
&lt;p&gt;Nextcloud采用Snap的安装方法简单方便，适合不想折腾的朋友，并且官方打包的Nextcloud Snap自动部署好了LAMP，如果你想迁移服务器，只需要将新的服务器按照同样的方法安装Nextcloud，然后导入之前的数据库与存储文件即可。&lt;/p&gt;
&lt;p&gt;Nextcloud如果用来存储一些私人的照片或者文件的话，最让人担心的恐怕是安全问题了。目前来看，Nextcloud本身的安全措施已经做得非常到位，例如账号两步验证、程序与存储文件分开、数据加密等。可能唯一需要我们自己做的就是保证服务器不要出现漏洞。&lt;/p&gt;</description></item><item><title>搭建jekyll博客程序</title><link>https://www.everains.com/p/7/</link><pubDate>Sat, 09 Mar 2019 11:33:00 +0000</pubDate><guid>https://www.everains.com/p/7/</guid><description>&lt;h2 id="搭建jekyll博客程序"&gt;搭建jekyll博客程序&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ruby弄了好久&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;现在用的是Typecho，感觉比jekyll这种静态博客好了不是一星半点。&lt;/p&gt;
&lt;h4 id="1安装前先导入公钥"&gt;1.安装前先导入公钥&lt;/h4&gt;
&lt;p&gt;curl -sSL &lt;a href="https://rvm.io/mpapis.asc"&gt;https://rvm.io/mpapis.asc&lt;/a&gt; | gpg &amp;ndash;import -
curl -sSL &lt;a href="https://rvm.io/pkuczynski.asc"&gt;https://rvm.io/pkuczynski.asc&lt;/a&gt; | gpg &amp;ndash;import -&lt;/p&gt;
&lt;h4 id="2输入下面的命令来请求安装"&gt;2.输入下面的命令来请求安装&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;curl&lt;/span&gt; &lt;span style="color:#f92672"&gt;-sSL&lt;/span&gt; &lt;span style="color:#f92672"&gt;https&lt;/span&gt;&lt;span style="color:#f92672"&gt;://&lt;/span&gt;&lt;span style="color:#f92672"&gt;get&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;rvm&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;io&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#f92672"&gt;bash&lt;/span&gt; &lt;span style="color:#f92672"&gt;-s&lt;/span&gt; &lt;span style="color:#f92672"&gt;stable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="3重新打开终端窗口"&gt;3.重新打开终端窗口&lt;/h4&gt;
&lt;h4 id="4输入以下命令如果有结果说明安装成功"&gt;4.输入以下命令，如果有结果，说明安装成功&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;rvm&lt;/span&gt; &lt;span style="color:#f92672"&gt;-v&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;列出已知的 Ruby 版本&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;rvmlist&lt;/span&gt; &lt;span style="color:#f92672"&gt;known&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装&lt;/p&gt;
&lt;h4 id="安装ruby时千万不要用screen安装后会找不到路径"&gt;安装ruby时千万不要用screen，安装后会找不到路径！！！&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;rvm&lt;/span&gt; &lt;span style="color:#f92672"&gt;install&lt;/span&gt; &lt;span style="color:#f92672"&gt;2&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;6&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;gem&lt;/span&gt; &lt;span style="color:#f92672"&gt;install&lt;/span&gt; &lt;span style="color:#f92672"&gt;jekyll&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装成功！&lt;/p&gt;
&lt;p&gt;在github上找一个不错的模板clone到本地。&lt;/p&gt;
&lt;p&gt;进入文件夹后使用:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;jekyll&lt;/span&gt; &lt;span style="color:#f92672"&gt;serve&lt;/span&gt; &lt;span style="color:#f92672"&gt;-H&lt;/span&gt; &lt;span style="color:#f92672"&gt;内网ip&lt;/span&gt; &lt;span style="color:#f92672"&gt;-P&lt;/span&gt; &lt;span style="color:#f92672"&gt;端口&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;来启动&lt;/p&gt;
&lt;p&gt;装插件的话请根据config.yml中“gems：”内容。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;gem&lt;/span&gt; &lt;span style="color:#f92672"&gt;install&lt;/span&gt; &lt;span style="color:#f92672"&gt;插件名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其实主要还是装ruby T_T&lt;/p&gt;
&lt;p&gt;如果要删除rvm&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rvm implode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.csdn.net/ZCMUCZX/article/details/82148178"&gt;https://blog.csdn.net/ZCMUCZX/article/details/82148178&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.cnblogs.com/gyhkevin/p/5172084.html"&gt;https://www.cnblogs.com/gyhkevin/p/5172084.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>使用docker快速搭建ISSO评论系统</title><link>https://www.everains.com/p/6/</link><pubDate>Mon, 11 Feb 2019 11:31:00 +0000</pubDate><guid>https://www.everains.com/p/6/</guid><description>&lt;h2 id="搭建isso评论系统"&gt;搭建ISSO评论系统&lt;/h2&gt;
&lt;h3 id="1安装isso服务端"&gt;1.安装ISSO服务端&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;这里我用的是docker的方式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;参考了&lt;a href="https://www.jianshu.com/p/0bca03b43157"&gt;【多说下线怎么办】一步搭建自己的第三方评论系统&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="安装docker和docker-compose"&gt;安装Docker和docker-compose&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;安装Docker&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;sudo&lt;/span&gt; &lt;span style="color:#f92672"&gt;apt-get&lt;/span&gt; &lt;span style="color:#f92672"&gt;install&lt;/span&gt; &lt;span style="color:#f92672"&gt;docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;安装docker-compose&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我的环境是&lt;/p&gt;
&lt;p&gt;linux-ubuntu:python2:pip&lt;/p&gt;
&lt;p&gt;所以我的安装&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;pip&lt;/span&gt; &lt;span style="color:#f92672"&gt;install&lt;/span&gt; &lt;span style="color:#f92672"&gt;docker-compose&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如此简单&lt;/p&gt;
&lt;h4 id="开始吧"&gt;开始吧&lt;/h4&gt;
&lt;p&gt;首先新建一个文件夹 ISSO&lt;/p&gt;
&lt;p&gt;在文件夹内再新建文件夹 config，在里面新建一个配置文件isso.conf：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#f92672"&gt;general&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;dbpath&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;db&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;comments&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;db&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;host&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;https&lt;/span&gt;&lt;span style="color:#f92672"&gt;://&lt;/span&gt;&lt;span style="color:#f92672"&gt;zuolan&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;me&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#f92672"&gt;server&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;listen&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;http&lt;/span&gt;&lt;span style="color:#f92672"&gt;://&lt;/span&gt;&lt;span style="color:#f92672"&gt;0&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;0&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;0&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;0&lt;/span&gt;:&lt;span style="color:#a6e22e"&gt;8080&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在ISSO文件夹下建立一个Compose配置文件：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;version&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;2&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;services&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;isso&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#f92672"&gt;wonderfall&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;isso&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;environment&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#f92672"&gt;GID&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#f92672"&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#f92672"&gt;UID&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#f92672"&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;volumes&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#f92672"&gt;./&lt;/span&gt;&lt;span style="color:#f92672"&gt;config&lt;/span&gt;&lt;span style="color:#f92672"&gt;:/&lt;/span&gt;&lt;span style="color:#f92672"&gt;config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#f92672"&gt;./&lt;/span&gt;&lt;span style="color:#f92672"&gt;db&lt;/span&gt;&lt;span style="color:#f92672"&gt;:/&lt;/span&gt;&lt;span style="color:#f92672"&gt;db&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ports&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;8080:8080&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;保存为docker-compose.yml然后执行：&lt;/p&gt;
&lt;p&gt;启动后目录应该是这样的：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;├──&lt;/span&gt; &lt;span style="color:#f92672"&gt;config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;└──&lt;/span&gt; &lt;span style="color:#f92672"&gt;isso&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;conf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;├──&lt;/span&gt; &lt;span style="color:#f92672"&gt;db&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;│&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;└──&lt;/span&gt; &lt;span style="color:#f92672"&gt;comments&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;db&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;└──&lt;/span&gt; &lt;span style="color:#f92672"&gt;docker-compose&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;2&lt;/span&gt; &lt;span style="color:#f92672"&gt;directories&lt;/span&gt;&lt;span style="color:#f92672"&gt;,&lt;/span&gt; &lt;span style="color:#f92672"&gt;3&lt;/span&gt; &lt;span style="color:#f92672"&gt;files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;启动后是直接运行，当然你可以用下面的命令管理&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;docker-compose&lt;/span&gt; &lt;span style="color:#f92672"&gt;start&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;stop&lt;/span&gt; &lt;span style="color:#f92672"&gt;isso&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;那么。。。。。。&lt;/p&gt;
&lt;p&gt;怎么确定是否已经运行了呢？&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;curl&lt;/span&gt; &lt;span style="color:#f92672"&gt;www&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;wallfacer&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;tk&lt;/span&gt;:&lt;span style="color:#a6e22e"&gt;8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果出现：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;title&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;400&lt;/span&gt; &lt;span style="color:#f92672"&gt;Bad&lt;/span&gt; &lt;span style="color:#f92672"&gt;Request&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;title&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;h1&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;Bad&lt;/span&gt; &lt;span style="color:#f92672"&gt;Request&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;h1&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;missing&lt;/span&gt; &lt;span style="color:#f92672"&gt;uri&lt;/span&gt; &lt;span style="color:#f92672"&gt;query&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;那就成功啦 ^_^&lt;/p&gt;
&lt;p&gt;但如果出现502错误&lt;/p&gt;
&lt;p&gt;那就没有成功&lt;/p&gt;
&lt;h3 id="2设置"&gt;2.设置&lt;/h3&gt;
&lt;p&gt;Isso服务已经运行了，当然直接访问8080端口是没有什么界面的，只有一个API接口。接下来我们要在静态博客中集成这个评论系统。&lt;/p&gt;
&lt;h4 id="如果你使用的主题是纯html那么嵌入下面两句即可"&gt;如果你使用的主题是纯HTML，那么嵌入下面两句即可：&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;script&lt;/span&gt; &lt;span style="color:#f92672"&gt;data-isso&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;//comments.example.tld/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;src&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;//comments.example.tld/js/embed.min.js&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;script&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;section&lt;/span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;isso-thread&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;section&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;```&lt;/span&gt;&lt;span style="color:#f92672"&gt;css&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;####&lt;/span&gt; &lt;span style="color:#f92672"&gt;如果你使用jekyll&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;比较好的做法是&lt;/span&gt; &lt;span style="color:#f92672"&gt;includes&lt;/span&gt; &lt;span style="color:#f92672"&gt;目录下在建立&lt;/span&gt; &lt;span style="color:#f92672"&gt;comments&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;html&lt;/span&gt; &lt;span style="color:#f92672"&gt;文件用来&lt;/span&gt; &lt;span style="color:#f92672"&gt;存放评论框代码&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;```&lt;/span&gt;&lt;span style="color:#f92672"&gt;css&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;link&lt;/span&gt; &lt;span style="color:#f92672"&gt;rel&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;href&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;{{ site.baseurl }}/assets/comments.css&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;script&lt;/span&gt; &lt;span style="color:#f92672"&gt;data-isso&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;http://www.wallfacer.tk:8080/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;src&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;http://www.wallfacer.tk:8080/js/embed.min.js&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;script&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;section&lt;/span&gt; &lt;span style="color:#f92672"&gt;id&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;isso-thread&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;data-title&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;{{ page.title }}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;data-isso-id&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;{{ page.id }}&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;section&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中 data-isso-id 和 data-title 用来指定文章的唯一标识符和标题。 为每个文章指定标识符便于以后的各种迁移。 {{ page.id }} 和 {{ page.title }} 是 Jekyll 提供的模板，用于获取本页面的 ID 和标题。 title 和 id 可以在文件的 yaml 头中设置，但 Jekyll 会为 _posts 中的文章自动生成 ID， 对于 _post/2017-06-10-switch-from-duoshuo-to-isso.md， 其 ID 是 /2017/06/10/switch-from-duoshuo-to-isso。&lt;/p&gt;</description></item><item><title>中舟·阿房</title><link>https://www.everains.com/p/4/</link><pubDate>Sun, 20 Jan 2019 11:23:00 +0000</pubDate><guid>https://www.everains.com/p/4/</guid><description>&lt;h3 id="序"&gt;序&lt;/h3&gt;
&lt;h2 id="heading"&gt;　　
　　公元前 x 年的洛阳，正下着雪。
　　
　　建章宫内，始皇坐在殿上，四周火炉带来的温暖却难掩他体内的寒冷。
　　
　　始皇病了，病得很重。三十五年积累的忧劳一下子击垮他。
　　
　　始皇能预想到，随着他病重的消息走漏。躁动的情绪，复国的渴望，他的帝国又将如一盆沸水。
　　
　　但是，这一切都不重要了。
　　
　　如同拉风箱似的，始皇喘了几口气，他想咳，却咳不出来。
　　
　　只能勉强挤出几个字“起驾，去阿房宫”
　　
　　阿房宫，那座钢铁巨兽。
　　&lt;/h2&gt;
&lt;p&gt;　　&lt;/p&gt;
&lt;h3 id="初"&gt;初&lt;/h3&gt;
&lt;p&gt;　　“天&amp;hellip;&amp;hellip;怎么黑了？”白夫忧心忡忡地望着突然变得阴沉的天空，就在刚才，他家的那把传了几代的青铜锄头断成了碎片。
　　
　　没错，就像前几天他孩子摔碎的瓦罐一样，那整个锄头在湿润的泥土上分散为几个碎块。
　　
　　那可是青铜啊，谁见过青铜碎成块块的，更何况还只是摔在了被春雨湿润过的柔软的泥土上。
　　
　　白夫已经没空去关心天变黑的原因了，或许是日食？这种事也不是没出现过。他关心的是他该用什么耕地，那把已成为碎块的锄头是他家唯一的一把。若是误了春耕的时节，到时候他们这一家四口就没饭吃了。&lt;/p&gt;</description></item><item><title>中舟</title><link>https://www.everains.com/p/5/</link><pubDate>Sat, 22 Dec 2018 11:28:00 +0000</pubDate><guid>https://www.everains.com/p/5/</guid><description>&lt;p&gt;（距银河系中心800000光年。）&lt;/p&gt;
&lt;p&gt;舷窗外是冰冷的太空。&lt;/p&gt;
&lt;p&gt;宇宙的背景之下，除了星辉，还有的就是远处护卫舰上红绿信号灯的闪烁。&lt;/p&gt;
&lt;p&gt;舱室之内，萧洛摘下了黑色制服上的肩章，将其小心翼翼的放在了一个小盒子里，之后塞进了一个银白色的金属保险柜，虽然这枚肩章已没有什么意义：随着中舟文明第二旋臂舰队的覆没，这枚元帅的象征也失去了往日的光辉。&lt;/p&gt;
&lt;p&gt;叹息一声，萧洛向着舱室门口走去，靴子敲击在金属制的地面上，发出了沉闷的响声。&lt;/p&gt;
&lt;p&gt;来到门前，舱门无声地向两边滑开。&lt;/p&gt;
&lt;p&gt;＂听说被俘虏的族人们都被虫族当成肉猪养着呢。＂一个声音飘了进来。&lt;/p&gt;
&lt;p&gt;＂我们对于他们来说，很好吃？啊，元帅阁下……萧楚领袖万岁！＂最后那个说话的人显然看到了刚从舱室内出来的萧洛，有些诚惶诚恐地说道。&lt;/p&gt;
&lt;p&gt;毕竟，战前传播消极言论，放在过去是要关十天禁闭的。当然，现在中舟文明都快亡了，哪还在乎得了这些。&lt;/p&gt;
&lt;p&gt;萧洛冲着他们点了点头，待到他们走过去了之后，萧洛穿过悠长的金属通道，向着通道的尽头走去。&lt;/p&gt;
&lt;p&gt;就在萧洛刚来到这通道尽头的一扇圆形的白色舱门前的时候，通道内原本柔和的白光变得猩红而昏暗，与此同时，萧洛身旁的舱壁浮现出了一行字：&lt;/p&gt;
&lt;p&gt;＂舰队侧前方发现异常空间波动，请战斗人员立刻进入作战岗位！＂&lt;/p&gt;
&lt;p&gt;＂该来的总是要来的，进来吧。＂不知何时，那道原本紧闭的白色舱门已经打开，从里面传来一道略显疲惫的声音。&lt;/p&gt;
&lt;p&gt;较比通道内的灯光，舱室内的光线显得更微弱些……或者说，几近漆黑，仔细看去，舱壁上显露出的那些似有形状的斑点赫然是一座座星系。&lt;/p&gt;
&lt;p&gt;舱门在萧洛的身后合拢，那道疲惫的声音传来：＂你来了。＂说罢，星辰一点点隐去，舱壁的颜色变成银白。&lt;/p&gt;
&lt;p&gt;萧洛静静地看着这座庞大的球型舱的底部坐着的中年男子，笔挺的深黑色无军衔制服穿在他的身上却显得有些邋遢，他，就是中舟文明的领袖，他的父亲-萧楚。&lt;/p&gt;
&lt;p&gt;“时候快到了。”就在大厅内气氛即将陷入死寂的时候，萧楚忽然说。&lt;/p&gt;
&lt;p&gt;“您不走吗？”萧洛问道，言语中多出了几分悲伤。&lt;/p&gt;
&lt;p&gt;“不走了，中舟就是我的船，船在人在嘛。”&lt;/p&gt;
&lt;p&gt;“呐，再见。”&lt;/p&gt;
&lt;p&gt;“永别。”&lt;/p&gt;
&lt;p&gt;说完，萧洛头也不回的就向着出口走去，毕竟，虽然是父子诀别，婆婆妈妈的也不好嘛。&lt;/p&gt;
&lt;p&gt;“做事之前要多想。”就在萧洛即将走出舱室时，萧楚在他的背后突然说道。&lt;/p&gt;
&lt;p&gt;“会的。”萧洛没有回头，迈步穿过了出口。&lt;/p&gt;
&lt;p&gt;走廊里的灯光有些刺眼，让萧洛微眯了一会眼睛。&lt;/p&gt;
&lt;p&gt;萧洛的皮靴敲击在银白色的金属地板上发出了沉闷的回音，“就像旗舰的心跳。”不知道为什么，萧洛心里冒出了这个想法。&lt;/p&gt;
&lt;p&gt;不管怎样，对中舟文明的族人们来说，这一切总算是要结束了，但对萧洛自己，却要将这份被灭族的痛苦永远承受下去。&lt;/p&gt;
&lt;p&gt;可以说萧洛算是整个中舟文明里最悲剧的人了……不要以为能活下去是什么令人开心的事——对于一个六级文明而言，个体寿命基本上都超过了十万年……说句老实话，中舟文明的子民们基本上都是动辄几万岁的大佬们，那些年轻点的早就在第一次战略决战的时候拼光了。剩下的人嘛，活也活够了，啪也啪够了，早挂晚挂也就没有了什么区别……&lt;/p&gt;
&lt;p&gt;萧洛顺着走廊向前走去，经过几条岔道，一直走到了尽头，来到了一个标着发出蓝色荧光的“#063轨道发射管道-a口”字样的银白色舱门前。&lt;/p&gt;
&lt;p&gt;萧洛开始输入验证信息，摆弄了半天终于把舱门打开了。&lt;/p&gt;
&lt;p&gt;萧洛缓步走进舱室，舱室顶部的晶体显示器上发出淡蓝色的微光。而在舱室深处的的一条光滑轨道中静静的卧着一颗极具科幻感的子弹头似的流线形的深黑色飞行器，蓝光在飞行器上没有任何反射&amp;ndash;据说这种飞行器的外壳使用了某种全吸光材料。&lt;/p&gt;
&lt;p&gt;“就像从空间中被剥离出去的一样。”萧洛想道。 待到萧洛走近，黑色飞行器的外壳自动张开，露出了里面的白色驾驶座。&lt;/p&gt;
&lt;p&gt;萧洛将脚探进，微倾身子，躺入飞行器。&lt;/p&gt;
&lt;p&gt;“真tm凉啊。”&lt;/p&gt;
&lt;p&gt;萧洛忍不住打了个哆嗦。&lt;/p&gt;
&lt;p&gt;“没加温的吗？”萧洛忍不住吐槽道。&lt;/p&gt;
&lt;p&gt;舱盖自动关上，萧洛的视野陷入一片黑暗。&lt;/p&gt;
&lt;p&gt;“强互作用力正在延展，十分钟后完成发射准备程序。”冰冷的机械音在萧洛的耳边响起。&lt;/p&gt;
&lt;p&gt;接着，萧洛的眼前出现了出现了一个蓝色的数码倒计时。 舱壁有点金属特有的冰凉感，虽然穿着舱内连体服，萧洛仍感觉有些不舒服。&lt;/p&gt;
&lt;p&gt;“呐……抵御虫族文明半个世纪多，总算有时间来独自思考一下了。”萧洛看着眼前那逐渐减少的倒计时想道：&lt;/p&gt;
&lt;p&gt;其实是在宇宙中再平常不过的事了，中舟文明的科技发展到了六级之后，虽然知道没什么软用，但是仍然开始对外探索为晋升七级文明做准备。（经过多方面研究，因为宇宙法则的紊乱。对于六级文明来说，成为七级文明似乎是不可能的事情。）探索过程中，中舟文明就遇上了虫族文明。&lt;/p&gt;
&lt;p&gt;而不同的文明形态也决定了两者只有一者能够生存下去。&lt;/p&gt;
&lt;p&gt;毕竟——不同种族之间只有战争。&lt;/p&gt;
&lt;p&gt;不过嘛～虽然同为六级文明，但是虫族文明的变态的繁殖能力却依旧把中舟文明硬深深的拖死了。&lt;/p&gt;
&lt;p&gt;是的，一艘中舟文明的c级战舰能对上一百只c级战虫，但对上一千只c级战虫就要狗带了。然而，一千只c级战虫算什么？人家母虫随便找个行星趴着半个小时就出来了……&lt;/p&gt;
&lt;p&gt;这倒不是说虫族文明能称霸宇宙，纯粹是中舟文明把科技树点歪了，搞得跟另一个时空中的二战德国似的，完全是属于被人海战术拖死的。&lt;/p&gt;
&lt;p&gt;“空间固化力场将在一分钟后产生，请乘坐人员做好准备！”突然的，那个冰冷的机械音打断了萧洛的思绪。&lt;/p&gt;
&lt;p&gt;说来这个逃生舱还是在一个史前七级文明的战场找到的。当时，中舟文明倾整个文明之力才把这个逃生舱从那个宇宙法则紊乱的战场拖出来。&lt;/p&gt;
&lt;p&gt;据说中舟文明的科学家们在拆这个逃生舱的时候，还触发了这个逃生舱的一个安全机制。虽然研究地区选在了银河系边缘的一个小行星上，但是那场惨绝人寰的大爆炸仍然毁灭了很多——空间湮灭产生的能量风暴甚至波及到了银河系的内部地区。光是战争潜力就掉了至少三成——这也是为什么中舟文明在被虫族文明侵略时为什么那么无力了。&lt;/p&gt;
&lt;p&gt;然而，造成这一切的罪魁祸首——那艘子弹头状的黑色逃生舱却是嘛事没有的呆在原地。&lt;/p&gt;
&lt;p&gt;不过在这次爆炸，也让虫族文明高层认定中舟文明可能有突破六级文明的线索，不然虫族文明也不至于费半天劲搞跨星系作战也要也要取得中舟文明的那个突破六级文明的“线索”。&lt;/p&gt;
&lt;p&gt;然而呢？一个叫人失望的事实是：那个逃生舱上唯一有点像七级文明产物的只有一个空间固化发生器——据说能把一定量的液态空间固化，生成一个相对光速无限小的空间，其他的……真的没有了，甚至连推进系统也没有……只能靠中舟文明旗舰的引力发射管道发射出去。&lt;/p&gt;
&lt;p&gt;“空间固化力场将在十秒后产生，即将开始倒计时。”&lt;/p&gt;
&lt;p&gt;“10”&lt;/p&gt;
&lt;p&gt;“9”&lt;/p&gt;
&lt;p&gt;“8”&lt;/p&gt;
&lt;p&gt;“7”&lt;/p&gt;
&lt;p&gt;“6”&lt;/p&gt;
&lt;p&gt;引力弹射系统开始充能。&lt;/p&gt;
&lt;p&gt;“5”&lt;/p&gt;
&lt;p&gt;“4”&lt;/p&gt;
&lt;p&gt;“3”&lt;/p&gt;
&lt;p&gt;“2”&lt;/p&gt;
&lt;p&gt;“1”&lt;/p&gt;
&lt;p&gt;不管怎样，这一切都要重新开始了啊……&lt;/p&gt;
&lt;p&gt;“空间固化力场开始生成。”&lt;/p&gt;
&lt;p&gt;引力弹射管道内，那颗载着未来中舟文明所有希望的暗黑色逃生舱外，一条条如电弧般的黑色线条，如同那些科技馆中的玻璃球中的低压气体在高电压下辉光放电一样，由逃生舱向外辐射,但所有的黑色细线似乎又都被一个看不见的力场束缚在一个球体内。&lt;/p&gt;
&lt;p&gt;接着，突然间，逃生舱周围的空间变成了凝实的黑色，黑色的空间掩盖住了逃生舱，使那本来拥有优美流线外型的漆黑色逃生舱变成了一个比黑洞还黑的球体。&lt;/p&gt;</description></item><item><title>污水与沥青</title><link>https://www.everains.com/p/3/</link><pubDate>Fri, 07 Dec 2018 11:16:00 +0000</pubDate><guid>https://www.everains.com/p/3/</guid><description>&lt;h2 id="污水与沥青"&gt;污水与沥青&lt;/h2&gt;
&lt;h3 id="海参崴保卫战"&gt;海参崴保卫战&lt;/h3&gt;
&lt;h4 id="一"&gt;一&lt;/h4&gt;
&lt;p&gt;　　公历 2147 年，海参崴&lt;/p&gt;
&lt;p&gt;　　炮弹的呼啸声……&lt;/p&gt;
&lt;p&gt;　　正端着水壶喝水的萨奇诺夫毫无形象地将军用水壶扔在一边，扑倒在了旁边那个不久前那轮炮击中炸出来的散兵坑里。顺便把那个和他一起跳进来的那名新兵的脑袋摁下。&lt;/p&gt;
&lt;p&gt;　　话说那孩子也看起来不过十五六岁，应该是新补充进来的……&lt;/p&gt;
&lt;p&gt;　　不容萨奇诺夫多想，地面开始剧烈震颤起来，与此同时的是四周如地狱般的轰鸣声。爆炸一下子掀起了无数的泥土，把躲避在其他角落中的士兵掩埋起来。好半晌爆炸的余波终于过去，萨奇诺夫才从松软的泥土中钻了出来，抖落了一下钢盔上挂着的碎石还有黑泥。&lt;/p&gt;
&lt;p&gt;　　耳朵里还因为巨大的响声嗡嗡作响，虽然萨奇诺夫及时的捂住了耳朵，不过想要恢复过来至少也得几分钟的时间，这是他被无数次炮击后得出的经验。&lt;/p&gt;
&lt;p&gt;　　萨奇诺夫晃动了一下脑袋，从浮土里捡起了自己的枪支，然后拉了一下被他摁住头的那个新兵。&lt;/p&gt;
&lt;p&gt;　　但拉出来的却只是一个毫无意识的躯体，看着他那被钢筋贯穿的胸膛，萨奇诺夫强忍着干呕的欲望把他重新推进了土里，顺便扯下了他颈上的狗牌。&lt;/p&gt;
&lt;p&gt;　　“这些娘们炮打得真 tm 的准。”身后有个人含糊不清的说。&lt;/p&gt;
&lt;p&gt;　　萨奇诺夫回过头，看了一眼身后倚在残壁上边抽烟边说话的班长，把之前的那枚狗牌递给了他。&lt;/p&gt;
&lt;p&gt;　　班长郑重地接过狗牌，掐灭了还燃着的香烟，小心翼翼地将香烟塞进了胸前的口袋里。&lt;/p&gt;
&lt;p&gt;　　班长拿着那个沾满血污的狗牌，用衣角仔细擦了擦，端详一阵。&lt;/p&gt;
&lt;p&gt;　　深深地叹了口气，道：“是个好小伙子。”&lt;/p&gt;
&lt;p&gt;　　还没有等班长从之前的哀伤中恢复过来，伴随着轰隆的墙壁倒塌声，前方不远处的院墙如同纸糊般轰然倒塌，一辆银白色的悬浮式坦克刚冲破院墙又嘎吱地一声停住。&lt;/p&gt;
&lt;p&gt;　　坦克上的导向机枪在车载电脑的控制下指向了正在前方一脸懵逼的萨奇诺夫和班长。&lt;/p&gt;
&lt;p&gt;　　时间仿佛被放慢了，世界一瞬间寂静了，萨奇诺夫看着那导向机枪枪口电光闪烁。&lt;/p&gt;
&lt;p&gt;　　完了……我还没活过七百字……&lt;/p&gt;
&lt;p&gt;　　看来老天爷不打算让萨奇诺夫没活过七百字就归西……&lt;/p&gt;
&lt;p&gt;　　只见一枚 emp 榴弹从身后被发射出来，划过一道优美的弧线后精准的落在那个银白色坦克的舱盖上。&lt;/p&gt;
&lt;p&gt;　　随着引信的激发，伽马辐射从大气分子中把电子分离出来，产生康普顿效应，被分离出来的电子会被地球磁场捕捉，从而产生极大范围的扩散电子脉冲，其结果对电子设备是致命的，任何有电子接受装置的设备，在接受电子脉冲攻击后，电路板会全部烧毁。&lt;/p&gt;
&lt;p&gt;　　当然坦克这种武器可不会被区区一枚小型 emp 瘫痪，所以那辆银白色的坦克仅仅停顿了一下就恢复了运转。&lt;/p&gt;
&lt;p&gt;　　不过这已经足够了。班长和萨奇诺夫猫着腰默契地向着不同的方向跑去。&lt;/p&gt;
&lt;p&gt;　　如果向着一处跑，只会死得更快而已。&lt;/p&gt;
&lt;p&gt;　　毕竟，坦克上的车载电脑控制的导向机枪可不会像些电影里那些鬼子机枪一样人体描边。&lt;/p&gt;
&lt;p&gt;　　装备了视觉捕捉系统的电磁导向机枪甚至可以做到：想打你那第三条腿，绝对不会波及你另外的那两条腿。&lt;/p&gt;
&lt;p&gt;　　总之就是一个类似战场屠夫的存在了。&lt;/p&gt;
&lt;p&gt;　　不过萨奇诺夫暂时不用担心失去某个重要的男性生理器官了。&lt;/p&gt;
&lt;p&gt;　　看着近在咫尺的一座半塌了的低矮楼房，萨奇诺夫飞快地从已经没有了玻璃的窗口爬了进去，摔倒在里面的几片玻璃渣上。&lt;/p&gt;
&lt;p&gt;　　萨奇诺夫现在暂时是安全了。&lt;/p&gt;
&lt;p&gt;　　毛子那厚实的墙壁足以挡住电磁导向机枪 7.56 毫米口径的金属弹头。&lt;/p&gt;
&lt;p&gt;　　虽说 150mm 口径的电磁坦克主炮只需一炮就足以将这座低矮楼房轰成废墟状态，但萨奇诺夫还是坚信沥青那帮娘们不会为了一个士兵浪费一发炮弹的。&lt;/p&gt;
&lt;p&gt;　　“不过，石油组织的指挥官都疯了吗，它们怎么会用坦克来打巷战？”&lt;/p&gt;
&lt;p&gt;　　趁着这来之不易的宁静，萨奇诺夫背靠着厚实的墙壁，边清点身上的装备边想着。&lt;/p&gt;
&lt;p&gt;　　ARK 公司生产的 AK-e 电磁步枪，还有与之配套的 150 发 10g 标准质量弹，两枚破片手榴弹，一枚 emp 手雷——没错，你没看错，被补充进战场已经接近一个星期的萨奇诺夫一发子弹都没打出去，事实上除了之前的那辆坦克之外他甚至连一个敌人都没看到。&lt;/p&gt;
&lt;p&gt;　　只是在石油组织的频繁炮击下艰难地活下去而已。&lt;/p&gt;
&lt;p&gt;　　只是为了活下去……&lt;/p&gt;
&lt;h4 id="海参崴保卫战2"&gt;海参崴保卫战（2）&lt;/h4&gt;
&lt;p&gt;　　坦克的轰鸣声越来越近了。&lt;/p&gt;
&lt;p&gt;　　萨奇诺夫倚在墙上打开了电磁步枪的保险。&lt;/p&gt;
&lt;p&gt;　　似乎是从被抓来当兵开始，萨其诺夫就感觉自己心中充满了对石油组织那帮女人的恨意。&lt;/p&gt;
&lt;p&gt;　　为什么？可每当萨其诺夫想要回忆起刚参军但那几个星期里到底发生了什么，却总感觉自己在那段时间的记忆仿佛被硬生生的割去了一般。&lt;/p&gt;
&lt;p&gt;　　不管怎样，萨奇诺夫甩了甩脑袋，将这些莫名的思虑丢了在脑后。&lt;/p&gt;
&lt;p&gt;　　当务之急是想办法把这辆坦克给干掉。&lt;/p&gt;
&lt;p&gt;　　萨奇诺夫通过窗口玻璃的反光，对那辆坦克看了一眼。&lt;/p&gt;
&lt;p&gt;　　坦克的后面似乎有影影绰绰的人影。&lt;/p&gt;
&lt;p&gt;　　这就难办了，怪不得石油组织的高层会把坦克投入巷战。&lt;/p&gt;</description></item><item><title>友链</title><link>https://www.everains.com/links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.everains.com/links/</guid><description/></item><item><title>搜索</title><link>https://www.everains.com/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.everains.com/search/</guid><description/></item></channel></rss>