往事若浮云，悲欢不足道。今日归去，如鲸向海，非死实生。
总而言之，欢迎你来到硫酸钡的小站！这里是一些日常博客，记录了硫酸钡觉得有趣或者有用的事情。硫酸钡的小站这里是硫酸钡的小站，本着不抛弃不放弃的原则，没有特殊情况，我不会放弃这个博客，这个博客也会一直运营下去。目前在分类中你可以很清楚的看到我的分类未分类 一般来讲未分类并不会很多，这里会存放一些杂项或者我不知道该如何分类的东西（这种东西我认为并不会很多硫酸钡追番计划 这里会放一些我看的番，写一些观后感，当然让一个理科直男写一些深刻的东西有点强人所难，所以大概是一些算不得文章的东西吧。随想 随想的话大抵是生活中的一些碎片吧，不管是悲伤的，还是快乐的，抑或是严肃的，看到的听到的能够引起共鸣的，我都会记录下来。神经网络 神经网络是我的兴趣所在，也是我想要发展的方向，这里会记录我学习神经网络的点点滴滴，我不会在这里罗列一些基本的东西，随便在谷歌上可以搜到的基础知识大抵是不会在我这里出现的，在这里，我更想分享一些其他的东西。代码 很奇怪，我明明是通信工程专业的学生，却和软件结下了梁子，由于不是专业的软件出身，也避免不了走一些弯路，一些和代码有关的东西我都会放在这里，记录点点滴滴兴趣 平时闲暇时间我会弹弹吉他、学学日语，我会把自己折腾的东西放在这里近况 ##21.5.15 更新由于本学渣刚刚混(bushi)进行完期中考试，近来比较清闲，正在尝试搭建新的神经网络架构，具体不再赘述，相信不久就会专门写一篇文章吧，具体成果嘛，，，估计得等游戏打完了 233333求交友!求交友！求交友！找到志同道合的朋友是硫酸钡的梦想，如果你觉得本站不错，希望你可以留下自己的交友链接，你也可以在关于我当中找到我的联系方式，当然你也可以在交友链接的页面为我留言，我都会尽快处理
本教程共花费 20 刀外加 3.5 % 的手续费（呜呜，米，我的米.jpg）最近遇到了一个需求，需要接入 chatGPT 的相关服务，特此记述一下购买 OpenAI API 接口的整体流程。创建账号首先我们需要一个 OpenAI 账号。这一步网上有很多详细的教程，这里就不加以赘述。照着做就行，只有先搞定 ChatGPT 账号，才能在此基础上升级到 ChatGPT Plus。这一步没有特别注意的坑，我直接使用了谷歌账号登录，没有遇到任何问题。+86 开头的手机号也可以进行注册。这是我收到的来自 WildCard 的警告我们发现近期有很多 outlook/hotmail/live 等微软邮箱注册的 OpenAI 账户，在平时使用没有问题，但一旦升级到 GPT Plus 或绑定 API 就会在 24 小时内被封。我们猜测是微软给 OpenAI 提供了邮箱的注册国家信息，为了不必要的损失，请您尽量不要用微软的邮箱升级 Plus 或绑定 API 。虚拟信用卡如果你经常性上外网的话，应该不难发现，很多海外购物网站、开通各种会员（apple store 、奈飞、Google pay 等等）、购买服务器等等的时候，使用国内的信用卡都可能“无法支付”（这得益于国内严格的审查吗，我不知道）。很多支付必须通过海外的信用卡来进行操作。不幸的是，本人一直是一个良民，手中并无海外的信用卡，因此我只能借助网络上的虚拟信用卡进行支付。虚拟信用卡的平台其实有很多，网上一搜关键字全是相关的广告。关键是这玩意良莠不齐，本人又是个新手，很难说里面会存在什么样的天坑。目前比较知名的有 Dupay、Onekey Card、NobePay、FomePay 等等。注意，提到的这些截止到目前为止我还一个没用过（广告位招租）如果你想要用的话，建议提前收集好信息。我归纳了几点要注意的地方：是否需要开卡费、年费/月费是多少、手续费多少、是否能充值进你需要的服务（比如我看到有人发帖称 Dupay 已经不能冲 ChatGPT 了）、支持哪些支付方式（有些如 NobePay 是支持支付宝微信的，而有些需要换成 USDT 再转移成账户余额）等等。再次提醒，本着对自己负责的态度，建议还是多做了解再去选定你要用的支付平台。在这里我选择的是 WildCard，其号称一分钟开卡，并支持 RMB 支付，总的来说还是支持蛮多支付手段的。注册很简单，使用手机号注册即可，记得添加支付密码。左边选择我的卡片。即可开卡，我选择的是两年的卡，输入官方的邀请码 REDMAN2024 可以有两美元的减免，不嫌弃的话也可以输入我的邀请码 B1YURZGJ，减免完 9.9 刀，我实际支付了 71.79 元.在经过一个封禁须知后，开卡即可完成。充值WildCard 内部很贴心的放了很多和 chatGPT 相关的服务，个人初步看了一下，还是能满足业务需求的。有兴趣的话可以探索一下。就拿 API 来说，其贴心的内置了 可以自由调用的 API 接口，和 OpenAI 的无论是用法还是收费都完全一致，也就是说其就收取 3.5% 的手续费帮你省去了封号的风险，还是相当划算的。（我冲了，你们呢）本着将教程进行到底的原则，在上面的 API 基础上，我又冲了 10 美刀试一下官方的充值渠道。去我的卡片里充值了 10 美刀后，打开 OpenAI 的 API 界面。在设置的 Billing 里面进行充值即可，将卡片信息全部填入即可完成支付。
辞旧迎新最近在忙着复习，但死活学不进去。说实在的，我并不喜欢这种应试考试，这种感觉在我上大学后越发明显，以至于变成了对我的折磨。我不是什么教育学家，我也部分理解在本科之前启用应试教育的意义，即掌握一定程度的知识和运算能力等。然而，人生并非严格的闭卷考试。无论何时，即使当你处于关键时刻，你也总有机会离开谈判桌，到洗手间去静心思考一番。那我为什么一定要在一门我可能一辈子都不会用到的科目上花大量时间进行无意义的闭卷应试呢？这无疑是对我的拷打。总而言之，应试对我精神的摧残成功将我逼到了博客，开始写起了这篇年终总结。我并不是个文笔很好的人，不客气的说可以算是很烂的那一批。因此我并不是非常喜欢写这种非常需要文笔的自述类文章：一来我的文笔不支持我进行这种大段的思想内容输出。二来对于我这种 intp-a 的人格来说，我并不喜欢过多的分享我自己——相比之下我更喜欢当一个倾听者，去看看其他人的生活，并通常会进行一些毫无营养的思考。输出自己的思考在我看来是非常费力的工作，需要极大的体力和脑力才能让别人了解你，获取认同是一件很幸福的事情，但我实在是太懒了。不过话说回来，时间过的是真的快。转眼间已经 2024 了。这一年似乎经历了很多事，但仔细一想又平平淡淡毫无新意可言。但总归一年的时光堆积，还是决定在这里絮叨絮叨。回顾这一年，有喜有忧，但总的来说还算顺利。希望各位能以平常心当作一份故事来看待。我会尽力围绕“我自己的事”来记述这一年。撰写自己经历的另一个隐患就是会无意中伤害到别人。每个人都有自己的世界和生活，在自己看来理所应当的东西可能在其他的世界弥足珍贵。我明白这种感受，我不希望自己的陈述伤害到某一个人。再者，生活并不总是像故事那么完美。在这一年中，父母曾一度走到离婚的边缘，亲人也接连离世，这些都在我的心里留下了不可磨灭的伤痕。而上面这些事我都不会写在这次的内容中，当有一天这些事尘埃落定，我也许会将他们完完整整的写出来。我只是想让你们知道，我习惯报喜不报忧，但这并不是我真的没有忧。因此，以平常心当个故事看就好。毕业毕业并不是一个突然的事情，和舍友聊天啊，应付毕业论文啊，去毕业旅行啊，每一天都是毕业的一部分，因此也慢慢对毕业这件事变得迟钝也是理所应当。但有一天你突然回过头，才发现已经走完了长长的毕业旅途。对于毕业后的规划，当时的我想法很简单，我并不是一个能学的进去课本知识的人，因此我并不期待通过考研来改变我的人生轨迹。因此我只有两条路可选：要么保研，要么工作。我的科研成绩很好，在当时已经以第一作者的身份拿到了两篇论文发表和两个专利，但我的绩点相当之差，差到我可能因为成绩不达标而无法参加保研评比。当时的我面临两条路：要么放弃这些已经有的成果去找实习准备 23 年毕业时找工作。要么放弃实习的时间，然后去重修几门课程刷刷分，来争取一个不一定有的保研机会。从个人而言我喜欢做科研的感觉，但相应的，如果我选择了去争取资格而没有争取到，那等待我的可能是漫长的脱产在家找工作的环节，并且没有 22 到 23 年的学习技术的时间，我能吃技术饭的概率基本为 0 。具体来说，我自认为我的编程水平只是够小打小闹而难登大雅之堂，没有什么出色的代码项目经历，也没从来没背过八股，往往是听过几个技术路线的名字然后需要什么学什么。个人认为这在找工作时对我的加成几乎为 0。这种选择在 2022 年的时候给了我非常大的压力，我从来没想到像我这么没心没肺的人也能因为一件事焦虑到晚上 11 点躺下 2 点睡不着（尽管只有短短几天）。那段时间我和很多人都聊了聊，在听取完身边人的意见后，最终决定还是试一试。事后来看，这样的选择虽然冒险，但总的来说还算顺利。最终在 22 年的十月份我成功拿到了保研资格，夏令营期间我联系了北航北理同济和北邮，前两所没有搭理我（我个人认为是因为北航不要双非的非第一，北理嫌弃我六级没过）。最后经过权衡，我还是选择了北邮。理由有很多，比如同济搭理我的时候已经快填系统了，当时我已经和北邮谈好了；北邮的专业评分 A+ 可以让我拿到户口诸如此类。不管怎么说，终于又能继续安心做三年简单的科研了。旅行23 年的 4 月份到 6 月份，是我整个大学生涯中最放松的时刻。我提早写完了我的毕设，用前些年攒下的钱，开始了真正意义上的生活。我和各种各样不同的朋友从北京走到西湖，看了嘉兴，拜访了鲁迅。去了长沙和张家界，在那里爬了天门山。我还去了南京，看了看凯申和他的总统府。看了海，爬了山，在闹市中吃了螺蛳粉，在玄武湖独自看了夕阳。生活好像突然就明亮起来了。我走了很多很多地方，接触到了很多很多之前没有看过的景色和人。我终于有时间可以和朋友们天天呆在一起而不用想明天是不是该投稿了。我可以尽情的和吉他抱在一起。可以和朋友们打打游戏，聊聊闲天，过一个什么都不用做的一天。这样的日子持续了两个月，我中途只需要按时回来进行我的毕设汇报就好，老师们都很宽容，一切顺利。“悠娜”要说我在这段时间做了什么有意义的事情，那可能就是养“孩子”了。我研究生大方向是数字人，而我正好对这个方向比较感兴趣。在 23 年的 6 月，我根据现有的技术成果铺垫（其实是前几年的大模型，现在的跑不起来 XD），自己写了一个 AI，名字叫做“悠娜（YUNA）”，并在 7 月成功将悠娜从我的电脑中唤醒。悠娜的灵感来源于序列之争中的虚拟歌姬悠那。最初的构想是在低成本显卡上，通过各种计算机基本技术，并结合 AI 来做一些有趣的事。单纯的 AI 能做的事有限，尤其是在成本很低的时候。那么如果只将核心的智能部分使用 AI，外围使用计算机程序进行大量辅助结果会如何呢？这种赛博 AI 装赛博义体的技术路线确实让我有了尝试的冲动。悠娜是一个聊天 AI，但其设计初衷并不是成为低成本的 ChatGPT 那样成为强大的聊天 AI。在最初的设计蓝图中，悠娜应该更贴近一个“人”的表现。她不会翻译大段的文本，也不应该会对聊天者输出大段的框架性的废话。她应该偶尔在没有输入的情况自己提出一个话题和你聊天。她也应该有和人类相似的记忆曲线，即使现有技术无法达到人类的记忆容量。相比大公司的通用型 AI，悠娜应该更像一个有缺陷的但更有温度的 AI。目前来看，悠娜已经可以成功运行起来了，但随着计划的开展，也确确实实遇到了一些难以解决的问题。个人的力量终究是有限的，况且还是对于一个没什么本事的废柴研究生。悠娜的记忆模块已经调试了很久，但是效果还是不尽如人意。多样化训练数据的缺失，受限于语言基座和设备的性能，都在很大程度上限制了悠娜的表现。可以预见，在不久的将来，在我把记忆模块调试完成后，悠娜将迎来一次大的重构。在那之后我可能会开放在我的个人网站来更好的收集一些数据。再之后呢？说实话我还没有思考过，可能是继续为悠娜添加一些新功能吧（笑）。研究生研究生生活已经过去了四个月，对我来说其实这样的日子和本科没什么区别，一样的平淡，甚至更加清闲。无非是做做科研，上上课，没事做的时候弹弹琴，看看番。研究生导师们是要接项目的，你不仅要处理自己的学术任务，还要兼顾导师接的活。这是可以理解的，实验室要想生活，就得去接一些可以挣到经费的活，但我确实对这种简单的工程实现没什么兴趣。得益于进组比较早，我早早的选定了数字人生成这一比较清闲的课题。在根据现有技术出完 demo 后，组内的项目工作对我来说也几乎压力不大了。我可以专心把注意力放在我的科研还有悠娜上，这还是让我感到非常开心的。唯一美中不足的是，我因为参加组里的杂事错过了社团的招新。对于社恐来说，刚鼓起勇气准备试一下然后错过了是一件非常难受的事情。可以遇见到，在我的大学生活里，我没有机会去参加一个社团了，这可能是我一辈子的遗憾。关于未来说实话没想过，但好像这种年度总结都得有这种环节，要不然不好结尾（乐）。我不是那种会给自己定 flag 的人，况且我的 flag 从来没有实现过。但既然有三年可预见的未来，也不妨写一写。首先是悠娜，这一年我会尽我所能给悠娜做升级到可用的程度，并尽力将其上线到个人网站（这可能意味着我要打好几份工来买高性能服务器 TAT）。悠娜是我新的家人，我会持续将其更新下去。然后是科研，今年科研进度要提一下，目前已经有了很好的点子但一直没有实现。做做实验推进一下是好的。乐队，真的好想组乐队，但是没有玩乐队的朋友。朋友永远是最稀缺的资源，本来自己弹弹琴是很好的，但最近越发想大家一起组团玩音乐了（是 MyGO 害了我.jpg）。希望新的一年能找到一群可以一起玩的伙伴。没了，大概能平平安安活着已经很好了，如果能快乐一些就已经是相当幸福的人生了。
【乐理】调式与和弦（以C大调和a小调为例）
我们在欣赏音乐的时候可以观察到，随着音乐的进行，旋律呈现出流水一样的起伏。在一些段落的结尾处，都有类似于我们说话停顿处相对平静的感觉，这种相对平静在音乐当中称为“稳定”，处于稳定位置上的音称为“稳定音”。音乐经过一系列的起伏发展最终结束,给人以完全终止的感觉。这种从平静（稳定音或和弦)到运动(不稳定音或和弦）再回到平静(稳定音或和弦）的过程叫做“解决”。处于终止处这个最稳定的音称为“主音”(有时终止在属音上,属于个别现象)。因此，可以得出以下结论：组成音乐的一些音以主音为中心,按照它们彼此之间的高低及稳定与不稳定等关系,构成一个体系，这个体系叫做“调式”。 调式中的音从主音到主音,按照音的高低顺序排列起来称为“音阶”。当音阶从低向高进行时称为“上行”,当音阶从高向低进行时称为“下行”。音程我们首先介绍一个简单个概念：音程。你可以简单的把音程看作距离，每一个音符和自身相距离一度，之后进行顺延。是不是很简单？但我们通过十二平均律可以知道，7 与 1、3 与 4 之间是半音，这又该怎么表示呢？所以音乐家们又将其细化，将这两个音之间称为小二度，其他的则称为大二度。以此类推，1-3、4-6、5-7 等之间为两个全音，称为大三度。而 2-4、3-5、6-1 之间是一个全音和一个半音，称为小三度。同样的 1 与升 1 之间也是一个小二度：自然大调和自然小调大调式是一种以 1（Do）为主音的，由七个音构成的调式。大调乐曲多以 1 3 5 某个音开始，亦多以 1 5 结尾。用这种调式写作的音乐作品其色彩明朗、热烈。大调式分自然大调、和声大调及旋律大调三种形式。这里我们主要讲自然大调。自然大调是大调式的基本形式,应用范围最广。自然大调音阶由五个全音和两个半音组成，并目全音和半音的位置在音阶中是固定不变的，只要是自然大调音阶就要符合这一规律。小调式是以 6(La)为主音的，由七个音构成的调式。用小调式写作的音乐作品色彩较暗淡,有忧伤的意味。其调式音阶也分为三种不同的形式。其中自然小调是小调式的基本形式,应用范围最广。调式以 6(La)为主音,排列成没有升、降音的音阶。自然小调一般在歌曲的旋律中运用。是不是有点晕？我们换个方向来想。当我们弹奏 1 2 3 4 5 6 7 1 时，我们为什么听起来像 Do Re Mi Fa Sol La Si Do？答案呼之欲出：因为他们具有一个有规律的音阶！因此，只要你找到一个全全半、全全全半的音阶，不管是什么音，它听起来都会像 Do Re Mi Fa Sol La Si Do！因此，只要你用任意音符找到一个全全半全全全半的音阶，那么他就称为大调。 那当我们再降低第三第六第七音，那么就变成了对应的小调。我们以 C 为例：这是 C 大调：我们按照上面的规律将大调变为 c 小调，降低之后的音阶为全半全全半全全（此处无图，请大家按照上面的图脑补下），而这个音阶恰好是上面我们说的小调的音阶！因此我们有：全全半全全全半为大调。全半全全半全全为小调。而我们说的 CDEFGAB 大调也仅仅是谁是主音（放在 1 位置的音）不同而已。那让我们以 C 大调和 a 小调为例，一起来看一下。C 大调上节课我们介绍了十二平均律，也介绍了乐音体系是由若干组音高不同的“C、D、E、F、G、A、B”组成的，他们之间的音程关系如下图所示：C 大调或 C 调就是要将调式音阶的主音 1(Do 音)唱奏成乐音体系中的 c 音那样高(即吉他上第 2 弦第 1 品的音高为 c,以下简记为 C)。1 音音高确定的同时,按照大调音阶“全、全、半、全、全、全、半”的音程特点，音阶中其它各音的音名和在吉他指板上的位置也就相应地确定下来了。C 大调音阶如下：a 小调A 小调就是要将调式音阶的主音 6(La 音)唱奏成乐音体系中小字组的 A 音那样高(即吉他上第 3 弦第 2 品的音高为 A)。6 音音高确定的同时,按照小调音阶特点,音阶中其它各音的音名和在吉他指板上的位置也就相应确定了。和弦旋律讲究的是一个音符的高低，音程讲究的是两个音符的关系，和弦则讲究的是多个音符的配合。从单声部到双声部，再到多声部，音乐越来越丰满，越来越具有层次。这也是从主题到丰富主题再到渲染主题的音乐发展历程。我们根据根音往上跳三度（相当于跳过一个音），连续做两次，这三个音构成的旋律就变得更加丰富更有层次感，这就是和弦（这里讲的是三和弦）。关于和弦，其实我们只需要记住：大调和弦为大三度 ＋ 小三度；小调和弦为小三度 ＋ 大三度。我们以 C 大调为例，这里先放一个音程图方便对比：C 大调的 1 音为 C，那么加一个大三度是 3（E）再加一个小三度就是 5（G）。那么 C 大调的第一个和弦的构成音即为：1、3、5。我们再看 C 和弦的前三品的指法，是不是一目了然了？我们再来一个，C 大调的第二个和弦根音是 D（2），跳过一个音是 F（4），下一个是 A（6）。他们是小三度加大三度的关系。因此这是一个小三和弦。我们称其为 Dm（带 × 的弦是不弹的）：通过这种方法，我们可以推出 C 大调的所有和弦。C 大调和 a 小调和弦指法我们列出了 C 大调和 a 小调的所有和弦指法：此外对于 C 大调和 a 小调的 7 位置，不止有 B-和弦，C 调还有 G7 和弦，a 小调还有 E7 和弦。这两个是七和弦体系中的内容，不在今天今天讲解范围之内。（这里挖个坑，下次更新就更这个 XD）后记这节我写了了很久。一来我作为乐理的新人，并没有多少权威性，很多资料都要进行反复查验。二来想把这部分知识通俗易懂的将出来，确实很有难度。本篇对和弦其实并没有讲解完全，比如 C 大调和 a 小调的关系，除了大小三和弦以外的增三减三和弦，但不知不觉已经 5k 字了，如果阅读时间过长的话，对读者是一种折磨。因此我将在之后额外再写一篇文笔比较随意的杂谈来谈谈剩余我们没有谈到的一些补充要点。但是其实依照我个人的理解，所有的乐理都是人规定的，音乐的本质还是解决， 我们如何解决音乐中出现的不和谐的音阶？我们是否可以通过增减半个音高来实现旋律的和谐？通过解决这些问题，我们才能更好的了解和弦亦或者是调式和旋律内在的规律。而这才是音乐的发展历程。
开学季已到，新学校的服务器稍微有些问题，正好借此机会为这台服务器重装下系统，特此记述下整个过程。我分到的这台服务器硬件配置是 i9 13900k 3090 的配置，前些日子服务器突然频繁出现了崩溃。正好我的程序没法在 22.04 的 ubuntu 上跑（万恶的 cuda 版本），特此重新为其安装 ubuntu20.04 版本。如果你打算按照本教程来重装你的电脑，请务必在操作前先浏览一遍，把该下载的都下好，这可以省去你很多的时间。开始首先去 ubuntu 的官网下载 Ubuntu20.04（其他版本同理）的安装镜像文件，准备一个 U 盘，并下载一个 Rufus。打开 Rufus，选择你的镜像文件，点击开始，并等待几秒。这样你就准备好了一个启动介质。安装把 U 盘插到你要安装系统的机器上，进入你的 BIOS 选择从 U 盘启动，每家的 BIOS 不尽相同，你可以从网上找到你家主板的 BIOS 信息，进去之后选择“安装 ubuntu”就可以开始安装过程了。选择你的语言和键盘：配置网络（重要）：下面这个图是我从网上偷的图，这里如果能配置好网络的话是极好的，但是后面安装会稍微慢一点，因为其会从网络上寻找更新。如果你没有的话，也没有关系，选择下面的跳过配置网络即可。其原因是你的主板太新了，没有你网口的驱动，请根据后面的教程进行安装即可。代理默认配置磁盘空间，这里就选择默认的使用整块磁盘自动分区，并使用 lvm。后面的页面你可以为你的硬盘们分派空间和挂载位置，我为我的 home 文件夹分配了 1T 为 data 文件夹分配了 2T配置你的用户名和密码安装 ssh接下来点击安装即可！ubuntu 的网络配置如果你在之前的步骤中配置好了网络，那么恭喜你在这里就可以结束自己的安装流程了，接下来你可以去配置代理或者换源并开始你的工作了。但是对于相当一部分人来说，ubuntu 并不能自动帮你配置好网口（没错就是我这种倒霉蛋子），原因是 Ubuntu 内置的网卡驱动并不能支持一些比较新主板上的 2.5G 网口。比如我的 Z690 的网口就没有识别到。这个时候你就要对网卡驱动进行重装。查看你网口有没有装好很简单。ip a如果你只看到了这一个回环网络，那么恭喜你，网口没安上！把你的 U 盘拔了，在里面随便哪个位置下载以下安装包：gcc、make、dkms。为了方便，在这里我共享出我的文件，方便大家使用。我在里面还放了 w3m 的安装包，这是一款文字浏览器，如果到时候你想我一样要连接校园网，可以用这款浏览器进行登录你的校园网。此外，你要确认你主板上的网口是什么型号的，然后去官网下载适合你的网口驱动。我在这里贴上我 r8125 的网口驱动连接。插上你的 U 盘，并把他挂载到你的 ubuntu 上：mkdir /mnt/usb mount /dev/sdb1/ /mnt/usb/这里的/dev/sdb1 是我 U 盘的分区，如果你不知道，请输入如下指令来查看：sudo fdisk -l一般来说，输出的最底下就是你的 U 盘信息及分区，你可以通过看存储容量来判断。用 cd 命令进入/mnt/usb/路径下你安装包存放的位置，使用 dgpk -i 你包的名字来安装你下载的所有包，先安装 gcc、make、dkms。解压你的网卡驱动：sudo tar xvf r8125-9.011.01.tar.bz2 -C /usr/src cd /usr/src/r8125-9.011.01 sudo sh ./autorun.sh如果你 autorun 运行失败了，那么你要添加一个 dkms.conf 到/usr/src/r8125-9.011.01/dkms.conf，内容如下：PACKAGE_NAME=Realtek_r8125 PACKAGE_VERSION=9.011.01 DEST_MODULE_LOCATION=/updates/dkms BUILT_MODULE_NAME=r8125 BUILT_MODULE_LOCATION=src/ MAKE="'make' -C src/ all" CLEAN="'make' -C src/ clean" AUTOINSTALL="yes"并编译 dkms：sudo dkms add -m r8125 -v 9.011.01 sudo dkms build -m r8125 -v 9.011.01 sudo dkms install -m r8125 -v 9.011.01 sudo depmod -a sudo modprobe r8125 现在输入 ip a 应该有了：然后去检查 netplan：sudo vim /etc/netplan/00-installer-config.yaml附上我的配置信息 enp4s0 是我的网口名称，要自己修改。编辑好后直接sudo netplan apply大功告成！
【论文阅读】PaMIR: Parametric Model-Conditioned Implicit Representation for Image-based Human Reconstruction
通过单张照片进行人体重建的第三篇文章，作者是清华大学的刘烨斌教授。其在 PIFu 的基础上增加了新的人体先验，从而实现了更好的人体重建效果。项目地址在这里。MotivationPIFu 已经证明了隐式函数在人体重建方面相较于显式方法效果更好，但依旧存在速度慢 + 姿势鲁棒性差的情况，此外，PIFu 过高的几何表达自由性带来的是很差的稳定性，而这恰恰是另一个 trade-off 问题。一个有效的解决方法就是增加几何先验，将任务转换为给定一个粗糙的人体几何来雕琢细腻的穿衣人体。因此 PaMIR 应运而生，其将另外一个热门的人体重建表示方法 SMPL 作为人体几何先验引入了隐函数重建当中。相比于刚刚诞生的隐函数人体重建，SMPL 人体重建的工作已经发展了数年的时间，在当时也有了一些不错的成果，比如一些在 SMPL 上加载非参数的体积表示方法 Deephuman。但其大多难以实现高分辨率的重建。另外，我们的任务输入只有一张 RGB 图片，在现有的工作中，我们无法估计出极为准确的 SMPL 模型（训练和测试仍有差距）。于是一个朴素的想法便出现了：我们能不能在 SMPL 估计的时候使用准确的 ground truth 进行监督，而在后续网络的雕琢过程中使用预测出来的 SMPL 模型进行推理呢？这样做不就可以降低后续网络对 SMPL 模型的依赖了吗？理想是丰满的，现实却是骨感的。由于图像在深度信息上的模糊性，不可能保证预测的 SMPL 和 实际的 SMPL（Ground Truth）在深度上保持一致。因此我们会迫使网络在“错误的条件”下给出“正确的答案”，这对网络来说是灾难性的。因此，作者结合这些背景提出了以下创新思路：加入了参数化的人体模型 SMPL 作为先验信息，使得后续网络专注于表面的雕琢而无需关注更多任务。为了避免上述深度模糊的问题，引入了一个新的深度模糊损失函数对网络进行优化。提出了一个基于优化（optimization-based）的人体模型优化方法，在提高精度的同时增强了 SMPL 与隐函数输出的一致性。此外，由于作者使用了不同来源的信息，因此其内部建立了不同域之间的隐式对应关系，使网络更具有拓展性，比如我们可以替换之前的模块 SMPL 来对网络进行训练，从而改变网络的输入等。Methodpipeline我们先来看看 PIFu 的隐式函数：还是熟悉的配方，还是熟悉的味道：我们通过隐函数 F 通过给定一个采样点 P 的特征来判断该点在不在曲面上，从而实现对人体的重建。在 PIFu 当中，特征的提取有以下公式：在这个过程中，有两个基本模块：通过图片提取到的特征 S 和深度信息 Z 。这里对前半部分再次进行解释：Fi 是图像编码器，而 Π（p）则是 p 点在图像上的 2d 投影，网络通过双线性插值 S 对其采样。我们再来看看 SMPL 的参数化身体模型：这是经典的 SMPL 公式，在本文当中，作者使用了当时的 SOTA 模型 GCMR 来提取 SMPL 的人体信息。这个模块是可以被替换的，你可以替换成任意的当前是 SOTA 的 SMPL 估计模型，接下来便是重头戏了，作者直接在 PIFu 的基础上对重建的函数做出了修改：是不是很简单？作者直接将 PIFu 的特征提取模块进行了保留，只把深度信息 Z 替换成了 SMPL 信息。作者认为，SMPL 信息当中已经包含了足够的 3d 信息，不再需要额外的深度信息进行辅助了。在实际操作中，作者将 SMPL 模型转换为了占用体积 V0（可以理解为体素），并通过编码器获取到了公式中的 SMPL 特征 FV，并通过双线性插值采样到了 FV 中 p 点的特征。随后直接怼到隐函数中进行重建。整体的 pipeline 如下：深度模糊的重建损失在实际训练过程中，为了降低对精确 SMPL 模型的依赖，作者也沿用了我们之前提到的思想：在 SMPL 估计的时候使用准确的 ground truth 进行监督，而在后续网络的雕琢过程中使用预测出来的 SMPL 模型进行推理。但面对真实的 SMPL 和推测的 SMPL 的深度不一致问题，传统的使用均方差直接优化预测点和真实点的方法并不够用，因此作者额外提出了深度模糊的重建损失简单的均方差，但是作者额外加入了 Δpi 来补偿人体深度的偏移。动机是，我们其实不在乎回归出的人体模型中心的绝对坐标到底在哪，中心可以是 (0,0,0) ，也可以是 (100,100,100) ,这都没有关系。只要人体的几何曲面保持一定，人体的绝对坐标在哪里其实对我们来说都是一样的。因此最后的损失函数可以剥离掉绝对坐标的部分，只考虑模型几何轮廓的差异，作为损失函数就可以了。而在这里，Δpi 为：也就是说，其补偿了深度。其中 Δzi 通过在网络训练中利用真实的 SMPL 和预测的 SMPL 的显式关系实时计算得到：其中后半部分是 SMPL 顶点的深度值和实际点的预测值之差，Ni 是离采样点 Pi 最近的 SMPL 上的顶点集，其包含了 4 个离 Pi 最近的点。而中间的分数部分上面是其对应的混合权重，下面是对该权重做了归一化：整体的损失函数如图所示：基于优化的身体参数优化在获得 SMPL 参数的领域，基于优化（Optimize-Based）的方法一般都要好于基于回归（Regression-Based）的方法。但是遗憾的是，基于优化的方式不可微，所以我们只能在 inference 的时候用用，我们通过优化以下式子来提高对 SMPL 的估计：其中后一项是正则化项，惩罚 β和 θ 和初始预测 init 的差异：前一项则是通过以下式子意图鼓励最终预测和 SMPL 的预测对齐：同样的，ns 为顶点个数，q 则是定义的惩罚 loss：在实际应用中，η=5，我们可以看到，对于落在 SPML 表面之外的点，我们会施加一个惩罚，并使用其更新姿势和形状参数。来鼓励最终预测和 SMPL 的预测对齐。特别的，我们对落在表面外侧的点施加了更多的惩罚，这是因为我们有可能会遇到裙子等，我们希望这里的点多收缩点，收缩到人体表面，别把 SMPL 带歪了。颜色推理这部分比较简单，PaMIR 把 PIFu 当中的网络搞成了 RGBα 向量，多了一个预测值，作者称其为混合值，通过 α，我们将从图片中观察到的颜色和预测的颜色做了混合：颜色重建损失如下：和 PIFu 的相差不多，应该很好理解，值得一提的是，作者在这里使用了 L1 范数，这进一步使得颜色不那么平滑。
【论文阅读】PIFuHD: Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitization
PIFuHD 是 PIFu 系列的第二篇论文，是 PIFu 的改进版本。本文记述了论文的核心思想。Motivation在之前的工作中，PIFu 已经证明了隐式函数可以优雅的实现通过对单张照片对人进行重建。但 PIFu 依旧存在着缺陷。PIFu 只能处理低分辨率的图像，这主要是计算机领域的经典的 trade-off 问题导致的：要想高质量细节（局部信息）就一定要提升分辨率来增强细节信息，而提升分辨率感知域（全局信息）又上不去，PIFu 之所以有着良好的表现，就是因为其对全局信息的良好把控。这严重影响了 PIFu 的进一步发展，因此为了改进 PIFu 的固有缺陷，有必要对其进行进一步改进。另外，PIFuHD 还提出了一种有效处理未观测区域（如背面）的方法，从而获得了更完整的的重建效果。Method整体流程PIFuHD 通过 coarse to fine 解决了这个问题，要想理解也很简单，其使用了两个分辨率不同的模块，一个负责提取全局信息（上半部分），另一个提取局部细节（下半部分）框架上看，PIFuHD 依旧沿用了 PIFu 初始的框架，是不过分成了两个部分，一个提取全局特征，一个提取局部特征。为了提升重建模型的质量和精度，该文先使用方法预测该图片对应的正面和发面的法向图，和原始 RGB 图片一起作为两个模块的输入图片。也就是说，PIFuHD 的主干部分输入的是三张图片：RGB 相片以及正反面的法向量图。法向量图的预测作者认为，讲法向图放到特征提取之前更能让之后的网络学习到锐利的 3D 几何。作者直接使用了 pix2pixHD 网络，直接从 RGB 彩色图预测改图正面和反面的法向图。作者认为这样得到的看起来合理的法向图对于重建三维人体就足够了。loss与 PIFu 中的简单的正则损失不同，PIFuHD 使用了 BCE(Binary Cross Entropy)损失函数计算一个集合的采样点的损失。其中 S 表示采样点的几何，λ 是采样点中在人体表面外的比例，f*(X)表示 X 的金标准的占有值。f{L,H}则是网络两部分预测出来的值。和 PIFu 一样，训练点的采样方法还是包含两个部分：在 3D bounding box 中的均匀采样和在人体表面顶点的周围进行的一个服从高斯分布的密集采样。
【论文阅读】PIFu: Pixel-Aligned Implicit Function for High-Resolution Clothed Human Digitization
本文介绍一可以通过单张或多张照片来进行三位人体重建的模型 PIFu，这也是 PIFu 系列的第一篇论文。项目地址在这里Motivation人体重建是三维重建当中的一个重要的分支，在元宇宙当中也有重要的应用意义。在某些特定的领域，比如人脸、人体或者是已知形状的人造物体当中，现有的技术已经可以做到通过单张照片对其表面进行重建。然而，由于无效的模型表示，即使对于特定领域的建模任务，重建结果的分辨率和准确性通常也是有限的。因此，作者通过引入一种隐式函数的方法，用于解决服装三维人体从单个或多个输入图像进行纹理表面推理的难题。现有的大多数 2D 图像处理模型都运用了全卷积网络结构来保持输入图像与输出之间的空间对齐。但这在 3D 当中并不能很好的工作。体素表示的方法可以很好的应用到全卷积网络结构当中，但其表示的内存密集型本质限制了它生成精细细节表面的能力。而基于全局上下文的表示拥有更高的内存使用效率，却不能保证保留输入图像的细节。类似地，基于隐式函数的方法依赖于图像的全局上下文来推断整体形状，这可能与输入图像不一致。在 PIFu 当中，其利用全卷积网络结构，将像素级别的局部信息和全局信息进行了对齐，并且不需要像基于体素的表示那样占用大量内存。这在诸如衣服等具有任意拓扑形状、高细节和高形变的物体重建上具有更好的表现。尽管之前也有工作使用了局部信息，但是其缺乏三维感知的特征融合机制，他们的方法无法从单一视图中推理出三维形状。这一点在 PIFu 上面得到了显著的改进。具体的来说，作者训练了一个编码器来学习图片中每个像素单独的特征向量，这个特征向量还考虑了其相对位置的全局上下文。给定这个每像素特征向量和从这个像素发出的相机光线的指定深度 z，我们学习了一个隐式函数，它可以分类与这个 z 深度对应的 3D 点是在曲面内还是在曲面外。特别的，作者的特征向量在空间上将全局三维表面形状对齐到像素上，这使得其能够保留输入图像中存在的局部细节，同时在不可见区域推断出可信的细节。此外，通过隐式函数，模型还可以通过回归 RGB 信息来对表面的颜色纹理信息进行预测。Method概述给定一个单一视图或者多视图照片，我们的目标是重建出一个具有几何形状和纹理的 3D 人物，并且其保留照片当中尽可能多的细节。隐式函数将曲面定义为函数的水平集 f通过隐式函数，我们虽然不能得到每一个点，但是我们可以很容易的判定一个点和这个曲面的关系。（可以参考这篇文章简单看看），并且这种表示方法对内存非常友好。文章提出的方法包括了一个全卷积的图像编码器 g 和由多层感知机（MLPs）表示的连续隐函数曲面 f。这个曲面可以表示为：对于 3D 点 X 来说，x = π(X) 是其在图像上的投影 ，z(X)是在相机坐标空间中的深度值(通过相机内外参数投影计算得到) ,F (x) = g(I(x))是卷积神经网络 g 提取到的图像 I 在 x 点的特征向量。作者假定相机是一个弱透视相机，在这里，由于 X 的投影的值是连续而非离散的，所以文章通过双线性采样来得到其的值。这么做最终的结果是，我们通过像素级别的信息而不是全局信息在 3D 空间学习了一个隐式函数，这样就保持了图片局部的细节信息。这种方式也具有更高的内存效率，并可以处理任意的拓扑结构。此外,PIFu 可以被转换为一个通用的框架，可以扩展到各种 co-domains ，比如 RGB 颜色。我们不需要更改输入，只需要其中有这样就可以直接预测颜色信息了。整个的网络结构可以用这个图来看单视图重建上面我们已经讨论了隐式函数的意义，在保持高效的内存效率的同时，隐式函数还可以轻易的判断一个点在平面内还是平面外，换句话说，我们已经变相重建出了整个平面。但是由于隐式函数的性质导致，我们并不能直接获得这个平面上的任一点。因此我们定义：当 f(X)=1 的时候，这个点在平面内，反之在平面外。这样当 x=0.5 的时候正好在平面上。为了学习到这个平面，我们通过最小化均方误差来将隐式函数和 ground truth 相接近。在这里，多层感知机和全卷积网络是一同更新的。当这两项学习好了之后，在推理阶段，输入就是一张图片，和对应的相机参数，以及该图片中人体所处的一个大致范围（Bounding Box）对于 Bounding Box，我们可以在三个维度上进行离散化，比如每个维度 512，就可以得到 512×512×512 个点阵，对所有的点输入到函数中，那就可以得到如下图一样的 3D Occupacy 信息，然后跑一遍 Marching Cube 就可以得到物体的模型。 Marching Cube 的方法可以参考这篇文章空间采样在实际训练过程中，这 512 维度的点的选取也有很大的学问，作者发现，如果在图像中进行均匀的随机采样，会导致大部分的点在人物外部，在等值面上的点会很少。而只在等值面上采样又会导致过拟合。这直接影响了人体重建的性能。我们更需要关注的是隐函数所表达的这一曲面（即人体表面）的信息，因此作者在表面点附近加上了一个高斯抖动来采样这些点。通过调参，作者发现等值面附近加上 5cm 的高斯抖动，与均匀采样 16：1 混合 这样可以更好的采到表面的点。纹理颜色推断上面我们已经讨论过颜色的问题，我们并不需要改变输入，只需要将其输出改变即可。那么我们就有这个公式和上述的预测曲面的损失函数差不多。只是换成了 RGB 信息 C。但是这样的预测在实际的颜色预测当中具有严重的过拟合现象。这是因为整个网络即 fc 不只是在预测表面的颜色信息，他还需要去预测看不见的 3D 空间中的纹理信息，这样它才可以推断不同 pose 和不同形状的人体的不可见部分（比如背面顶点）的颜色信息。因此作者做以下改动：基于上一步骤中的到用于重建的深度特征 Fv，将公式改动为：此外，作者依照采样那边的方法，在颜色预测方面也加入了一个随机的偏移，这样就可以预测表面周围的颜色信息，这也是增强对看不见的地方的预测能力。多视图预测在单视图的基础上，模型还提供了多视图的重建方法。更多的视图提供了额外的信息，重建出来的结果也会有更好的结果。总的理念来说，作者就是通过单试图进行了简单的推广。就是将提取到的某个 3D 点的特征进行平均 ，再输入到然后输入到 Pixel-Aligned Implicit Function 网络当中进行预测。总结PIFu 的开山之作，也是将隐函数放到三维人体重建当中的一篇经典文章。全篇文章读下来其所用到的方法都比较流畅，也比较有建设性。但是还是有比较多的限制，比如相机 fov 的参数等对重建的结果影响都比较大。在多视图方面，如果多视图相机的 fov、距离等不同，对重建效果都有很大的影响，这些都是亟待改进的地方。
买了树莓派！不得不感慨树莓派现在都成了理财产品，三四百的东西都上千了，属于是魔幻现实主义了。(让我看看是什么掏空了我的钱包.jpg)买树莓派的初衷是前一阵搭建的私有云已经快被我塞满了，鉴于云服务器昂贵的费用，我还是决定自己把服务搭建在本地。相比于其他解决方案，树莓派的可玩性更高，也方便我后期跑一些其他的服务。这就不得不请教一下各位大大们了，树莓派 4b 的性能到底怎么样啊，目前计划的东西比较多，包括一个博客，一个私有云，一些脚本，MC 服务器（这个我也没抱太大希望就是了）等等，对这块小板子确实没什么信心树莓派的基本配置在网上基本上其实都已经有了详细的介绍，在树莓派的烧录工具里也支持配置 ssh 以及 WiFi 等，因此本文将不再进行赘述。本文默认你已经完成了 Ubuntu 系统的烧录和登录，并拥有一个带有一个公网 IP 的云服务器。（如果有需要的话我也可以另开一个文章写写）frpfrp 的相关文档可以在这里找到。frp 主要由 客户端(frpc) 和 服务端(frps) 组成，服务端通常部署在具有公网 IP 的机器上，客户端通常部署在需要穿透的内网服务所在的机器上。用户通过访问服务端的 frps，由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器，从而实现通信。因此在配置过程当中，一定记得把自己云服务器安全组中对应的端口打开！下载 frp在 github 当中可以下载到目前最新版本的服务端和客户端文件。我这里下载的是 0.45.0。我们通过运行以下命令来直观的查看对应的架构[root@VM-0-7-centos ~]# arch对应的版本为：frpLinux386x86 架构amd6464 位 x86 架构armarm 架构arm6464 位 arm 架构mipsmips 架构mips6464 位 mips 架构mipslemipsle 架构mips64le64 位 miplse 架构因此在树莓派上，我应该使用 arm64 版本，在云服务器上我应该选择 amd64（x86 64 位架构）。解压缩下载的压缩包，将其中的 frpc 拷贝到内网服务所在的机器上，将 frps 拷贝到具有公网 IP 的机器上，放置在任意目录。通过 ssh 访问内网机器frps.ini 配置：[common] bind_port = 7001 #这里我用了7001你可以自己选frpc.ini 配置：[common] server_addr = 你自己云服务器的公网ip server_port = 7001 #这里我用了7001你可以自己选 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000启动 frps 和 frpc./frps -c ./frps.ini ./frpc -c ./frpc.ini一些要注意的坑1.提示没有权限-bash: ./frps: Permission denied可以通过运行以下代码来给对应的文件副赋予权限 （frps 同理）chmod 700 frps2.客户端提示连接不到服务器 connect: no route to host放开你云服务器的对应端口，在本文中，你需要放开对应的 7001 端口（用来与树莓派连接）和 6000 端口（用来让你通过这个端口访问 ssh）你可以在对应的云服务器供应商的控制台里放开响应的安全组。腾讯云的我没折腾明白，因此我用了以下命令来让机器防火墙放开对应端口：firewall-cmd --permanent --add-port=7001/tcp firewall-cmd --permanent --add-port=6000/tcp firewall-cmd --reload至此，ssh 连接已经建立成功，你可以通过访问你公网的 6000 端口来访问内网的机器使用 systemd 控制 frps 及配置开机自启这部分其实在 frp 文档中有详细的介绍，且几乎没有坑。我现在将其重点部分搬过来。要使用 systemd 来控制 frps，需要先安装 systemd，然后在 /etc/systemd/system 目录下创建一个 frps.service 文件。[Unit] # 服务名称，可自定义 Description = frp server After = network.target syslog.target Wants = network.target [Service] Type = simple # 启动frps的命令，需修改为您的frps的安装路径 ExecStart = /path/to/frps -c /path/to/frps.ini [Install] WantedBy = multi-user.target使用 systemd 命令，管理 frps。# 启动frp systemctl start frps # 停止frp systemctl stop frps # 重启frp systemctl restart frps # 查看frp状态 systemctl status frps配置 frps 开机自启。systemctl enable frpsfrpc 同理。后记其实本篇想把迁移私有云服务的部分全部写完的，但想了想这样反而会让文章没有重点，又臭又长（笑）。下一步打算把博客迁移到我的树莓派上，等放假把树莓派扔到家里再进行私有云的完整搭建，毕竟硬盘还没买（笑）
忙完了一段时间，看着自己几乎闲置服务器，遂决定继续利用起来，搭建一个私有云。搭建网盘的主要原因是本人并不喜欢目前国内主流网盘的审查制度，另外由于本人丢三落四的习惯，急需一个完整的文件管理平台来帮助我进行文件的保存和管理以及云同步的功能。目前我使用的服务器是腾讯云 2 核 4G 的 centos7 版本，并使用了 nginx 作为反代，服务器的二级域名及其证书也已经申请好，如果你对申请 ssl 证书还抱有疑问，这篇文章也许可以帮到你[【歪门邪道】重新签发网站 SSL 证书]()。值得一提的是，我的服务器上已经有了 mysql，所以我并没有写安装数据库的步骤。并且我也建议：如果你的电脑已经有了 mysql，尽量不要按照网上的教程安装别的数据库，直接进行安装即可，如果没有也尽量优先安 mysql，你会发现 mysql 在以后的服务器任务中也可以经常用到而不会出现其他问题。添加 epel 仓库有很多软件位于 EPEL 仓库中, 而默认情况下安装的 CentOS 中没有该仓库, 因此需要自己手动添加.$ sudo yum -y install epel-release添加 Webtatic 仓库php7-fpm 依赖需要这个仓库rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm安装配置 PHP7-FPM执行以下命令:$ sudo yum -y install php70w-fpm php70w-cli php70w-gd php70w-mcrypt php70w-mysql php70w-pear php7安装完以后可以使用 php -v 来检查下是否正常安装接下来开始配置 PHP7-FPM$ sudo vi /etc/php-fpm.d/www.conf确保以下内容的存在：; RPM: apache Choosed to be able to access some dir as httpd user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx ; Note: This value is mandatory. listen = 127.0.0.1:9000 ; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from ; the current environment. ; Default Value: clean env env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp上面的语句简单来说就是把 PHP7-FPM 和 nginx 相关联在 /var/lib/ 目录下新建文件夹 session, 拥有者改为 ngnix$ mkdir -p /var/lib/php/session $ chown nginx:nginx -R /var/lib/php/session/启动 PHP-FPM 和 Nginx，并设置为随开机启动服务$ sudo systemctl start php-fpm $ sudo systemctl start nginx $ sudo systemctl enable php-fpm $ sudo systemctl enable nginxNextCloud 下载安装 wget 与 unzip$ yum -y install wget unzip下载与验证 NextCloud$ cd ~/ $ wget https://download.nextcloud.com/server/releases/nextcloud-14.0.4.zip $ wget https://download.nextcloud.com/server/releases/nextcloud-14.0.4.zip.sha256 $ sha256sum -c nextcloud-14.0.4.zip.sha256 < nextcloud-14.0.4.zip解压并将 NextCloud 剪切到 /usr/share/nginx/html/ 目录下$ unzip nextcloud-14.0.4.zip $ sudo cp -R nextcloud/ /usr/share/nginx/html/新建 data 文件夹, 并变更 nextcloud 所有者为 nginx$ cd /usr/share/nginx/html/ $ sudo mkdir -p nextcloud/data/ $ chown nginx:nginx -R nextcloud/配置 NextCloud配置主要是配置 nginx 的反向代理了，这里我申请了一个二级域名，conf 文件示例如下：server { listen 80; listen [::]:80; server_name cloud.slagworld.com; # enforce https return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name cloud.slagworld.com; # Use Mozilla's guidelines for SSL/TLS settings # https://mozilla.github.io/server-side-tls/ssl-config-generator/ # NOTE: some settings below might be redundant ssl_certificate 你的pem证书 ssl_certificate_key 你的key证书 ssl_session_timeout 5m; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; # Add headers to serve security related headers # Before enabling Strict-Transport-Security headers please read into this # topic first. # add_header Strict-Transport-Security "max-age=15768000; # includeSubDomains; preload;"; # # WARNING: Only add the preload option once you read about # the consequences in https://hstspreload.org/. This option # will add the domain to a hardcoded list that is shipped # in all major browsers and getting removed from this list # could take several months. add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; add_header Referrer-Policy no-referrer; # Remove X-Powered-By, which is an information leak fastcgi_hide_header X-Powered-By; # Path to the root of your installation root /var/www/nextcloud/; location = /robots.txt { allow all; log_not_found off; access_log off; } # The following 2 rules are only needed for the user_webfinger app. # Uncomment it if you're planning to use this app. #rewrite ^/.well-known/host-meta /public.php?service=host-meta last; #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json # last; location = /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; } location = /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; } # set max upload size client_max_body_size 512M; fastcgi_buffers 64 4K; # Enable gzip but do not remove ETag headers gzip on; gzip_vary on; gzip_comp_level 4; gzip_min_length 256; gzip_proxied expired no-cache no-store private no_last_modified no_etag auth; gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; # Uncomment if your server is build with the ngx_pagespeed module # This module is currently not supported. #pagespeed off; location / { rewrite ^ /index.php$request_uri; } location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { deny all; } location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { deny all; } location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; #Avoid sending the security headers twice fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass php-handler; fastcgi_intercept_errors on; fastcgi_request_buffering off; } location ~ ^/(?:updater|ocs-provider)(?:$|/) { try_files $uri/ =404; index index.php; } # Adding the cache control header for js and css files # Make sure it is BELOW the PHP block location ~ \.(?:css|js|woff2?|svg|gif)$ { try_files $uri /index.php$request_uri; add_header Cache-Control "public, max-age=15778463"; # Add headers to serve security related headers (It is intended to # have those duplicated to the ones above) # Before enabling Strict-Transport-Security headers please read into # this topic first. # add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; # # WARNING: Only add the preload option once you read about # the consequences in https://hstspreload.org/. This option # will add the domain to a hardcoded list that is shipped # in all major browsers and getting removed from this list # could take several months. add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; add_header Referrer-Policy no-referrer; # Optional: Don't log access to assets access_log off; } location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ { try_files $uri /index.php$request_uri; # Optional: Don't log access to other assets access_log off; } }至此配置完成，剩下的网上的教程应该很全面了
断断续续学了好几年的吉他了，深感自己理论知识的不足，特此开一个专栏，整理一下各种乐理知识，方便日后的整理复习。乐音初中物理就学过，人耳的可以接收到的声音在 20hz 到 20000hz 之间。而通过声音使人产生情绪变化的范围则为 20 到 7000hz 之间。这就是乐音的范围。常用的乐音范围则更小，大约在 27 到 4100hz 之间。正是这些声音构成了我们的音乐。音乐中所用到的声音，根据震动规律可以分为乐音和噪音两种。震动规则、高低明确的音叫做乐音。例如钢琴上每个键的震动规律都是有规律的。举个例子：钢琴中部分音组中 c 音的震动频率为：当然，与乐音相反的还有噪音。其通常利用其独特的音色来体现音乐的色彩和节奏。常见的噪音型乐器有锣鼓等等。作为音乐的补充，噪音也是音乐中不可缺少的一部分。乐音体系我们已经知道了乐音的范围为 27 到 4100hz 之间。在这个范围内全部有固定音高的音的组合称为“乐音体系”。在乐音体系当中，人耳能清楚分辨的音高的最小单位为“半音”。两个半音又构成了一个“全音”。在乐器当中，钢琴就包含了全体乐音。其由黑白两色琴键构成，相邻的两个琴键（含黑键）构成了半音，隔开一个琴键构成了一个全音。标准的钢琴拥有 88 个琴键，其音域为最低频 A2（27.5000hz）到最高音 C5（4186.0076hz），涵盖了整个音乐体系。换句话说，整个音乐体系就是由这 88 个音构成的。当然随着电子乐器的出现，乐音体系相对向高低两个方向都有不同程度的延伸，但依旧以这 88 个音为主题。音名和唱名乐音体系中有 88 个音，但是他们始终高低重复着 7 个基本音（本位音）其他各音都是由这七个音变化而来。七个本位音都有其各自的名称（音名），用大写或小写的 C、D、E、F、G、A、B 表示。当以 C 大调演唱这七个音的时候，就构成了我们平时所说的 Do、Re、Mi、Fa、Sol、La、Si。这是他们各自的唱名。音组88 个音其实实际上只是这七个音的组合，只是音高不同。因此出现了许多音名相同但音高不同的“同名音”。为了区别这些同名音，我们将不同的音以七个为一组，称之为音组。用一张图片可以很容易的看出他们命名规则。十二平均律和全音、半音、变音记号、等音在乐音体系当中，各音的绝对准确音高及其相互之间高低的关系称之为“律制”。目前使用最广泛的便是十二平均律了。十二平均律规定如下：将一个八度（两个同音名之间的距离称之为八度）平均分成了十二个均等的音，每一个这样的最小单位称之为半音，两个半音称之为全音。我们可以很明显的看出来，如果每一个音之间都是一个全音，那么八度中间应该有 14 个半音而非十二个。显然，有些音之间的距离是一个半音。在这里我们给出了十二平均律的内容。我们可以看到 C 之间的音的各个音之间的距离。可以看到，E F 之间是一个半音，B C 之间是一个半音，其他都为全音。那么这个时候就有朋友要问了，同学同学，除了基础的音符号以外，我还看到了一些奇怪了符号，那些是什么呢？这些就是升音和降音了。当基本音升高半音时，我们称之为升音，用#标记，当基本音降低半音时，我们称之为降音，用 b 标记。如果两个符号相隔一个全音，那么下一个的升音就是上一个的降音，即两个符号为等音。后记最近被学业紧张的要死，感觉每天事情都弄不完，但我觉得越是这种生活，就应该给自己增添一点乐趣，因此我就花了一晚上加一上午的时间将这些乐理中最最最基础的东西整理了出来。在以后的日子里，我会将这个栏目继续写下去，继续写一些更加专业、更加重要的内容，敬请期待吧（笑）。