Recent Posts

Horo's avatar

如何可能正确的以大部分人可能会接受的方式提出电脑相关的问题

汝问咱为啥标题起得这么长,那是因为咱不敢保证所有的人都乐于接受这种提问方法啊……

以及似乎能衍生到其它领域?那就靠汝自己斟酌了。

本文参考了下面几篇文章的观点,某些文章可能正在经常的被提起。

  • 提问的智慧,原文作者 Eric S. Raymond,以开放源代码运动(不是自由软件运动,这个的领导者是 Richard Stallman)的提出者和主要领导者为人所知的黑客。本指南将教你如何正确的提问以获得你满意的答案。
  • 如何有效的报告 Bug,以程序员的视角阐述如何提交一份足够准确的 Bug 报告
  • X-Y 问题,一种常见的令人疑惑的提问方式,至于为啥令人疑惑嘛……
  • 真的,再这样提问就没人理你了,以提问的智慧的方法提出不一定是电脑相关的问题的方法,大概吧。

提问真的有那么多讲究的地方嘛?

大多数时候如此,因为有一个大前提:

“我们(在很大程度上)是自愿的,从繁忙的生活中抽出时间来解答疑惑,而且时常被提问淹没。所以我们无情的滤掉一些话题,特别是拋弃那些看起来像失败者的家伙,以便更高效的利用时间来回答赢家(winner)的问题。”

大多数人其实都是出于各种志愿目的回答来自不知道何处的提问的,除非……(“我本来想这样拒绝他的,但是他给的钱实在是太多了……”)

所以 …

Jixun's avatar

血污:夜之仪式 – 7 项修改器

测试于 GOG 的 Patch 1.10 (2020.05.07) 版本,Steam 版本可能不支援。在 GO… 阅读更多 »血污:夜之仪式 – 7 项修改器

血污:夜之仪式 – 7 项修改器最先出现在Jixun 项目集

's avatar

为什么大家都在安利这一样东西?

大概无数次我在各大群组里(看见别人)求某种东西的推荐,然后群友们就异口同声的说:「XXX(指同一件东西)不香吗?」

但是这样的安利反而让我感觉不安,因为:

  • 一种东西肯定有它自己的优缺点,但是在那些群友的口中,给人一种 XXX 非常完美的错觉。
    真的,跑分不能说明一切。
  • 安利这种东西的群友中,大概率有相当一部分是它的 fanboy,然后如果你提出不太一样的安利,大概会跟你争个面红耳赤,甚至引起严重的不愉快。
    好吧,我大概是已经屈服于这种「政治正确」了。
  • 有的群友可能只是云用户,在瞎起哄而已。

所以为什么通常情况下,我越来越不想在群聊中为这种事情浪费时间了。我宁可自己问问 Google 娘。

's avatar

Dream Diary - 7,8

#2019

她站在跑道上,望着晚霞点缀着的海面。

我远远地望着她,揣摩着。她到底在看些什么,又在想些什么呢。是把海面看作是浩渺的宇宙,粼粼的波光当作是将抵的舰队?抑或是遥望海的另一端的本土,思念着许久不见的家人……和恋人呢?

再次遇到她,是在来到这艘航母之后的事了。当然我没有大模大样地问她在来这之前是否有恋人,以免打草惊蛇。不过就我的推断,开朗积极如她,赢得一段感情应当是不在话下。

一阵晚风袭来,我不禁打了个寒颤。她不冷么。不过即便如此,她依旧一动不动地站在那里,但不知为何,看起来更加遥远了。

这次,我没有跟她说上话。

2018年,未知外星文明入侵。

2020年,人类灭绝。

#2010

星期六的下午。

老实说,我不是那么讨厌学习,但是我也不是那么喜欢课外班。考试本应该是比较受到同等教育的学生的学习成果的行为,课外班、补习班的存在打破了这一平衡,也打破了学生们投入到素质教育的时间的上限。通过放假时间上课来获取更加优秀的成绩,我认为这是一种恶性竞争。

好事是这种恶性竞争几年后就会被明令禁止。我不禁嫉妒起未来的小弟弟小妹妹们,他们可以傻乎乎地在这烈日之下自由地奔跑嬉戏、中暑晕倒。我摇了摇头,摆脱开这一想法。

10 年后的日子像鬼魂一样,曾时不时在我眼前出现。那段时间,我感觉自己像失去了灵魂的躯壳一样,浑浑噩噩,终日不知所措。对未来一无所知的人们反而成了我羡慕的对象。那种感觉过了一个月才渐渐消退。不如说,我学会了转移焦点。取而代之的是及时行乐的想法,与其忧虑注定到来的末日,还不如珍惜当下,多享受一番。

按照这个逻辑,我现在应该是在室内一边吹着空调,一边打着游戏的。我之所以冒着烈日来参加这个课外班,一个原因是家里没有游戏可以打,另一个原因则是这里有她在。

她——连雪是我的小学同学。她平易近人,虽然有点别扭,容貌——按照小学生的标准——算是不错的,而且成绩向来优秀。在除了成绩,就几乎没有什么好比的小学生眼里,她自然而然就成为了憧憬的对象,还是个小屁孩的我当然也包括在内。我的成绩?现在的话,算是不错啦。

闲话休提。可能是觉得难以接近的原因吧,虽然是同学,小时候的我却没怎么和她有过交集。对此我有那么一丁点,那么一丁点后悔:跟她的关系要是再好一点,就好了。不过对于过去的自己而言只可远观的她,对于现在的我来说,是不是就是容易接近的对象了呢?抱着这样的希望,我想着至少圆一下过去的遗憾,就这样来到了课外班所在的大楼。

这是一栋写字楼,接待处的大姐姐看到我脖子上挂着的名牌,便没有说什么。教室在6楼——我走进电梯,按下按钮。当门将要关闭的时候,我看到另外一个挂着名牌的身影正向电梯这里跑来。是她。我的心跳快了一拍,连忙按下开门按钮。她跑了进来,看到了我,便转向了电梯门,没有说话——。我从面板处退了一步,留出空间。巧也不巧,一个男人在电梯门再次关上之前,也跟了进来。男人按了5楼。

我瞥了她一眼,她像是在沉思,没有注意到我。5楼到了,男人走了出去,她突然也跟着走了出去。我叫住了她。“教室在6楼!”并按住开门键。她张望了一圈,听到我出声喊她,又走了回来。电梯门关上了。“走神了。”她小声说了一句。然后就没有再说话了,像是一副不高兴的样子,可能是因为出丑的缘故吧。


下课后。看着一个人收拾书包的她,我不知从哪里涌上了勇气。我追上了她,问道,“一起回去吗?”

毕竟有一段是顺路,我心里在给自己找借口。

她瞅了我一眼。“随便。”漫不经心地回答道。

我们走在大楼和行道树的阴影之间。热气让我呼吸困难,知了在汽车的呼啸声中肆意聒噪。我莫名地想吃冰淇淋。香草味的大杯装。

“好热啊。”我像是在对自己说。她没有回应,像不觉得热似的。

一个拐弯之后,是一个长长的下坡。路面被太阳晒得发热,路两边稀疏地种着树, 在人行道上洒下零零落落的树荫。路上人影稀疏, 偶有汽车经过。我们一边聊着关于课外班的话题一边下坡。

下了坡,穿过一个小公园。公园里没有人。小公园没有滑梯和秋千,不过有一个沙坑。一座城堡矗立在那里。我下意识地走到沙城堡前。我突然有一种奇怪的感觉:这个沙堡将要融化,像初春的雪一样,变回沙子,落进池里。魔法的时间就要结束了。

连雪走在前面, 我跟在后面。快到她家门口的时候,她停下脚步,转过身来。

“今天过得很愉快。”她说道,脸上露出笑容。不像是平常的她的笑容。

“我也——”

钝器打击的声音。

我的意识就此中断。

17windy's avatar

[8月16日更新P2]17Windy的七日杀A19原创MOD-[近战包]+[远程包] 稳定版

注意:不要光看数值面板,很多武器都有很多数据显示不正确或者没有显示,看小书图标的文本说明!!!

偃月刀用捅的我也觉得很难受,不过七日杀官方就这么几个双手动作,其他的都是砍到1/3就停了,所以用捅的还能稍微好看点,多理解。

更新细节日志:

0816P2 远程包增加了特殊射钉枪:英特纳雄耐尔,特点是手持的时候制作品质+1,单次射击爆发10发铁钉,可通过工作台制造或者高级任务奖励小几率得到;增加了普通版MP7、M9A1的工作台制造配方。

0816 近战包部分属性优化,较为重要的有:太阳舞者不再造成长时间单体火焰伤害,而是有小几率造成群体短时间较高火焰伤害;铁狐现在的火焰伤害强化了;两把智力系近战武器调低了特效触发几率,增加了基础伤害。

0816 远程包部分属性优化,较为重要的有:安迪密恩现在不再造成单体电击伤害,而是有几率造成小范围群体电击;风之力提升了伤害和弹速。

0816 部分汉化文本修改,本次更新仅有xml修改。

0814 修复了拳套武器位置错误的问题(此处实名diss七日杀开发组)

0814 平衡和调整了部分进展/远程武器,让不同武器的差异性变大

0814 完善了部分武器的性能文本说明

0808 近战包新增肉斩骨断(力量+2)、绿色奇迹(对僵尸特攻)、青龙偃月(高截肢)、重生之刃(高潜行倍率)四把近战武器,重制了最后的武士和黑降两把武器的造型

0806 11:00 修复风之力箭矢位置问题@yichen手动狗头

0806 远程包新增 MP7、纯白仓萌、风之力三把远程武器

0806 近战包刀刃类部分武器属性buff

0801 远程包新增一把.44手枪、一把无限弹药的智力系步枪

0801 近战包新增长矛纳迦法、双手锤塔、单手剑永恒魔埚

0729 远程包新增两把霰弹枪:长射程的羞辱(游戏内显示射程不对,实际15)、基地保卫战决战兵器台风排笛(大幅度降低移动速度和体力、增强防御力)

0729 远程包修复几把特殊弹药武器的伤害值过低问题

0729 远程包武器属性调整

0726 近战包数据微调,远程包更新完成

0725 近战包更新完成

's avatar

明天再和朋友相见

读着视觉小说1,是三位高中生一起在社团活动后的傍晚互相道别的场景。其中一人向另外两人开心地说道:“那么明天再和两位相见喔!”然后跑跳着离开了。

刚刚还在吵吵闹闹的场景,在一人离开之后一下子就安静了下来。看着屏幕上笼罩着夜色的背景,正在带入着主角思考的黄鼠,一瞬间感到了一丝孤独。尽管刚刚还在很开心,但不可避免地,一天马上就要结束了,大家都需要各自分道回家了。有趣的活动到现在已经停止,而朋友们也会是在接下来的一段时间里见不到的了。

但黄鼠在下一刻就意识到这是不需要过度感伤的,因为我们还有明天,我们在明天、十几个小时之后就会马上再见了。刚刚也是这样说的,“明天再和两位相见”,不是吗?这不是长时间的道别,所以黄鼠的孤独感转变成了期待——好期待明天的到来呀。只要熬过今晚的几个小时,再睡一觉,在明天就又可以很快和朋友相见,产生更多有趣的经历了。

不过很遗憾的是,这一切都只是在小说里发生的,黄鼠的上述的感受也只是针对那个虚构的故事的。而在现实中,除去有期待少有的特别活动(像是旅行计划)的到来外,似乎已经忘记自己上一次这样期待第二天的日常的到来是什么时候的事情了。

黄鼠印象中的校园日常,几乎就是充满了缺乏活力的轮回。每天早上起来,急急忙忙度过早晨,就开始了不一定很无聊,但大都很累人的课。结束了之后,回到家才可以放松一会,但也不能放松很长时间,因为马上父母就要回来监督自己完成作业了。每一天的自己,整天几乎全部的期待,都放在了放学回家后到父母回家前的那段“自由时间”里,似乎每天都是为那一小段时间而活。在这段时间结束后,下一次能够留给自己的时间就只有完成作业后(或放弃了完成作业后)躺在床上的时间了。而再往后,就又得挨过一整天的学校才能再次享用这份安逸了。

黄鼠不是在学校中没有能够愉快玩耍的朋友,但与朋友的交往,却很少能够像这次在小说中感到的那样,抵消上学的劳累,令黄鼠充满对明天的期待。

现实中的黄鼠,劳累于上学而期待在家的时间,而这段视觉小说中的小小对话,却把两者完全反转过来,开始期待与在学校的朋友们相见,而对在家的时间反而感到孤独了。

不过这只是视觉小说,黄鼠不是主角。而站在读者的角度的话,黄鼠只能对这样的日常表示羡慕了。能够有对每天怀有这样愉快的期待,真好呀。

黄鼠回不到像高中那样的校园生活了,因为在现实中只能向前看。在未来,即使能够找到工作而不是饿死或啃老,所面对的也大概只能是比校园更加乏味且劳累的社畜生活——实习的经历让黄鼠意识到了这一点。每天回家后几乎就像被抽干了体力一样,除了生活必要的事情(像是做饭),唯一想做的事情就是躺在床上耍废,看一些没有营养的 YouTube 视频,刷一些更缺少营养的社交媒体。游戏——甚至是相对低投入的手机游戏——都很少有心思去玩。写兴趣项目和学习更多知识的动力什么的,就更加被鸽子叼走了。在这样的日常中,每天值得期待的东西,就比学生日常更加稀少了。

黄鼠就经常这样想,做社畜的日常好辛苦呀好累呀好可怕呀。所以在读视觉小说时产生了“对明天日常的期待”的心情时,真是被自己惊讶到了呢。原来自己也可以对日常感到开心和期待。但可惜只是针对在小说中存在的虚构日常。

黄鼠看到这么一小段对话,就写了这么一长篇文章,诚实说,也是令自己觉得蛮惊讶的。不过在写完之后,黄鼠并没有什么深的感悟。要说整片文章有一个什么中心结论的话,那就是——二次元真好呀。

  1. 尽管这并不重要,但如果在好奇的话,黄鼠在读的视觉小说是《魔女的夜宴》。但请不要把这当作是黄鼠的推荐。故事的主要内容并没有和黄鼠在这篇文章中的感悟有很大联系。 


除特殊说明外,本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。转载时请注明来自 FiveYellowMice's Blog ,以及原文链接

虽然 RSS 是一种很好的新闻获取方式,但是不同的 RSS 阅读器所显示的内容可能会有很大差距,有些甚至无法显示所有内容。所以为了能够获取到完整的内容,最好还是点开网页链接看。
之所以还是保留了 RSS 的全文输出,是因为摘要输出会被很多人讨厌……

violet's avatar

Leetcode - Remove Duplicates from Sorted List II

https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

Return the linked list sorted as well.

Example 1:

Input: 1->2->3->3->4->4->5
Output: 1->2->5

Example 2:

Input: 1->1->1->2->3
Output: 2->3

 

's avatar

Reality can never imprison Dreams — Tetra World Adventure

Tetra World Adventure is a puzzle game by Bloom Mushroom. Recently an enhanced version of it made its way to Nintendo Switch, but the mobile version has been around, free of charge. Since the Switch version is only available in Japanese store, I played the iOS version instead. It’s not that I don’t have the money to buy it. No. Not even close. I want to emphasize it is not the case.

It’s a short puzzle game with moderate difficulty. I’m no expert in puzzle games, and without hints this game took me 2 hours to beat. If you are looking for a nice and relaxing otherworldly adventure, feel free to pick up this game. For free.

violet's avatar

Leetcode - Plus One Linked List

https://leetcode.com/problems/plus-one-linked-list/

Given a non-negative integer represented as non-empty a singly linked list of digits, plus one to the integer.

You may assume the integer do not contain any leading zero, except the number 0 itself.

The digits are stored such that the most significant digit is at the head of the list.

Example :

Input: [1,2,3]
Output: [1,2,4]

 

violet's avatar

Go Routine Practice - tcp server&client

 

violet's avatar

Go Channel Practice V - 祖安萝莉

idea 来自 https://www.zhihu.com/question/402635037/answer/1302122540

逻辑没有照抄,只是做 channel 使用方法练习。

 

violet's avatar

Leetcode - Task Scheduler

https://leetcode.com/problems/task-scheduler/

You are given a char array representing tasks CPU need to do. It contains capital letters A to Z where each letter represents a different task. Tasks could be done without the original order of the array. Each task is done in one unit of time. For each unit of time, the CPU could complete either one task or just be idle.

However, there is a non-negative integer n that represents the cooldown period between two same tasks (the same letter in the array), that is that there must be at least n units of time between any two same tasks.

You need to return the least number of units of times that the CPU will take to finish all the given tasks.

 

Example 1:

Input: tasks = ["A","A","A","B","B","B"], n = 2
Output: 8
Explanation: 
A -> B -> idle -> A -> B -> idle -> A -> B
There is at least 2 units of time between any two same tasks.

Example 2:

Input: tasks = ["A","A","A","B","B","B"], n = 0
Output: 6
Explanation: On this case any permutation of size 6 would work since n = 0.
["A","A","A","B","B","B"]
["A","B","A","B","A","B"]
["B","B","B","A","A","A"]
...
And so on.

Example 3:

Input: tasks = ["A","A","A","A","A","A","B","C","D","E","F","G"], n = 2
Output: 16
Explanation: 
One possible solution is
A -> B -> C -> A -> D -> E -> A -> F -> G -> A -> idle -> idle -> A -> idle -> idle -> A

 

Constraints:

  • The number of tasks is in the range [1, 10000].
  • The integer n is in the range [0, 100].

 

violet's avatar

C memory layout

High Addresses ---> .----------------------.
                    |      Environment     |
                    |----------------------|
                    |                      |   Functions and variable are declared
                    |         STACK        |   on the stack.
base pointer ->     | - - - - - - - - - - -|
                    |           |          |
                    |           v          |
                    :                      :
                    .                      .   The stack grows down into unused space
                    .         Empty        .   while the heap grows up. 
                    .                      .
                    .                      .   (other memory maps do occur here, such 
                    .                      .    as dynamic libraries, and different memory
                    :                      :    allocate)
                    |           ^          |
                    |           |          |
 brk point ->       | - - - - - - - - - - -|   Dynamic memory is declared on the heap
                    |          HEAP        |
                    |                      |
                    |----------------------|
                    |          BSS         |   Uninitialized data (BSS)
                    |----------------------|   
                    |          Data        |   Initialized data (DS)
                    |----------------------|
                    |          Text        |   Binary code
Low Addresses ----> '----------------------'
Fenking's avatar

杂谈

在今天提交完最后一门课计组的report之后,我似乎意识到这是我自从大学以来第一个看上去可以无所事事的暑假。其实大概也不能,但是交完report,与学校暂时无瓜葛之后,涌上心头的第一感觉确实疲惫,困乏,无聊,无奈。这是今年在日本第二个什么都干不了的假期。距离上一次写博客时隔两年了。我也说不清为什么不写博客,似乎人在日本,就慢慢身心都远离了我所熟悉的事物,慢慢就变得蹒跚了起来。

作为杂谈,简单聊聊最近几年在干什么吧。
上一次博文是在2018年暑假,那就从2018暑假左右开始谈起。
2018年4月,高考失败后去日本再战。
2018年暑假,在国内复习与准备各种大学面试笔试。
2018年9月-2019年3月:我的住址从东京墨田区两国搬到东京墨田区向岛,再到千叶船桥市东船桥。
第二次留考仿佛高考的复写,考的稀烂,一塌糊涂,我靠着前期合格的立命馆大学一路冲刺其他学校,可惜全败。最后在4月开学前做了一趟全国环游,拜访了不少同学,但同时大概也是我最后一次和同学近距离相处。
2019年4月-2019年8月,在立命馆的第一个学期,仿佛被丢进大山里的城市人,手无寸铁,好不适应。为了提前解决这种问题,去考摩托驾照。
2019年9月提前回到日本,想着要早一秒拿到驾照。最后10月拿到了,这一年的浪人计划(重考)也开始了。10月开始的后半学期我没报太多课,空出来很多时间去继续战留考,战校内考。这次的留考拿到了凑合的成绩,后期的校内考充斥了整个假期,只得在元旦匆匆回国安稳一周。虽然在国内也是每天泡图书馆。现在我怎么也想不到,如果元旦不回国,我甚至会被困在日本一年以上。
2020寒假。一直埋在家里复习。碍于疫情,1月开始就在日本自我隔离,除了2月底出门在本周岛东西横断三次连续4天疯狂校内考以及零碎不连着的其他校内考,以及三月中旬骑摩托环琵琶湖一圈以外。没离开过南草津一步。
网课大二如期而至。每周12篇report冲破了最后的心理防线,半年以上和两个以下的人现实性往来,本质上被国内几乎所有过去的人遗忘,逐渐变成了连说话都会觉得奇怪的家伙。今天貌似又一次放假了。按理说今年不能再浪学校,却是要准备大三编入转学考试的,9月的托业还在等待我,但我貌似已经没有精力去做。未来去哪里读研?如何快速回国?貌似都是想不明白的问题。

放假即破灭。
没想到所谓放假的第一天,就发现老本行被掀锅,过去所想价值瞬间不存在了。
恍恍惚惚撞到一个介绍国内东方社群/同人圈的b站专栏,内容之详细,以至于和我多年慢慢积累的大量早期国内东方资料基本重合类似,甚至追加了渔场之前漂亮同人堂的内容–这部分对我而言一直是可有可无,本身算不上东方圈的开始的。但它积攒的却是鱼总Fish的思念,以及更早一批人的本心–其实也对我不是特别重要的部分,因为从渔场跟随到漂亮,最终会扯到kid–这之后还会牵扯更多同人团体,而我只对东方感兴趣。
文章本身几乎无可挑剔,国内东方社群历史本身了解的途径就很窄,一旦找到了就只有那一条路–大部分人可能都是从同一个地方出发,最后达到同一个目标,仿佛可以穿越回过去的历史,一笔一划写的清楚,容不下其他言语。虽然其中有些部分是怎么找到的,我也一直抱有迷惑,但文章本身其实是无所谓的。令人灰心的,是他的个人网站。
和很多之前认识的同龄人类似,这也是个年龄相仿的神童,一个早早就在互联网上可以留下自己一笔的人物,以至于他们的丰富,导致他们对丰富的否定。网站上写道,文章的决定是十分坎坷的,但它的过程,确实一气呵成的,平均一周一篇。我不清楚我之外的人对东方同人了解甚多甚少,不知道他们是否有高强的起点,至少我得到很多消息,除了通过那条固定的渠线,还有很多迷津小路,但大概都是被在一周之内完成了。
心态恢复平静,继续看对方的网站上的文章。
东方在对于国内东方社群,或者就是东方同人社群,大概就是爱好者从深受影响而同人创作,进而走进专业化,原创化,最后创造新的project,成为领域的或东或西某一角。不论是从同人音乐走向专业电音领域的haku,还是从同人画手走向制作人,新的project人的海猫氢弹库,更或者早已在各个领域扎根的各路神仙,国内的东方社群虽然早就断代了,在渔场死后,在小镇死后,但是某些时代的终点就是某些时代的起点,宛如一所大学,终将毕业之人最后携手或者不约而同成立新的时代,逝去的中国东方同人史一直在诉说这一轮回,不同于贴吧开始的新东方社群。这些话在多年前就深根蒂固于心,乃至一直是我作为东方同人史爱好者砥砺前行的唯一动力–回到过去,追忆过去,透彻过去,【历史可以被遗忘,但不能被遗失。】【中国东方同人史就是从引导一拨人,从同人走向专业,走向毕业,走向新的project。】没有被展示出来的后句,我甚至不敢在任何地方明示。不过同样的话已经被说过了,现在再高呼出来,也不过是巧妙的蹭罢了。就像看到论文出版而痛悔不已的科学家,自己做过的一切仿佛都是尘埃,自己接下来做的一切仿佛都是追随。我曾在好几年前就对【想法】的保护烦恼许久–世界的残酷容不下共同的荣誉,时间的存在更是让每个随着时间跳动的生命对它致以崇高的敬意,先与后是绝对的,不容打破,不能打破,只能在懊悔中为自己感到羞愧。然而像这样写文章去发泄自己,终究不过是在暗地里为自己的嫉妒发生,往如在病床上看着电视里的范马父子,大喊【这我也做得到呀!】的杰克范马一样。
终究还是早了半年。而这半年是我没有接触它的半年,这半年的结束也一如平常,在现在结束的一瞬间,它就追上了你。
从今往后,我似乎也失去了在这一领域探索的义务,失去了一切的动力。自讨苦吃,接下来的每一步看似在证明,其实在挽救,在诡辩,在狡辩。
暂时确实不知道该怎么做。
看着对方的文章,感觉自己也是这么想的,但为什么你会说出来而我没有找到说出来的机会。但仔细想想自己仿佛又不是这样想的,对自己的本心产生了疑惑,一篇文章竟让我如此动摇。仿佛中国东方同人史的研究,早已成为自己最后的遮羞布,需要完成的却没有完成。
仔细想想所处的环境,说不定环境确实早就了这样的我–缺少交流,缺少实感,往如在新东方上培训课的竞职者,失去了所有爱好的土壤。
仿佛一直在说日本是宅的圣地,也是东方爱好者的圣地,是东方的土壤。我为何对这片土地毫无发觉,毫无触觉呢?盈月纪年和境界生命物语在交付完成到zun先生手上的那一瞬间开始,对我而言zun先生不过是zun而已,在我心中它仿佛不会对我而言所爱着的东方产生任何价值,其实自己爱着的东方也并不一定是zun先生自己创造的价值。时代,人群,年岁,机遇,信息,身份,是多元的遭遇创造了早期的中国东方同人圈(社群),而又是这多元的每一层每一丝的紊乱错综,一步步让它走向自我灭亡。我总会在最后发现我到底想说什么。我不想谈东方爱好者,但我必须谈。那个时代的东方爱好者可能并不存在什么转型,他不论之后去做什么,不做什么,他都永远剥不掉身上【早期东方同人圈一员】这样的标签,这个标签也在无时无刻不影响这个人。也许算一种“因果”,但我希望这层神秘的面纱不会脱落。

我不想当追随者,但也不得不当。
2020.7.23

violet's avatar

Leetcode - Top K Frequent Elements

https://leetcode.com/problems/top-k-frequent-elements/

Given a non-empty array of integers, return the k most frequent elements.

Example 1:

Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]

Example 2:

Input: nums = [1], k = 1
Output: [1]

 

依云's avatar

Linux 的环境变量怎么设

本文来自依云's Blog,转载请注明。

最近,Arch Linux 的 pam 包将更新到 1.4.0,然后因为一个字符的变化,不少中文用户都开始避难了:pam_env 将默认不读取用户的环境变量设置。许多中文用户使用~/.pam_environment文件来配置 fcitx 输入法所需要的那三个环境变量。更新之后,这些配置将不再生效,意味着他们可能无法输入中文了,于是大家热烈讨论现在要在哪里配置环境变量比较好。

当然了,在 pam 的配置文件里加上user_readenv=1就可以恢复原先的行为。只是,pam 的开发者这么改当然是有原因的:CVE-2010-4708。简单地说,就是在鉴权模块里设置用户指定的环境变量不安全,怕被提权。

2020年08月20日更新:Arch Linux 打包时添加了以上这个配置

当然啦,桌面用户完全可以去改系统级的环境变量设置,只要你愿意让你个人的配置信息跑到系统配置那边去的话。

正文

用户经常需要设置一些环境变量,比如输入法,比如语言和地区选项,比如自定义的 PATH,等等。然而 Linux 的环境变量又不像 Windows 那样有一个专门设置所谓「系统环境变量」的地方,而是所有环境变量全部由子进程继承父进程获得,这么一路继承下来的。于是,想要给所有想设置上的进程都设置上,就不是一件简单的事情了。

这里关注的是桌面用户,自然首先从图形界面说起。

使用 X11 的桌面环境,通常通过 display manager 来登录,比如 lightdm 和 sddm。这俩都支持 ~/.xprofile。这个文件会在启动过程中被 source,使用的 shell 是由 dm 自己确定的。lightdm 和 sddm 都是用的 /bin/sh(分别位于 /etc/lightdm/Xsession 和 /usr/share/sddm/scripts/Xsession 文件里)。可以看到,除了读取 .xprofile 外,lightdm 也会读取 .profile。sddm 甚至连 bash、zsh、tcsh、fish 的启动配置脚本都给读了。

对于 Wayland,我这儿只有 sddm,类似的,也是各种 shell 的都给你读了。(当然就不读 X11 相关的东西了。)

而对于手动 startx 的用户,~/.xinitrc 里自己写上呗。还有 VNC 啥的,也都可以自己看启动脚本找到方法。

没有图形界面的登录,通常是从 tty 或者 ssh 登录。这两者都是登录到命令行 shell。写在 shell 配置里就可以了。具体到 zsh,我是写到 ~/.zprofile,这样不管是否交互,只要是登录 shell 就执行,不登录的大概已经继承到了。另外有些情况可能写这儿也没有用,比如 cron 调用的时候。非要搞的话其实可以写到 ~/.zshenv,这个基本上所有的 zsh 都会读,只能被系统级设置或者命令行参数禁用掉。而如果是 bash 用户,.bash_profile .bash_login .profile 这仨,会读找到的第一个(sddm 也会按这个顺序找,但是 lightdm 只会找 .profile)。Arch Linux 现在默认会给新用户建立 .bash_profile,我建议 bash 用户把它改名成 .profile。这里有个图 ,大致上说明了 bash 和 zsh 不同情况下会读取的配置文件

systemd 用户实例也有一份环境变量,用于通过 systemd 启动的用户级服务,通过 systemctl --user 的子命令可以查看和更新。D-Bus 也有一份,可以通过 dbus-update-activation-environment 命令来更新。这俩通常不需要用户操心,桌面环境应该会维护好。

如果你用 tmux 的话,那么 tmux 还有一份,用于新创建的窗格。tmux 会在被连接时更新 update-environment 选项指定的环境变量。当然你也可以用 tmux setenv 子命令去更新。这个尤其值得注意,因为 tmux 可能在不同的环境中被连接,导致环境变量混乱(比如 X11 下没有 DISPLAY 变量)。

要注意的一点是,不同的登录过程并不是只会读取自己专属的配置文件,尽管大家都在努力,也并没有完全统一好用的配置文件。所以有些环境变量,你可能想尽量避免重复设置(比如冗长重复的 PATH 项就很讨厌)。好在这些都是 shell 脚本,不光能设置环境变量,也能做条件判断。

要查看当前进程的环境变量,可以用 env 命令。要查看别的进程的,去读它的 /proc/PID/environ 文件,或者开个 htop 然后在进程上按 e 键。要看看某个环境变量在不同进程里是什么情况,可以用我写的小工具 compare-env

Linux 软件生态的特点就是这样,没有谁规定一定要用怎样的方式做一件事情,所以大家的想法总会有些出入,就导致设置个环境变量还有这么一大群配置文件(systemd 还有一份呢,我还没读没试所以没说)。但另一方面,理解它们也是十分容易的:不用猜测,不用撞大运般地耗费时间去尝试,顺着代码摸过去,总能弄明白软件的行事逻辑。即使文档像 pam_env 那样前后矛盾,也有源代码这条路可以精确刻画软件的行为。

violet's avatar

React - 组合 vs 继承

React 有十分强大的组合模式。我们推荐使用组合而非继承来实现组件间的代码重用。

Props 和组合为你提供了清晰而安全地定制组件外观和行为的灵活方式。注意:组件可以接受任意 props,包括基本数据类型,React 元素以及函数。

如果你想要在组件间复用非 UI 的功能,我们建议将其提取为一个单独的 JavaScript 模块,如函数、对象或者类。组件可以直接引入(import)而无需通过 extend 继承它们。

 

violet's avatar

React - 状态提升

在 React 应用中,任何可变数据应当只有一个相对应的唯一“数据源”。通常,state 都是首先添加到需要渲染数据的组件中去。然后,如果其他组件也需要这个 state,那么你可以将它提升至这些组件的最近共同父组件中。你应当依靠自上而下的数据流,而不是尝试在不同组件间同步 state。
虽然提升 state 方式比双向绑定方式需要编写更多的“样板”代码,但带来的好处是,排查和隔离 bug 所需的工作量将会变少。由于“存在”于组件中的任何 state,仅有组件自己能够修改它,因此 bug 的排查范围被大大缩减了。此外,你也可以使用自定义逻辑来拒绝或转换用户的输入。
如果某些数据可以由 props 或 state 推导得出,那么它就不应该存在于 state 中。

 

violet's avatar

React - 表单

在 react 中,可变状态(mutable state)通常保存在组件的 state 属性中,并且只能通过使用 setState() 来更新。

React 并不会使用 selected 属性,而是在根 select 标签上使用 value 属性。这在受控组件中更便捷,因为您只需要在根标签中更新它。

可以将数组传递到 value 属性中,以支持在 select 标签中选择多个选项
<select multiple={true} value={['B', 'C']}>

当需要处理多个 input 元素时,我们可以给每个元素添加 name 属性,并让处理函数根据 event.target.name 的值选择要执行的操作

在受控组件上指定 value 的 prop 会阻止用户更改输入。如果你指定了 value,但输入仍可编辑,则可能是你意外地将value 设置为 undefined 或 null。

有时使用受控组件会很麻烦,因为你需要为数据变化的每种方式都编写事件处理函数,并通过一个 React 组件传递所有的输入 state。当你将之前的代码库转换为 React 或将 React 应用程序与非 React 库集成时,这可能会令人厌烦。在这些情况下,你可能希望使用非受控组件, 这是实现输入表单的另一种方式。如果你想寻找包含验证、追踪访问字段以及处理表单提交的完整解决方案,使用 Formik 是不错的选择。

violet's avatar

React - 列表 & Key

用 key 提取组件

元素的 key 只有放在就近的数组上下文中才有意义。

比方说,如果你提取出一个 ListItem 组件,你应该把 key 保留在数组中的这个 <ListItem /> 元素上,而不是放在 ListItem 组件中的 <li> 元素上。

key 只是在兄弟节点之间必须唯一

key 会传递信息给 React ,但不会传递给你的组件。如果你的组件中需要使用 key 属性的值,请用其他属性名显式传递这个值

function Blog(props) {
  const sidebar = (
    <ul>
      {props.posts.map((post) =>
                       <li key={post.id}>
                         {post.title}
                       </li>
                      )}
      </ul>
  );
  const content = props.posts.map((post) =>
                                 <div key={post.id}>
                                    <h3>{post.title}</h3>
                                    <p>{post.content}</p>
                                    </div>
                                 );
  return (
     <div>
       {sidebar}
       <hr />
       {content}
     </div>
  );
}

const posts = [
  {id: 1, title: 'hello world', content: 'welcome to learning react!'},
  {id: 2, title: 'installation', content: 'you can install react from npm.'}
];
ReactDOM.render(
  <Blog posts={posts} />,
  document.getElementById('root')
);
violet's avatar

React - 条件渲染

class LoginControl extends React.Component {
  constructor(props) {
    super(props);
    this.handleLoginClick = this.handleLoginClick.bind(this);
    this.handleLogoutClick = this.handleLogoutClick.bind(this);
    this.state = {isLoggedIn: false};
  }

  handleLoginClick() {
    this.setState({isLoggedIn: true});
  }

  handleLogoutClick() {
    this.setState({isLoggedIn: false});
  }

  render() {
    const isLoggedIn = this.state.isLoggedIn;
    let button;

    if (isLoggedIn) {
      button = <LogoutButton onClick={this.handleLogoutClick} />;
    } else {
      button = <LoginButton onClick={this.handleLoginClick} />;
    }

    return (
      <div>
        <Greeting isLoggedIn={isLoggedIn} />
        {button}
      </div>
    );
  }
}


function LoginButton(props) {
  return (
    <button onClick={props.onClick}>
      Login
    </button>
  );
}

function LogoutButton(props) {
  return (
    <button onClick={props.onClick}>
      Logout
    </button>
  );
}

function UserGreeting(props) {
  return <h1>Welcome back!</h1>
}

function GuestGreeting(props) {
  return <h1>Please sign up.</h1>
}

function Greeting(props) {
  const isLoggedIn = props.isLoggedIn;
  if (isLoggedIn) {
    console.log(isLoggedIn)
    return (
      <UserGreeting />
    );
  }
  return (
    <GuestGreeting />
  );
}

ReactDOM.render(
  <LoginControl />,
  document.getElementById('root')
);

在 js 中,true && expression 返回 expression,而 false && expression 返回 false。

阻止组件渲染
可以让 render 返回 null,不进行任何渲染。

function WarningBanner(props) {
  if (!props.warn) {
    return null;
  }
  return (
    <div className="warning">
      warning!
    </div>
  );
}

class Page extends React.Component {
  constructor(props) {
    super(props);
    this.state = {showWarning: true};
    this.handleToggleClick = this.handleToggleClick.bind(this);
  }
  
  handleToggleClick() {
    this.setState(state => ({
      showWarning: !state.showWarning
    }));
  }
  render() {
    return (
      <div>
        <WarningBanner warn={this.state.showWarning} />
        <button onClick={this.handleToggleClick}>
          {this.state.showWarning ? 'Hide' : 'Show'}
        </button>
      </div>
    );
  }
}

ReactDOM.render(
  <Page />,
  document.getElementById('root')
);
's avatar

Something Incredible Between Them

Mathew feels troubled today. It’s not because of the mock final exam that has just passed. Although indeed he didn’t do well, it doesn’t bother him too much. He believes that studying is easy, relatively speaking. All he have got to do is to read those textbooks, remember these bullet points, do things that have all been successfully done by billions of people. Even he has trouble understanding, he has literally all the resources to help him. As long as he studies seriously, his grades are bound to rise to a respectable level. That’s what he believes, at least.

What troubles him, is the tiny screen glowing in his hand. On the top of the screen is the logo of a popular social media. On a more prominent part of the screen is a name that can drive Mathew’s heart up and down in milliseconds, Remi. The post on screen is not sent by Remi however, it’s another person that occupies a large part of Mathew’s mind, Karter. The post reads: I just witnessed something incredible of Remi.

Someone asks “What’s incredible?” and judging from the response Karter has given, it’s apparently very secretive.

“It’s always been like that.” Mathew mumbles. “Saying some prompt as if wanting to tell us more of a story, but just as the prompt provoked others’ curiosity, they tell us no more.”

Well, that’s what couples do, isn’t that right? They share things on social media not for others to see, but for themselves to have the pleasure of showing off and being showed off. Mathew doesn’t think it’s a badly selfish thing. In fact, he likes it when people announce their love, and enjoys reading romantic stories, both real and fictional. In fact, he craves for it. It doesn’t only make him happy for those in love, but also gives him a space for illusions as if he is part of it. This is usually the case with people that Mathew is unfamiliar with, and especially the case when the couple in question includes the one he admires.

Indeed, “admires” is the most Mathew dares to say about his feeling towards Remi.

Mathew met Remi when he was a first-year high school student. Remi was in the second year. In a school-organised activity, where 3-5 students from both first-year and second-year collaborated to complete a collage on a topic freely chosen. The groups were randomly arranged, although students had a chance to rearrange if they were unhappy about their groups. Mathew, a couple of unimportant people, and Remi were in the same group, they were quite happy about the arrangement, so it stuck. Mathew quickly took a liking on Remi. Remi is interesting, artistic, caring, and knows quite a lot. Remi didn’t seem to think Mathew as a nuisance either, so they exchanged contacts and chatted regularly. The collage didn’t end up being a hit, but it was good enough that both their parents praised them for it.

Later on, Matthew loved hanging out with a bunch of second-year students after each class, including Remi. The first-years and second-years were in the same building, so it wasn’t a rare sight in this high school. To others, they just looked every other students hanging out together, but to Mathew, the times they spend together were incredible. The more Mathew knew about Remi, the greater he thinks about Remi. And Mathew thought, this was going to last forever.

But obviously it couldn’t. A year passed by, Remi had gone up to the third year. The third-years were in a different building, “In order to better assist their studies.” The time Remi could spend with Mathew had drastically decreased, their interaction was then mostly restricted to social media and weekends. It was also around the start of the academic year that Karter started to appear in Remi’s social media posts.

Mathew didn’t care that he didn’t know Karter personally. “It’s just someone Remi thinks is cool.” Mathew thought. He knew, by reputation, that Karter was a prominent member in the school soccer team, but then resigned for some reason. “Whatever, it doesn’t bother me at all.” Mathew told himself.

But then Karter was mentioned more and more by Remi. They posted more and more photos of them together. They also put each other’s username in their social media profile. “Wow, they must be really good friends.” Mathew thought, “Karter must be a genuinely interesting person. I kinda want to know more about.” Mathew wasn’t jealous or anything, at least he knew he shouldn’t be.

One day, Mathew got a 2-ticket bundle at a local movie theatre, it could only be used when 2 people went at the same time. So Mathew invited Remi.

“Is it just us two?”

“Yes, it’s a 2-ticket bundle.”

“I guess… but Karter probably wouldn’t be happy about it.”

The rest of the conversation didn’t matter. The last sentence Remi said stuck in Mathew’s head. “Why would Karter be unhappy about Remi and I going to a movie?” Mathew pondered, “What kind of people would be unhappy? Is it… what I imagined it is?”

There wasn’t a sure answer, but later observations only confirmed Mathew’s guess. Remi and Karter, are in a relationship. They didn’t announce it when it started, but they are, now.

It is when Mathew made this guess that he also realized how jealous he was over having someone that holds an exclusive lock on Remi. There are now things that Remi must keep Mathew away from. There are now things that Remi cannot do for Mathew.

It was time that Mathew needs to accept the new reality, one that has Remi occupied by someone Mathew wasn’t close with.

This reality has been largely accepted by Mathew today. He knows he can only watch Remi and Karter from a friendly distance. He has also attempted to get close with Karter, but they don’t much in common. Mathew knows that there will always be a large part of Remi he can’t acquire forcibly, so the best course of action, is instead watch for things that Karter and Remi shared about their life publicly, consuming that, relieves his insatiable hunger for more Remi.

But Mathew also knows that he can’t do this forever. In matter of months, Remi and Karter, both as third-years, are graduating. Whether they’re going to the same college is unkown to Mathew. Obviously he could just ask Remi. But he is too scared to ask, as he is with many more questions to Remi. The same goes for many things Mathew wants to say to Karter and Remi, but he will never say them, as they are, at most, irrespective and irresponsible. Mathew thinks it’s best for him to befriend Karter, and be friends with both Remi and Karter for as long as they can keep in contact.

Yet, Mathew is feeling troubled by something incredible between them that he can’t know about.


除特殊说明外,本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。转载时请注明来自 FiveYellowMice's Blog ,以及原文链接

虽然 RSS 是一种很好的新闻获取方式,但是不同的 RSS 阅读器所显示的内容可能会有很大差距,有些甚至无法显示所有内容。所以为了能够获取到完整的内容,最好还是点开网页链接看。
之所以还是保留了 RSS 的全文输出,是因为摘要输出会被很多人讨厌……

RecursiveG's avatar

MikroTik RB4011 访客网络配置备忘

前言


由于之前陆陆续续添置了不少电子设备,以及更换 ISP 的原因,机架上连了5台设备,每台各负责一点点事情,不管是配置还是调试都很麻烦。再加上旧路由器不能很好同时处理千兆 NAT 和 VLAN,于是最近入手了一台 RB4011iGS+5HacQ2HnD-IN,把这一堆乱七八糟的设备统统换掉。主要需求有三点:

  1. 划分2个 VLAN,一个内部网络,一个访客网络。
  2. IPv4 和 IPv6 双栈接入。
  3. 因为路由器直接暴露在 Internet 上了,所以防火墙一定要配好,包括 VLAN 之间的访问也是靠防火墙来控制的。
SgDylan's avatar

DIY 显示器亮度自动调节

DIY 显示器亮度自动调节记录存档。

AlisterTT's avatar

板烧的LOGO

给板烧画了个水印用的LOGO,感觉有内味了,中文字体思源黑,英文字体Helvetica Black,感觉有内味儿了。

AlisterTT's avatar

吾有猫,其名为“板烧”

今年决定养只猫了,找到了一家靠谱的猫舍,店长每天都在勤勤恳恳的做着直播,目前观众还不是很多。

2020年6月5日,猫舍的小母猫铁扇公主生下了四只小猫,一只梵,一只蓝,板烧排行老三,以及排行老四、最可爱的蓝白妹妹。

板烧是四兄妹中最小的一只,但是很努力的在喝奶,这两天打开直播看到他,心里都在默默的说:“板烧,冲鸭!”

因为体型最小,所以也最努力喝奶的板烧

至于他为什么要叫板烧呢,开始想着如果选到了妹妹,就叫“茶茶”,选到了弟弟,就叫“信长”或者“秀吉”,可是朋友都觉得这俩名字太正经,于是探讨了大半天无果…后来小豆子建议选我最喜欢吃的食物,那当然是暴风雪或者麦旋风了,用来起名就欠了点,灵光一闪“板烧”这个名字就出来了,甚至已经做好了设定,等小朋友长大了就叫“大阪烧”(误)…

2020年6月12日晚上的板烧

小猫在妈妈身边要待六十天左右,估计八月份就能接回家了,板烧,一定要健康呀!!

farseerfc's avatar

系統中的大多數文件有多大?

你覺得,你的系統中大多數文件大概有多大?

這是一個很有意思的問題,你可以試着先猜一下。

基於對系統中保存文件的瞭解,可能有這樣的思考過程:

  • 我收藏了好多照片,每個有 2~5MiB 吧。
  • 我下載了好多漫畫,每個 100KiB 左右,這些大概佔了不少比例。
  • 我還收藏了不少動畫電影電視劇,雖然這些文件總數量可能不多?
  • 我下載了 Linux 的源碼,那裏面每個 C 代碼文件都幾千行,每行 100 字寬,平均也得有 30KiB 吧,有幾萬個源碼文件呢,佔比應該挺大的……

問題中「大多數」其實是個挺不精確的稱呼,換個精確點的問法:你覺得你的系統中 文件大小的中位數 大概在什麼範圍內?或者說,文件系統中 文件大小的分佈情況 一般是怎樣的曲線?

這個問題其實還有多種別的問法,比如:一個常見的桌面或者服務器系統中,多大的文件算大文件, 多小的文件算小文件,什麼範圍內的大小算是普通呢?

經歷過基本的科學教育的人 …

依云's avatar

终端色彩总结

本文来自依云's Blog,转载请注明。

终端转义序列里有一个 SGR 代码用于表示「粗体或者增加强度」的字体渲染。相当多的终端将其实现作更明亮的颜色而非粗体字,也有很多终端应用程序如此(比如 mutt 中的 brightXXX 颜色使用此代码;新一点的 mutt 支持使用 lightXXX 来表示亮色了)。

然而最近,GNOME 终端决定将这个「或」字去掉,让 SGR 代码 1 表示粗体,亮色使用另外的颜色代码来表示。这无疑导致了我看到的许多软件里出现粗体字。有时候看着还行(比如 systemd、htop 中的),有时候会让人觉得很不舒服(比如 zsh 里打着命令,字体一会儿变粗一会儿变普通粗细)。我就认真去查了一下相关信息,作出相应的配置更改,顺便做个总结笔记好了。

转义序列

「选择图形展现」(Select Graphic Rendition; SGR)序列用于设置字体的渲染方式。其格式为CSI (code ";")* code m。CSI 就是 ESC "["。一个序列里可以给出多个代码,使用分号分隔。如果一个都不给出,当作代码 0 解释。

八色

这是最基础的八种颜色,代码 30-37 设置前景色,40-47 设置背景色。

16色

这就是大多数终端设置里,那个14色的调色板所指定的色彩了。为什么只有14色呢?因为默认的前景色和背景色是单独的设置项。

如序言中所说,相当多的终端将代码 1 解释为亮色,也就是上述八色再加上对应的明亮版本。

自 GNOME 终端此次改革之后,代码 1 只管粗体。要亮色,使用代码 90-97 设置前景色,100-107 设置背景色。除了 GNOME 终端外,也有一些其它终端跟进,比如 alacritty。有些终端保留了将代码 1 解释为亮色的选项,而 GNOME 终端最近去掉了这个选项(但是还有一个将粗体字显示为亮色的选项)。

256色

16色怎么够?于是出现了256色。

ESC[38;5;<n>m用于设置前景色,ESC[48;5;<n>m用于设置背景色。其中,n 是一个数,0-7 同代码 30-37,是那最初八种颜色。8-15 是它们的亮色变种。16-231 是216种彩色,在RGB空间构成了一个6x6x6的立方体。232-255 是24个灰阶色彩。

一些标准中,这中间的分隔符使用冒号。

真彩色

现代显示器普遍使用8位值表示RGB中每一个通道、共计24位了,终端也不能落后呀。于是有些终端也支持了这个被称为「真彩色」的24位色彩了。

代码格式是256色的扩充。ESC[38;2;<r>;<g>;<b>m来设置前景色,ESC[48;2;<r>;<g>;<b>m设置背景色。这里的 r、g、b 当然就是RGB色彩空间的值了,每一项的取值范围是 0-255。

测试脚本

整合了我从各处收集到的展示方式,写了一个脚本,可以直观地感受终端对各种色彩的支持情况:

colors.py

参考资料

SgDylan's avatar

使用 VMAF 对静态图片进行质量评估

使用 VMAF 评估图片质量,测量算法性能。

SgDylan's avatar

DIY 显示器背景灯 Lightpack

最近自己弄了一套显示器背景光,在此稍微记录一下。

Jixun's avatar

移除游戏添加的美式英文键盘

很多 FPS 游戏(如 CS:GO)会在启动的时候添加一个美式英文键盘,但不会在结束游戏的时候卸载这个键盘。 … 阅读更多 »移除游戏添加的美式英文键盘

移除游戏添加的美式英文键盘最先出现在Jixun 项目集

Jixun's avatar

FC 魂斗罗1 汉化

FC 上的《魂斗罗1》是我在 2016 年做的,很多内容已经找不到了唔… 汉化说明 人生第一个汉化的 FC 游… 阅读更多 »FC 魂斗罗1 汉化

FC 魂斗罗1 汉化最先出现在Jixun 项目集

Jixun's avatar

QMC 解密

腾讯旗下的《QQ 音乐》所使用的音乐文件加密格式就是 QMC,本质上就是将整个文件读入后用 XOR 处理。 下… 阅读更多 »QMC 解密

QMC 解密最先出现在Jixun 项目集

Jixun's avatar

100% 橙汁 – 资源解包工具 v1.1

100% 橙汁(100% Orange Juice)是一个类似大富翁的游戏。 支持类型 .dat 后缀文件解密… 阅读更多 »100% 橙汁 – 资源解包工具 v1.1

100% 橙汁 – 资源解包工具 v1.1最先出现在Jixun 项目集

Jixun's avatar

蓝光原盘压硬字幕并跳过前 10 秒

找到个未加密的原盘,里面有一堆字幕轨,发现第一轨(0:s:0)是需要的字幕。 字幕的前几秒是一些观影说明,也可… 阅读更多 »蓝光原盘压硬字幕并跳过前 10 秒

蓝光原盘压硬字幕并跳过前 10 秒最先出现在Jixun 项目集

Jixun's avatar

仓库用度盘投稿助手

虽然说当初是为了某个仓库而做的辅助插件,没想到现在因为百度网盘的严打而再次热门起来 _(:3__ 脚本安装 首… 阅读更多 »仓库用度盘投稿助手

仓库用度盘投稿助手最先出现在Jixun 项目集

Jixun's avatar

百度网盘标准提取码生成器

配合脚本使用效果更佳!仓库用度盘投稿助手 软件非常的简单,打开后把文件拖放进来,然后按下「生成代码」就会生成提… 阅读更多 »百度网盘标准提取码生成器

百度网盘标准提取码生成器最先出现在Jixun 项目集

Jixun's avatar

利用 Docker 来静态编译 ffmpeg

这篇文章是关于在 Linux 下使用 Docker 编译适用于 x86_64 架构的 ffmpeg 可执行文件… 阅读更多 »利用 Docker 来静态编译 ffmpeg

利用 Docker 来静态编译 ffmpeg最先出现在Jixun 项目集

Jixun's avatar

iFun 去广告 & 增强

iF 视频是一个提供海外华人的视频点播的一个服务,免费用户可以看 480p 的视频。 这个脚本可以用来去除一些… 阅读更多 »iFun 去广告 & 增强

iFun 去广告 & 增强最先出现在Jixun 项目集

's avatar

狗粮!唔嗯……想要……还要更多!咳!

Image by Mat Coulton from Pixabay

恋爱真是件美妙的事情呢。尽管要享受它,还必须得付出巨大的代价才行。得承担起两人份的责任,得照顾好对方的心情,得掌握好所有人的看法和态度,还得知道全方位的处理冲突的办法。但很幸运地,对于像黄鼠这样,不想付出代价又想吸收恋爱带来的甜美的人,我们还有替代方案——吃狗粮。

我们可以寻找虚构的故事。除了少数的例外,故事们一定都是被设计成读后会让人开心的。作家们用了全力,只为了将人物写得无比可爱,把交互写得超级幸福。即使有冲突,那也一定是会得到解决的,而在解决之时,他们也一定不会放弃机会,再让读者释放一次快乐的荷尔蒙。

黄鼠可以放心地、全力地喜欢虚构故事中的 CP 们,因为不用担心它们会令我失望——如果这是两个黄鼠不会喜欢的角色的话,那么从故事开始就会知道了。角色们的可爱是被刻意设计如此,因此是完全不用担心会消逝的。

而在现实中,我们也可以不劳而获地享受别人的恋爱带来的幸福感。现实中的情侣会秀恩爱,会撒狗粮——这是人之常情,得到了那样稀有的机会、付出了那样多的努力,黄鼠也一定会忍不住使劲炫耀的。

黄鼠通常来说,都认为自己是一个擅长接受狗粮的人。尽管有少数时候会有些许嫉妒,但那不重要,因为那是和自己无关的事情。面对别人的感情、别人的幸福,自己只要在周围开心的祝福就好了。狗粮发放者本人的的幸福,才是故事的主角。而自己能够免费蹭到这份幸福,是值得感谢的事情。

黄鼠看 YouTube ,在 YouTuber 们的镜头前,几乎每对人都是那样地美丽。他们互相扶持着,一同行进着,一起将美好展示给全世界的观众。在镜头之外也许仍然会有冲突,但那跟黄鼠无关,也无法获知,因此黄鼠不去思考它。

黄鼠看着 Veritasium 的 Derek 讲述自己的人生故事 ,那本身就是一篇很棒的、启发人的视频,而在其中 Derek 感谢到自己的妻子对自己的长期支持的时候,在提及两人相遇的时候,在视频中播放他们在从前求婚时在室外用手机录下的模糊录像的时候,那份狗粮是突然的,但是是美味的。幸福的感觉遍布了黄鼠全身,唯一能组织出来的语言,是“好棒啊,好想祝福”;唯一拥有的想法,就只有祝福他们在这样多年的时间后,依然能够持续这份幸福。

黄鼠看着 AkiJoey 的频道。看着这两位做着相似种类的视频的 YouTuber ,从乎不相干,到公布了跨越大洋的感情,再到现在生活在了一起,除了祝福他们以外,难道还有什么其他的事情可以思考吗?而在如今,两人已经频繁地在视频中互相出镜,互相提及一起做的事情,这样的生活成为了日常,这样的日常是多么令人向往呀。而黄鼠,除了感谢他们一直带来的有趣视频以外,就只有希望这美妙的日常可以继续下去了。

决不能忘记提及的是 Rachel and Jun 的频道。从这样的频道名称看来,还能指望更多的什么呢?几乎每一篇的视频,都是优质的狗粮。美妙的两人,被三只可爱的猫咪包围着。对着样的美妙生活,那是连嫉妒都难以做到的。

放下 YouTube ,黄鼠看了看自己所认识的人们,那也是一个大量的狗粮来源。黄鼠看着大家的幸福,自己也会被幸福感所感染。黄鼠自诩是一个思想开放的人,会接受各种各样关系,会理解他人各种各样的决定,会明白这是与自己无关,自己无权评判的事情。于是黄鼠享受着从他人借来的快乐,开心地祝福着他们。

至少,这是黄鼠认为自己应该做的事情,在所有时候。

但事实上,黄鼠并没有像自己想象中那样强的承受能力,也并没有能够完全保持开放的思想。黄鼠有时会私下评判别人的身份和行为,也会拿着自己个人的衡量标杆,去评判与自己完全无关、自己完全无权干涉的事情。黄鼠无法总是纯粹地享受狗粮而不添加自己的主见。

黄鼠会偷偷地给人打上“难以喜欢上”的标签,尽管这可能仅仅是依据于粗浅的认知。黄鼠会觉得某个人可能太高冷、太凶、说话不好听、做事太绝情。可是人家是独立、有权做自己的人,是不需要黄鼠的欣赏的。事实上,黄鼠的存在有可能令对方厌烦也说不定。

尽管是人家自己的事情,自己完全无权评判的事情,但是可笑地,黄鼠会觉得自己无法接受现实中一些人的配对。就像对虚构作品中自己不喜欢的 CP 一样,想“诶,为什么那两个人会在一起”。可是对虚构作品这样做是没关系的,因为他们是虚构的人,可是在现实中,每个人都是有自己独立的思想,有着自己的事才对。与谁在一起是别人自己思考做出的决定,这样子否定别人的人生决定,是太大的不尊重了。

黄鼠知道这是自己不该拥有的想法,所以想要尽量避免它。因为这样,黄鼠十分害怕获知自己在意的人的恋人。万一那是一个黄鼠“难以喜欢上”的人该怎么办?那样的话,黄鼠就会悄悄地否定它们了。尽管这一切都不是黄鼠有权去评判的事情。

黄鼠是充满控制欲的,不愿意面对不在自己控制中的事情。如果熟悉的人宣布了新开始的感情,却又不愿意让黄鼠了解他的恋人,黄鼠会觉得气愤。尽管黄鼠知道,这是人家自己的决定,人家自己私人的事情,不愿意分享明明是十分正常的。可是不平衡的内心,仍然会无法接受自己熟悉的人正在隐藏其十分重要的一面,并且将大量的经历与时间花费在这个隐藏的地方,黄鼠难以获知的事实。但显然,这样的想法是不能说出来的,只好让黄鼠自己活该地承受。

黄鼠更不愿意接受的,是来自特定的人的狗粮。

那其中包含着黄鼠对对方不了解的气愤。自己明明声称那样喜欢一个人,却不知道人家居然有认识来自其它地方的其他人。不能够完全了解一个人的信息来源,令黄鼠气得不断跺脚:“他们到底怎么认识的啊!为什么黄鼠不知道啊!”

黄鼠没有“为什么不是我”这样的想法,因为黄鼠明白,之所以不是自己,一定是有合理的原因的。黄鼠因此想要了解对方,希望能够使用和平的方式,来让自己内心的控制欲平衡一些。可是对方大概完全不会有想要被黄鼠了解的兴趣,更不用提黄鼠的动机了。

但这样的事情,能有什么经决方案呢?在黄鼠能够改变自己的想法之前,大概每次吃到那颗特定的狗粮后,只能够继续被这些禁忌的想法所围绕了。“为什么这个人能与这个人关系这样好”、“为什么我不能成为其中的一分子”,这些不该被提出,也不该被回答的问题,希望能够停止吧。黄鼠想要能够全心全意地吃狗粮,这是足够的,也是黄鼠唯一有权做的。


除特殊说明外,本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。转载时请注明来自 FiveYellowMice's Blog ,以及原文链接

虽然 RSS 是一种很好的新闻获取方式,但是不同的 RSS 阅读器所显示的内容可能会有很大差距,有些甚至无法显示所有内容。所以为了能够获取到完整的内容,最好还是点开网页链接看。
之所以还是保留了 RSS 的全文输出,是因为摘要输出会被很多人讨厌……

's avatar

Hackthebox - Scavenger - 10.10.10.155 - Writeup

Hack The Box - Scavenger 解题过程及思路 Writeup
's avatar

Hackthebox - Magic - 10.10.10.185 - Writeup

Hack The Box - Magic 解题过程及思路 Writeup
ホロ's avatar

Chromium OS 和 Crostini 初体验

日常动机不明瞎折腾……

所以 Chromium OS 是啥?

Chromium OS是Google Chrome OS的开放源代码开发版本。 自2009年11月19日开始,Chrome OS以Chromium OS为名陆续发布其开发源代码, 并在遵守着BSD授权条款不断有新版本发布,并试图能够提供绝大多数长时间浏览 万维网的用户一个快速、方便且安全的操作系统。

历史上Chromium OS曾经整体是创建在以Linux核心为主的Ubuntu 4.10版本上,而操作系统的的软件包管理系统则是使用Gentoo Linux的Portage。 但是现在实际上只是单纯利用了Gentoo Linux 的 Portage 而独立编译出来的特制化 GNU/Linux 操作系统,而这个系统本身也与 Gentoo Linux 无关。

Wikipedia: Chromium OS

愿意的话当作一个核心是 Chromium 浏览器的操作系统也行……

于是 Chromium OS 大概像这个样子(嗯?)

's avatar

心脏和人偶 —— 心臓と絡繰

这是一首 Kanzaki Iori 作曲作词,花谱(Kaf,花譜)演唱的曲子。 Kanzaki Iori (原名是全用片假名的),就是那个,那个 vocaloid P主,那首《被生命所厌恶。》(命に嫌われている。)

《被生命所厌恶。》针对的是一种轻视生命的行为,一种表面上重视、实际上却拿生命在开玩笑的行为。轻视生命的我们“被生命本身所厌恶”。唱着无论如何也要活下去,忍耐着、挣扎着、笑着、背负着活下去。这样的歌。因为歌词十分直白,所以比较好懂。

写这篇的理由是因为感觉我听的日语歌里,各种修饰性的语言频发,有点像村上春树的小说,有点让人抓不住头脑。所以如果,。这次想要介绍的《心脏和人偶》,虽然不是像《被生命所厌恶。》那么直白,但也是挺好懂的一首歌,当作起手式可能正好。我不是职业的音乐人,也做不出高深的分析,也不敢自称说的都是对的,再怎么说,这也只是我个人的理解。但如果这篇文章能让读者对这首歌本身、Kanzaki、抑或是花谱感到一点点兴趣,那就是我的荣幸。

AlisterTT's avatar

520的涂鸦

这两天在看寒蝉鸣泣之时,片子太血腥就干脆一边玩手机一边转移注意力,用sketches那个APP乱涂乱画,涂了个狐狸出来。

然后勾线上色,这粗手指头是真够累人的

刚好12点过了,到5月20日了,那就祝自己节日快乐好了,什么时候还能脱单嘛!!

依云's avatar

桥接无线网卡!

本文来自依云's Blog,转载请注明。

众所周知,大部分无线网卡是不支持桥接操作的。

但是 VirtualBox 就是能,因为它做了特殊处理:来回改 MAC。

那么,我的 LXCnetnsKVM 啥的也想这么玩,成不?

实际上不仅能成,而且 Debian Wiki 还给出了两个方案。方案一是用 ebtables 来回改 MAC。不过我失败了,可能是 ebtables 不支持改完 MAC 再把包发往另外的网络接口吧。

方案二是内核的一个叫 Proxy ARP 的功能。设置起来超级简单:往/proc/sys/net/ipv4/conf/all/proxy_arp里写1,然后给需要的 IP 地址加一条 /32 路由项就可以了。

这方案相比起 VirtualBox 来是非常手动了,也不支持 DHCP 自动配置的 IP 地址,但好歹能用。至少微信备份能用。(火狐的 Wi-Fi 远程调试已经坏掉了,倒是那个「USB 调试」其实只要 adb 连接上就能用,不一定要走 USB 线。)

ホロ's avatar

Windows Subsystem for Linux + DistroLauncher

利用 DistroLauncher 在 WSL 上运行自己喜欢的 GNU/Linux 发行版, ,例如还是咱喜欢的 Arch 🌝

复习(?):Windows Subsystem for Linux 是个啥玩意?

从 Windows 10 Insider Preview 开始,加入了 Windows Subsystem for Linux (适用于 Linux 的 Windows 子系统) 功能.

Windows Subsystem for Linux(简称WSL)是一个为在Windows 10上能够原生运行 Linux 二 进制可执行文件(ELF 格式)的兼容层。 它是由微软与 Canonical 公司合作开发,目标是使纯正的 …

依云's avatar

Linux 的进程优先级与 nice 值

本文来自依云's Blog,转载请注明。

假设有一个程序叫 use-cpu,它运行的时候会一直消耗一个 CPU 核心。试问,如果我开两个终端窗口,分别执行以下两个进程,其 CPU 会如何分配?

$ taskset 2 ./use-cpu
$ taskset 2 nice -n 10 ./use-cpu

两个进程都在1号CPU上运行,意味着它们必定争抢时间片。第二个进程使用 nice 命令设置其 nice 为 10,那么,是不是第二个进程会占用比较少的 CPU 呢?

很合情合理的推理,然而答案是否定的。

呃,也不一定。cat /proc/sys/kernel/sched_autogroup_enabled 看一下,这个开了的话,CPU 调度会多一个层级。默认是开的,所以这两个进程会均分 CPU 时间。

首先说好了呀,这里只讨论普通进程(SCHED_OTHER)的调度。实时进程啥的不考虑。当然啦,CPU 分配只发生在 R(Runnable)状态的进程之间,暂时用不到 CPU 的进程不管。

最上面的层级是 cgroups 了。按照 cgroup 层级,每一层的子组或者进程间按权重分配。对于 cgroups v1,权重文件是 cpu.shares;cgroups v2 则是 cpu.weight。不管用哪个版本的 cgroups,systemd 默认都没有做特别的设置的。对于 v1,大家全在根组里;对于 v2,CPU 控制器都没有启用。如果你去设置 systemd 单元的 CPUWeight 属性(或者旧的 CPUShares 属性),那么 systemd 就会开始用 cgroups 来分配 CPU 了。一个意外的状况是,使用 cgroups v2 时,systemd-run 不会自动启用上层组的 CPU 控制器,以至于如果上层未手动启用的话,设置不起作用。在使用 cgroups v1 时,用 systemd 设置 CPUWeight 或者 CPUShares 也不太好用,因为它并不会自动把进程挪到相应的层级里去……

其次就是这个默认会开的 autogroup。这个特性是为了提升交互式的桌面系统的性能而引入的,会把同一 session 的进程放一个组里。每个 autogroup 作为一个整体进行调度,每个 autogroup 也有个 nice 值,在 /proc/PID/autogroup 里可以看到,也可以 echo 一个想要的 nice 值进去。至于这个 session,不是 systemd 的那个 session,而是传统 UNIX 的那个 session,也是 setsid(2) 的那个 session。我一直以为它没多大作用,没想到在这里用上了。基本上,同一群进程会在同一个 session 里(比如一群火狐进程,或者一群 make 进程),同一个终端里跑的进程也都在一个 session 里(除非你 setsid 了)。

最后才是轮到进程。其实准确地讲是线程。同一个 autogroup 里的时间片如何分配,就看里边这些线程的 nice 值的大小了。所以其实,我系统里的那些高 nice 值的进程,由于 autogroup 的存在而它们又没有去设置 autogroup 的 nice 值,其实调度起来没什么差别的。

参考资料

  • man 7 sched
  • man 7 cgroups
imi415's avatar

STM32H7中的DMA

1. 概述

       STM32H7相比其他系列性能有着不小的提升,同时结构也有了较大的变化。这些变化如果不加注意则会影响DMA等功能的使用。本文通过对STM32H7的Bus Matrix及Cache/MPU两方面尝试分析不同点及对应的解决方案。

2.硬件平台

       本文中使用的硬件是STM32H750开发板,属于STM32H7 Value Line产品线,代码位于QSPI Flash中,通过XIP方式执行。

3. STM32H7的总线结构和访问规则

       STM32H7拥有三个不同的Bus Matrix,分别为D1,D2与D3。

  • D1区域为AXI  Interconnect Matrix,与CPU通过AXI总线相连,高速外设如Flash,QSPI,FMC等通过此AXI Bus连接到CPU,速度最快。
  • D2区域为AHB Multi-layer Bus Matrix,连接了大部分低速外设及另一部分SRAM,通过CPU的AHBP接口连接到CPU,速度其次。
  • D3区域为另一个AHB Bus Matrix,与前两个区域不同的是,它不与CPU直接连接,而是通过D2区域的一个AHB Master连接到D3区域。D3区域速度最慢,同时也连接了一部分低功耗外设,速度最慢。

三个区域的时钟及门控可独立控制,以实现低功耗与高性能间的平衡。

在H7的架构中,部分高速外设通过AXI总线连接到Master,相比只有Flash存储器连接到AXI接口的F7系列,外设访问速度也有了提升。

STM32H7的总线互联架构

从上图我们可以发现以下访问规律:

  • D1区域的Bus Master可以通过D1-to-D2 AHB bus访问D2域的地址范围,也可以通过D2-to-D3 AHB bus访问D3的地址范围。
  • D2区域的Bus Master可以通过D2-to-D3 AHB bus访问D3域的地址范围,也可以通过D2-to-D1 AHB bus反向访问D1域的地址范围。
  • D3区域没有连接到其他区域的Bus Master,因此只能访问D3区域的地址范围。

总结一下就是:

D1与D2中的Bus Master可以互访对方Slave, D3中的Master不能访问D1与D2 Slave

4. STM32H7中的DMA与存储器

STM32H7中有三种不同的DMA,分别为MDMA,DMA(DMA1/DMA2)以及BDMA,其特点如下所示:

  • MDMA可以通过AXI Interconnect的接口访问D1域,同时能通过专用的AHBS接口访问CPU中的I/DTCM存储器,速度最高。
  • DMA1/2位于D2域中,通过AHB接口访问D2域。由于D2域存在着连接到D1域的通路,因此DMA1/2依然可以访问D1域中的存储器及外设。
  • BDMA则位于D3域中,仅可以访问D3SRAM及对应的D3域外设,同时功能上也相对有限。

相似的,STM32H7中的存储器也分为了以下几种:

  • AXI SRAM(D1_RAM),QUADSPI,FMC,Flash:这些存储器连接到AXI Interconnect,可被能访问D1域的Bus Master访问。
  • AHB SRAM1/2 :这些存储器连接到D2域 AHB Bus Matrix,可被能访问D2域的Bus Master访问。
  • AHB SRAM3:这些存储器连接到D3域 AHB Bus Matrix,可被能访问D3域的Bus Master访问。
  • 特殊的,位于CPU内部的I/DTCM(指令/数据紧耦合存储器)在可被CPU访问的同时也可通过专用接口被MDMA访问。

由此,我们可以得出以下几点规则:

MDMA能访问包含TCM在内的所有存储器(几乎和CPU范围类似),DMA1/2不能访问TCM,BDMA仅可访问AHB SRAM3以及D3域外设。
特别需要注意的是,这些规则不仅应用于DMA控制器,同时也适用于其他Bus Master,如DMA2D,LTDC,Ethernet,SDMMC,USB等等拥有内部DMA的外设,使用时同样要保证用户buffer位于可访问区域内。

5. 关于L1 Cache及MPU

Cortex-M7相比于其他核心,增加了单独的L1 I/D Cache,为了保证DMA访问的内存不出现一致性问题,需要通过配置MPU的方式控制指定区域的缓存策略。

Cortex-M7的MPU通过Region的形式定义访问规则,这里通过STM32CubeMX的配置工具提供简单的缓存配置示例。

CubeMX的MPU配置界面

MPU的配置最好按照粒度从粗到细的顺序配置,示例中的默认配置是禁用缓存,允许全部访问,在QSPI Flash区域启用读缓存,并允许指令访问及共享。

6. 代码实现

在默认的Linker Script中,数据代码被放置在了DTCM中,如果想要通过DMA访问这部分数据,我们就只能通过MDMA访问,或者修改LDS使得数据放置在AXI SRAM或者AHB SRAM中。以下的修改可以将用户的buffer放置在D2域SRAM中:

  _SI_D2SRAM = LOADADDR(.d2_sram);
  .d2_sram :
  {
    . = ALIGN(4);
    _DMA_Buffer_Start = .;
    *(.d2_sram_buffer)
    . = ALIGN(4);
    _DMA_Buffer_End = .;
  } >RAM_D2 AT> FLASH /* Note: Not actually init, we need to copy manually before use */

然后我们即可初始化这部分数据:

    uint32_t bytes_to_copy = &_DMA_Buffer_End - &_DMA_Buffer_Start;
    if(bytes_to_copy != 0) {
        memcpy((void *)&_DMA_Buffer_Start, (void *)&_SI_D2SRAM, bytes_to_copy);
    }

之后通过DMA1或DMA2即可正确实现DMA传输。

依云's avatar

Intel GVT-g 初体验

本文来自依云's Blog,转载请注明。

准备 GVT-g

把 kvmgt vfio-iommu-type1 vfio-mdev 这仨加到 /etc/mkinitcpio.confMODULES 数组里去。mkinitcpio -P 重新生成一下 initramfs。

添加内核参数 i915.enable_gvt=1。比如是 grub 引导就去改 /etc/default/grub 里的 GRUB_CMDLINE_LINUX 变量,然后 grub-mkconfig ...

去把 /etc/systemd/system.conf 里的 DefaultLimitMEMLOCK 给改了。比如 DefaultLimitMEMLOCK=65536:1073741824

重启。

这个时候应该已经有 /sys/devices/pciXXXX:XX/XXXX:XXXX.X/mdev_supported_types 这个目录了。里边有好几个选项呢。选择一下合适的(查看 description 文件),然后往里边的 create 文件里写一个 UUID 就创建了。

启动 KVM 虚拟机

呃,如果你还没有磁盘镜像就自己 qemu-img 创建一个,然后装机。如果你有别的虚拟机的,也可以用 qemu-img 去转格式。

另外准备一下网络。我早就有个网桥了,所以直接用它了。在 /etc/qemu/bridge.conf 里写一句 allow br0 不然不给用的,毕竟我是普通用户权限而网络接口是要 root 权限操作的,得明确允许一下。

我尽可能地使用了 virtio,据说性能好(VirtualBox 也支持一部分了呢)。如果用已有的虚拟机系统但以前没用过 virtio 的话,记得用 fallback 那个 initramfs 启动,然后进系统之后重新生成一个。

我给分配了四个逻辑 CPU 核,4G 内存。VGA 要关掉,不然两个显卡用起来麻烦。为了避免部分内容显示到别处去(如果关了 VGA 的话就看不到,否则能在默认的那个上看到),要加上 ramfb=on,driver=vfio-pci-nohotplug 选项。

声音当然是要的。添加个 PulseAudio 后端,一张 HDA 声卡。我不懂声卡型号所以找了个顺眼的,能用就好。

合起来是这样子的(那两个省略号,一个是磁盘镜像路径,一个是创建 vGPU 用的 UUID):

#!/bin/bash -e

ulimit -l 1024000

exec qemu-system-x86_64 -enable-kvm \
       -name "ArchKDE" \
       -cpu host -smp 4 \
       -m 4G \
       -drive file=/.../ArchLinuxKDE.qcow2,if=virtio \
       -netdev bridge,id=eth0,br=br0 \
       -device virtio-net,netdev=eth0 \
       -device vfio-pci,sysfsdev=/sys/bus/mdev/devices/...,display=on,x-igd-opregion=on,ramfb=on,driver=vfio-pci-nohotplug \
       -vga none \
       -display gtk,gl=on \
       -audiodev pa,id=pa0,server=/run/user/$UID/pulse/native -device intel-hda -device hda-output,audiodev=pa0 \
       "$@"

如果你使用 GVT-g 显卡的时候整个系统都卡卡卡的话,去看一下宿主的内核日志,是不是有 vfio_pin_page_external: Task qemu-system-x86 (257364) RLIMIT_MEMLOCK (104857600) exceeded 这样的提示,然后去把 RLIMIT_MEMLOCK 给调大,大到它不再报这个错为止。我最后给了1000M才终于不报错地把 KDE 给跑起来了(默认是64K)。

当然如果你没有 GVT-g 支持的话,去掉那行配置,然后 -vga virtio 也能用。

参考链接

imi415's avatar

使用SystemView分析FreeRTOS应用

免费的RTOS Tracealyzer,SEGGER大法好
17windy's avatar

练手/找感觉 自制1080P壁纸收集与下载 汇总

要改掉练完就扔的坏习惯,慢慢积累一下。 /但是不会存源文件,因此都是很难重制。

夏夕 0614 For the Life (Remix) #明日方舟 For the Life #明日方舟 泰拉大地的挽歌 #明日方舟 泰拉大地的挽歌 #明日方舟 梦觉流莺。 去,不要说再见。 聚。 破。 挖矿与吃货。 薄暮之城。 傍晚时分。 傍晚时分。 五月病。 抗僵尸能力低下。
ホロ's avatar

切点洋葱 - 搭建一个洋葱服务

“如果你愿意一层一层剥开我的心……”

所以洋葱服务(Onion Service)是啥?

洋葱服务 (Onion Service ,旧名为“隐身服务/隐藏服务/ Hidden Service”) 是一种只能透过洋葱路由网络访问的网络服务 (例如网站)。

那么有人为啥要使用洋葱服务呢?

  • 洋葱服务在 Tor 网络中传递,因此可以隐藏服务器的真实地址(例如 IP 地址和地理位置等等)。
  • Tor 用户与洋葱服务之间所有的流量都是端到端加密的,所以汝不必担心像没有 HTTPS 这样的问题。
  • 洋葱服务的网址是为自动生成,因此网站的架设者或管理员无需另行购买网络域名。其网址皆是以 .onion 结尾的, 这样的设计可以让洋葱路由系统确保所有网络连接都通往正确的站点,并且其连接数据未被窜改。

访问一个洋葱服务网站时,除了一般 Tor 网络中会经过的节点以外,还会额外通过若干个中继。 (图上的是 DuckDuckGo 提供的洋葱服务 https://3g2upl4pq6kufc4m.onion/

我需要搭建一个洋葱服务么?

如果汝遇到了这些情况,那汝大概会对如何搭建一个洋葱服务引起兴趣(大概吧……):

  • 匿名、不被截获和篡改的传输一个文件。(正好有 OnionShare 可以帮忙这么做)。
  • 在没有公共 IP 地址(甚至没有域名)的情况下提供 Web 服务。
  • 匿名的和另一位匿名者交流。
  • 汝也重视汝的读者的隐私权。 (要是汝不是作者怎么办?)
  • 或者别的? (详见:Tor at the Heart

切洋葱之前当然要做好保护措施啊……

于是亦然(?),要搭建一个洋葱服务的话,首先要有一个能够正常连接的 Tor 。

介于应该没人会一直开着个浏览器(?),所以最好是有个独立的 Tor 在运行(就是那啥所谓的 Expert Bundle 啦……)。

以及现在用 GNU/Linux 提供 Web 服务的家伙应该不少吧,于是汝大概能从汝所使用的 GNU/Linux 发行版的 软件仓库中找到 tor:

准备一个 Web 服务

这个就看人下菜了(?),如果有只用洋葱服务访问的需要的话,可以调整 Web 服务器的配置文件, 让她只接受本地地址的连接。 例如 Nginx 和 Apache 的话,大概可以这么做:

listen localhost:8000;

不放心的话还可以用防火墙啊(x)

生成一个洋葱服务地址

洋葱服务使用的 .onion 地址是随机产生的,地址是在配置洋葱服务时用新生成的公钥计算而成的。 所以叫做“生成”而不是注册,以及虽然有方法可以提前算出来生成特定地址的公钥但是不建议尝试……

用汝最顺手的编辑器和 root 权限(?)打开 Tor 的配置文件(通常是 /etc/tor/torrc ), 然后加上这些:

# 每个不同的洋葱服务都需要一个独立的文件夹来存储其所需要的私钥和主机名,
# 要创建不同的洋葱服务时,需要修改 HiddenServiceDir 所指向的文件夹。
#(注:不要手动创建 HiddenServiceDir 的路径,否则会出现权限的错误而无法启动。
# 在配置完成后启动 Tor 后,程序会自动生成权限合适的对应文件夹。)

HiddenServiceDir /var/lib/tor/path_to_your_service

# HiddenServicePort {汝希望汝的洋葱服务开在哪个端口上} {汝这个端口的洋葱服务交给谁处理}

HiddenServicePort 80 127.0.0.1:8080

保存完毕后重新启动 Tor ,如果一切 OK 的话,可以在汝设置的 HiddenServiceDir 中看到一个 名为 hostname 的文件,里面就是汝新鲜的洋葱服务的域名啦~

同时提供普通网络服务和洋葱服务时?

  • 可以考虑让来自 Tor 的出口 IP 地址的连接自动重定向至洋葱服务地址,例如 这样
  • 也有可能需要调整汝的应用(或者主题什么别的)来适应洋葱服务和 Tor 浏览器。

更进一步?读读看这些文章

当然都只有英文版(汗)

你会鼻酸,你会流泪……

ホロ's avatar

在 Android 上创建 GNU/Linux 容器

那这次再说吧……

再一次提醒没有耐心和同理心的家伙们去用其它即用的工具像是 TermuxArch 和 Linux Deploy ……

所以这回咱们要干什么?

由于咱不可能把所有发行版都装一次,也不可能在各种手机上都测试一遍,于是咱只能拿 咱手边的家伙举个例子,例如咱手上的小米平板4 ……

  • 一部 aarch64 / arm64 设备

现在的手机 CPU 基本上都是 64 位了吧,不知道的话搜索一下手上 CPU 的型号应该就能看个大概。

  • 比较新的 Android 系统,最好有 root 权限和完整 busybox 支持。

如果汝已经动手给手机安装了第三方 ROM,那应该不是什么难事。 某蓝绿海厂等受害者可以尝试 UserLAnd……

  • 一些剩余存储空间 (这不是废话么)
  • 安装好终端模拟器和合适的键盘。

或者 Termux 也可以,在里面装上 tsu 以后可以让 Termux 里的 Bash 以 …

ホロ's avatar

在 Android 上使用 GNU/Linux 工具

虽然……

虽然汝可能从哪里听说过 Android 是基于 Linux 内核的啦,不过大多数时候汝大概没办法直接把汝爱用的 GNU/Linux 发行版上的 工具直接拿过来用,为啥咧?

  • 手机和电脑不是一种 CPU(PC 常见的就是 x86_64 , 手机上比较常见的是 arm64(有时也称作 aarch64)),因此 两边的二进制文件并不能直接拿来换着用。
  • 虽然 Android 用了 Linux 内核,但是和普通的 GNU/Linux 发行版还是有很大的区别的。例如以 bionic 取代glibc (C 函数库)、以 Skia 取代 Cairo (用于向量图形绘图)、再以 OpenCORE 取代 FFmpeg(常用于音视频的录影和转换)。 于是不少依赖它们的软件不好运行。
  • 以及随着越来越多的 GNU/Linux 发行版开始用 Systemd 作为初始化程序,很多程序或多或少就和 Systemd 有了些关联(或者依赖)。 不巧的是……

所以 Android 应用们不好用了么?

STAGE 0 - Android 上的终端(模拟器)

如果汝有用过一些需要在电脑上运行一个辅助程序的 Android 应用(像是 AppOps 这样的),汝其实已经离 Shell 很近了。

在手机和电脑连接以后,可以运行 adb shell 命令获得一个 shell:

(PC) $ adb shell
walleye:/ $

接下来就可以 cd ls 乱出了…… (啥?) 因为别的汝也干不了啊……

如果汝的手机有 root 权限的话,在 Shell 里运行 su 试试?第一次的话汝的手机上的 root 权限管理程序应该会提示汝授予权限什么的。

要想在手机上试试的话,也有差不多的终端模拟器程序可以选择。 例如这个?

STAGE 1 - 在 Android 上使用(部份) GNU/Linux 程序

只有个 shell 哪里够……

正好也有一群人这么想,于是它们把终端模拟器和一些常用的 GNU/Linux 应用程序组合起来,创造出了 Termux

(这个在电脑上显示 Android 设备画面的程序是 scrcpy 啦~)

这里面提到的 pkg 其实就是有点小包装的 apt 啦,熟悉 Debian / Ubuntu 的话应该不会陌生。

下面的 root / Unstable / x11 是额外的仓库,需要使用要求 root 权限或者图形界面的软件在里面。

  • Play 商店上也有几个 Termux 使用的插件,可以实现自定义字体、浮动窗口、快速运行脚本、访问手机内存设备 等功能。有几个是收费的,不过有别的地方可以免费下载(小声)
  • 键盘上面的特殊按键可以通过编辑 ~/.termux/termux.properties 文件中的 extra-keys 属性来修改, 特殊键的定义在这里。
  • 偷懒的话也可以直接安装一个有这些特殊键的输入法,例如 Hacker's Keyboard
  • 当然外接键盘也是可以的。

以及大概有人踩过了不少的坑的样子……

STAGE 2 - 在 Android 上运行(部份) GNU/Linux 容器

啊 pkg/apt 好不习惯……

怀念汝习惯的 GNU/Linux 发行版的原汁原味的包管理器和其它工具?可以考虑运行一个容器来解馋(?)

Linux® 容器是与系统其他部分隔离开的一系列进程。运行这些进程所需的所有文件都由另一个镜像提供, 这意味着从开发到测试再到生产的整个过程中,Linux 容器都具有可移植性和一致性。

RedHat : 什么是 Linux 容器?

实现这种操作的关键要素就是 chroot ,它针对正在运作的软件行程和它的子进程,改变它外显的根目录。 在使用 chroot 之后,进程就会认为设置的目录是根目录,就可以进行各种操作啦,例如隔离访问或者修复系统什么的。

当然这操作是要 root 权限的,至于后来有人写出用户空间中的 proot ,就是另一个故事啦……

  • 手机有 root 权限的话,可以用 chroot 安装一个 GNU/Linux 容器。也有像是 Linux Deploy 这样的应用可以简化这一过程。
  • 没有 root 权限的话,借助前面提起的 proot 也能实现差不多的操作。也有像是 UserLAndTermuxArch 这样的工具帮忙简化这一过程。

以及大概也有人踩过了不少的坑的样子……

那如果咱就是想从零(?)开始呢?

那下次再说吧……

OX's avatar

斐訊R1智障音箱通過adb調試介面安裝apk實現AirPlay和DLNA功能

因為揀垃圾是一件很快樂的事情,一年前(2019年)我特意從中國大陸的網站上購買了很多斐訊遺產,其中就包括斐訊R1音箱,通過重重困難飄洋過海轉運到了日本。

剛剛拿到手的R1音箱是沒有拆封的,不同時期生產的R1音箱,內置的韌體(ROM)版本是不一樣的,舊版本的韌體音質校準不是特別理想,需要通過DNS劫持、push工廠配置文件等等的方法升級到最新版本,網絡上有很多教程,有需要的人可以Google一下,應該馬上就可以找到。

廢話不多説,下面是正題:

如何通過adb調試介面安裝App?

首先要找到斐訊R1音箱的IP位址。

有很多方法,比如查看路由器的DHCP分配位址表:

Host Name是「Phicomm_R1」開頭的就是斐訊R1音箱

知道斐訊R1的IP位址之後,用adb連接它!

OX-Macbook:~ ox$ adb connect 192.168.0.40
connected to 192.168.0.40:5555

然後用adb push命令把需要安裝的apk推送到音箱上:

adb push [apk文件所在的本地路徑] /data/local/tmp/

// 比如這樣:
// adb push /Users/ox/Desktop/airplay.apk /data/local/tmp/

然後通過調用pm工具安裝剛才push的apk安裝包:

adb shell /system/bin/pm install -t /data/local/tmp/[文件名]
額外提醒

如果你不知道轉義字符是什麼東西,那你的文件名最好不要有奇怪的字符,比如空格和括號之類的。

安裝AirPlay接收端

「樂播投屏TV版」和「AirPin」還有「Media Center」我都在用。

AirPin 是收費的App,但是也有免費的版本(AirPin Lite),在R1上用的話已經足夠了。

樂播投屏TV版 是免費的App,但是會上傳MAC地址之類的隱私內容,有時候還會擅自更新,新版本的樂播投屏TV版每次新設備連接都需要點擊允許,沒有屏幕的R1音箱就只能通過scrcpy之類的工具連接到R1之後手動點擊允許,非常麻煩,介意的話可以安裝舊版本的同時在路由器上屏蔽樂播投屏的服務器(*.hpplay.cn)。

Media Center 是免費的App,不過似乎穩定性不是特別好,但是非常輕量。

安裝DLNA接受端

上面提到的三個Apps都支援DLNA功能,自己選一個用吧。

使用scrcpy操作R1音箱的UI介面

雖然用adb調試介面可以完成大多數操作,但是比如像更改AirPlay的顯示名稱之類的操作,還是需要GUI操作,因為R1沒有屏幕,所以需要用到一些可以遠端操作Android GUI介面的工具,比如scrcpy。

scrcpy的GitHub倉庫地址:https://github.com/Genymobile/scrcpy

Windows版本在這裏可以找到。

Linux和macOS可以通過包管理器很方便地安裝,具體參考這裏

使用方法極其簡單:以macOS為例,先用adb connect命令連接到R1音箱之後,再執行scrcpy就可以了。

比如像這樣:

OX-MacBook:~ ox$ adb connect 192.168.0.40
connected to 192.168.0.40:5555
OX-Macbook:~ ox$ scrcpy
使用scrapy連接斐訊R1音箱 更改Media Center的設備顯示名稱 打開Media Center的AirPlay功能和設定R1音箱啟動後自動打開AirPlay伺服器

三款App的下載地址

樂播投屏TV版舊版本:Download

AirPin Lite:Download

Media Center:Download

這篇文章 斐訊R1智障音箱通過adb調試介面安裝apk實現AirPlay和DLNA功能 最早出現於 OXの胡說八道

ホロ's avatar

两次理想主义的尝试

几月不见甚是想念…… 会这么想的肯定是没看 咱的 Matters 啦…… (虽然那边也沉寂了好一阵子), 以及「集合啦!动物森友会」真好玩……

所以“两次理想主义的尝试”中的其中一次是什么?

在赞助了 Utopiosphere「本格异想录」 的会员计划之后,咱打算推出咱自己的会员计划了。

诶???

为啥开始寻求赞助啦?

因为穷.png

不像公众号、文章平台等可以"免费"存放内容(虽然汝和汝的读者可能会因为免费付出 其它的代价,例如自由和广告什么的……),独立博客是需要博主自己付出一定的成本来 维持运转的(例如域名和存放内容的地方)。

虽然咱前几个月终于悟出了 Likecoin 的赞赏键其实就是一个 iframe, 然后把它“移植” 到了这里,不过这几个月咱也没在这边写什么的样子,于是也形同虚设了(hmmmm)

最后还有咱自己的一点个人(?)原因,希望能得到一些声音(嗯?),咱当然也是有 回报可以拿出来的啦……

赞助者可以获得的回报有?

咱不知道还有啥词汇可以描述这群人了……

在写完这篇文章的时候,咱能够想到的大概有这些:

  • 优先阅读咱的拙作(诶?以及对于会员计划来说这好像很平常啊)

其实咱有好几次都是有好几个想法不知道先写那一篇,然后就咕咕咕了……这样大概 能让咱知道大家更想看到哪一篇,以及鞭策咱不要咕咕咕(x)

  • 某些方面的咨询服务(诶??)

只要是咱能够帮的上忙的地方,咱会努力。以及既然收了钱就会接纳(几乎全部)咱觉得 (有些)蠢的问题……

至于其它的嘛,让咱再想想……

赞助的方式?

还是草案(首先要有人愿意赞助……)
  • 「异想星空」 那边用了爱发电,看着就像有本地化的 Patreon ……
  • 在有了一些数字货币(就是 Likecoin 啦……)以后,也有意愿接收数字货币赞助 (但是有人愿意出嘛)
  • 以及可能会有优惠?

那另一次又是什么?

啊没错,咱又双想把 某个咱之前挖的大坑 的铲子捡起来了。

那么这个想法是怎么想起来的呢?

忘了……依稀还记得有一天吐槽过中文的 GNU/Linux 教程几乎都是默认用户只会用 GNU/Linux 来架设服务的那种。以及觉着 鸟哥的Linux私房菜 虽然写的很不错,但是是用的 CentOS 当作的教学范本……

于是就有想法写一部和 GNU/Linux 日常使用相关的手册的想法就这么产生了。

咱的目标是什么呢?

简单来说,咱有计划完成一部 GNU/Linux 桌面应用相关的手册,那具体有哪些方面呢?

  • 了解和 GNU/Linux 相关的一些概念
  • 自己动手安装 GNU/Linux 发行版
  • 使用 GNU/Linux 完成某些操作 (不只是运行服务)

具体的细节可以去看 咱之前的计划

自由的理想

作为 并不纯的 自由软件爱好者,咱也十分理想的想这么做:

  • 使用一个 完全自由的 GNU/Linux 发行版 作为范本,然而中途一度退而求其次的换掉了……
  • 以及尽可能的只用自由软件进行教学(?),虽然有些地方肯定不可能……
  • 以及想提醒大家稍稍关注一下隐私和安全意识(希望如此……)

但是……


大家快来投币(?)催咱不要咕咕咕啊……

想要了解两个之一(或全部)的更多细节的话,欢迎来咱的 Telegram 群交流更多细节:

链接在这里 ,如果链接失效的话 那就 @咱 请求链接好了。

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

https://afdian.net/@KenOokamiHoro
-----BEGIN PGP SIGNATURE-----

iHUEARYIAB0WIQQRcWZ9dT8okL6OyLwb09jRlMdzdQUCXpwxZgAKCRAb09jRlMdz
dVFQAQDjUk6b9H8MJaOV7+cX8ssyyBBdh3SsM1I/Sp2LK1S3fAD9HRR9ZzEv0CJR
OvdcglAV5zI9Lj1pRjGQvOti7VFaPwk=
=ygU/
-----END PGP SIGNATURE-----
Chawye Hsu's avatar

十款好评如潮的独立游戏与十张一定要听的原声带

class="tach-root">

十款好评如潮的独立游戏与十张一定要听的原声带

2020-04-10 22:22:00 杂谈
© 2015-2020 Chawye Hsu. Made with ❤︎︎ in Guangzhou
's avatar

天亮啦!动物森友会

一次在游戏中的合照,除最左村民外,从左至又依次是:芙兰,黄鼠,奎妮,萌狼, Cocoa

“动物之森?那样无聊的游戏,我还是不要浪费更多时间和金钱了吧”,第一次看到许多人为即将推出的新游戏《集合啦!动物森友会》兴奋时,黄鼠这样想到。

但这风潮似乎远比想象中更大,越来越多的玩家开始考虑是否要入手这部游戏,而其中的一些,已经开始他们的无人岛生活了。一位同样看到这场风潮,正在捉拿不定的朋友询问黄鼠会不会购买,不过黄鼠同样给出了否定的回答。

而黄鼠觉得这部游戏会无聊,也不仅是凭借粗浅从预告片看到的感觉呢。在蛮久之前,黄鼠曾使用 NDS 模拟器玩过一点《欢迎来到动物之森》,就觉得好无聊,没有玩很久就放弃了。所以这次在同样的系列发布新作的时候,黄鼠也继续认为新作会同样地无聊。

但是越来越多的人开始跳上前往无人岛的飞机了。在发售之后的一天下午,忍不住黄鼠一咬牙,决定也要冲动消费了!临时地赶在最近的百货商店关门之前,从货架上拎走了一盒《集合啦!动物森友会》。

在那之后,黄鼠的行为就变得和王镜泽一样了。

整一天的时间,几乎有做的唯一事情,就是在玩动物之森。本身就因为学校停课、整天呆在家里而变得混乱的作息,被动物之森加速成为几乎完全的黑白颠倒了。每天的睡觉时间成为了凌晨 7:00 ,起床时间成为了下午 16:30 (±3 小时)。在睡觉之前,黄鼠会望一眼窗外的天空,感叹道:“呀,天亮了呢。”


动物之森让黄鼠的作息更快坏掉、让黄鼠无法及时学习、让黄鼠整理房间的计划更加延后——这些游戏带来的坏影响,是实实在在的,不过在这里,黄鼠想要讨论的不是这些话题。

黄鼠想要讨论的,是关于人的话题。

无需质疑,动物之森使得许多平常几乎不会有交集的朋友得到了非常丰富的交流机会。平时完全没有理由说上一句话,在交流关于游戏的时候却有了许多的内容。即使只是简单的日常业务性对话,像是询问大头菜价格和交换水果,在这样的来往间,创造的羁绊大概也是存在的。

黄鼠得以了解许多可爱的人——动物之森是一个能够通过设计和搭配表达个性的游戏,每个人都拥有着的漂亮的室外景观和室内装饰,还有各种各样的可爱衣服可以收集。这是难得的体验。

可是在享受着玩家之间互相游玩的乐趣之后,黄鼠总是无法停止想到游戏所带来的排他性。在 Switch 持有者之间、在动物之森持有者之间,这部游戏让大家联系地更紧密,可是更多的没有游戏或没有主机的人,却被悄悄地排除在外了。

本身就不是联系很紧密的人群,现在被进一步分割成为了“动森玩家”和“非动森玩家”。而在意动森玩家的非动森玩家,在几乎所有人都在讨论一个自己不懂的事物的时候,大概会有很大的被排挤的感受吧。这样的感受也是黄鼠在许多人都在讨论技术话题的时候,不停地感受到的。对于本身就已经充满焦虑的人而言,这是最不想要的东西之一了。

黄鼠在意着非动森玩家的成员,但作为一个需要 Switch 主机才可以玩到的游戏,想要同时玩到实在是太大的投入了。黄鼠曾构思了一个可以让网络上的人远程玩 Switch 的计划,利用微控制器模拟手柄键入远程玩家的输入,同时利用采集卡或摄像头将画面实时传输给对方。那大概是一个可行的计划,但一定会很复杂吧,而且网络延迟也许会使游戏体验差到无法接受。似乎没有更多人有兴趣的计划,黄鼠也没有动力开始做了。

黄鼠在玩着动物之森。在接近着其他玩家的同时,却不知觉地也在同时疏远更多人呢。这样一个难得的交流的理由,却无法在更多在意的人身上使用。这样的事实,令人担心呢。


除特殊说明外,本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。转载时请注明来自 FiveYellowMice's Blog ,以及原文链接

虽然 RSS 是一种很好的新闻获取方式,但是不同的 RSS 阅读器所显示的内容可能会有很大差距,有些甚至无法显示所有内容。所以为了能够获取到完整的内容,最好还是点开网页链接看。
之所以还是保留了 RSS 的全文输出,是因为摘要输出会被很多人讨厌……

RecursiveG's avatar

WinRAR 恢复记录添加及使用教程

本文中的所有图片及文字均使用 CC0 发布,可任意转载使用。

本文属于疫情期间的摸鱼之作,旨在推广 RAR 压缩格式的正确压缩方法,让资源分享更轻松一些。

获取 WinRAR

先说一下为什么用 WinRAR 而不用 7zip, 因为 7zip 没有恢复记录。在百度网盘等平台分享文件时,文件可能发生损坏,没有恢复记录的话只能尝试重新下载浪费时间,而有恢复记录的话有大概率可以成功修复,正确解压。

国内特供版的 WinRAR 可以免费使用,但是有广告。如果不想要广告,你可以从以下链接下载官方无广告简体中文版

https://www.win-rar.com/fileadmin/winrar-versions/sc/sc20200409/rrlb/winrar-x64-590sc.exe

注意,如果你没有rarreg.key文件进行注册的话依然是有广告的。至于具体的注册方法请自行搜寻。

添加恢复记录

恢复记录需要在创建压缩文件时添加,你需要先勾选添加恢复记录复选框。

然后检查恢复记录的百分比设置。

对于大于 100MB 的大型文件文件来说,默认的 3% 足够使用。如果你的文件非常小,比如只有 几MB 或者 十几MB 你可以考虑增加到 5%。增大这项设置会同时增大文件体积,因此不建议设置得过大,尤其是对于几个 GB 的文件来说。如果你在压缩时忘记添加恢复记录或者是想要修改恢复记录的大小,也可以在事后进行操作:

损坏压缩文件的修复

如果你在解压时遇到“校验和错误”,那么你下载到的压缩文件就是损坏了:

你可以使用“工具”菜单尝试修复它。修复操作会生成一个新的,修复好的压缩包,你需要选择这个新文件的保存位置:

稍等片刻就会生成一个修复后的文件:

你也有可能在修复过程中遇到错误,但只要修复后的文件可以正确解压不报错,就没有问题。
但是只有添加了恢复记录的文件可以使用修复操作,因此所有人在压缩时都添加恢复记录是非常重要的。
如果修复后的文件依然不能正确解压,要么是损坏的部分过多无法修复,要么是资源发布者没有添加恢复记录。
在这种情况下就只能重新下载试试了。

给压缩文件加密

给压缩文件加密是防止文件被和谐的重要方法之一。

分卷压缩

如果你要分享一个非常巨大的压缩包,比如说十几个GB,直接作为一个文件分享一般不是一个好主意,因为下载者有可能下载到中途失败,不得不从头再来。将大压缩包切分成多个较小的文件可以有效减少这种情况的发生。

Linux 用户?

  • 很不幸地,创建或是修复带恢复记录的压缩包都需要rar而不是unrar
  • 如果遇到压缩包包含了文件名过长的文件,可以尝试创建一个 NTFS 格式的磁盘文件,用回环挂载,然后把文件解压进去。
AlisterTT's avatar

我们村的小伙贾洛斯

这两天在玩动物森友会,里面可以邀请很多小动物来岛上居住,其中有一只棕色的绵羊,穿的衣服颜色好像是刚果还是玻利维亚的国旗。

骚话特别多,家里的家具也特别多,特别阔绰,所以我称之为非洲王子。

岛上限制只能居住10个村民,我是一直打算把最后一个居民位留给amiibo的彭花(Rosie)的,结果彭花还没来,居民位已经满了,没办法只能赶走一个人。

正常流程是需要欺负居民,或者好感度非常高的时候对方才会搬走,这都是我不愿意看到的,刚好amiibo的特殊原因可以强制让居民迁走,就选择了才来没几天的杜美。

amiibo的强制交涉 杜美在收拾家具,第二天会离开

本来看到一个没怎么说话的村民要搬走,也没什么感觉,直到在村广场碰见了贾洛斯。他说,杜美要搬走了,希望以后还会相见,所以此时也不会说再见,而是想说一声谢谢。

心里十分不是滋味,尽管是个游戏而已,但还是莫名的愧疚和一点小难过,同时这个骚话不断的花花公子在我心中的形象也大大的改变了。之后一下午他都在裁缝铺门口给花浇水。

无意中做了一次恶霸,同时也发现了我们村的好小伙。

SgDylan's avatar

批量重命名从 Pixiv 下载的图片文件

farseerfc's avatar

SSD 就是大U盤?聊聊閃存類存儲的轉換層

上篇 「柱面-磁頭-扇區尋址的一些舊事」 整理了一下我對磁盤類存儲設備(包括軟盤、硬盤,不包括光盤、磁帶)的一些理解, 算是爲以後討論文件系統作鋪墊;這篇整理一下我對閃存類存儲設備的理解。

這裏想要討論的閃存類存儲是指 SSD 、SD卡、U盤、手機內置閃存等基於 NAND 又有閃存轉換層的存儲設備(下文簡稱閃存盤),但不包括裸 NAND 設備、3D Xpoint (Intel Optane)等相近物理結構但是沒有類似的閃存轉換層的存儲設備。 閃存類存儲設備這幾年發展迅猛,SD卡和U盤早就替代軟盤成爲數據交換的主流, SSD 大有替代硬盤的趨勢。 因爲發展迅速,所以其底層技術變革很快,不同於磁盤類存儲技術有很多公開資料可以獲取, 閃存類存儲的技術細節通常是廠商們的祕密,互聯網上能找到很多外圍資料, 但是關於其如何運作的細節卻很少提到。所以我想先整理一篇筆記,記下我蒐集到的資料,加上我自己的理解。 本文大部分信息來源是 Optimizing Linux with cheap flash drivesA Summary on …

RecursiveG's avatar

CMake 项目生成脚本

C++ 比较尴尬的一点就是缺少比较“傻瓜”的工具库,不得不依靠第三方来补充。想快速开始写个小的 Demo 的时候光找库就花去不少时间。于是糊了一个脚本去自动生成这些基础的东西。放在这里方便自己以后参考。

用到的库列表:

  • {fmt}:
farseerfc's avatar

柱面-磁頭-扇區尋址的一些舊事

在 SSD 這種新興存儲設備普及之前,很長一段時間硬盤是個人計算機的主要存儲設備。 更往前的磁帶機不常見於個人計算機,軟盤的地位很快被硬盤取代,到 SSD 出現爲止像 MiniDiscDVD-RAM 等存儲設備也從未能挑戰過硬盤的地位。硬盤作爲主要存儲設備,自然也影響了文件系統的設計。

這篇筆記稍微聊一聊硬盤這種存儲設備的尋址方式對早期文件系統設計的一些影響,特別是 柱面-磁頭-扇區尋址(Cylinder-head-sector addressing, 簡稱CHS尋址)的起源和發展。 大部分內容來自維基百科 Cylinder-head-sector 詞條 這裏只是記錄筆記。現今的硬盤已經不再採用 CHS 尋址,其影響卻還能在一些文件系統設計中看到影子。

柱面、磁頭、扇區以及相關術語

磁盤示意圖(來自維基百科 Cylinder-head-sector 詞條
chs-illustrate-trans.svg

如右圖所示,一塊硬盤(Hard Disk Drive, HDD)是一個圓柱體轉軸上套着一些磁碟片(platter), 然後有一條磁頭臂(actuator arm)插入磁碟片間的位置 …

imi415's avatar

Archlinux上Buildroot的基础使用

如何使用Buildroot为自己量身定制Rootfs
farseerfc's avatar

Btrfs vs ZFS 實現 snapshot 的差異

zfs 這個東西倒是名不符實。叫 z storage stack 明顯更符合。 叫 fs 但不做 fs 自然確實會和 btrfs 有很大出入。
我反而以前還好奇為什麼 btrfs 不弄 zvol , 直到我意識到這東西真是一個 fs ,名符奇實。
—— 某不愿透露姓名的 Ext2FSD 開發者

Btrfs 和 ZFS 都是開源的寫時拷貝(Copy on Write, CoW)文件系統,都提供了相似的子卷管理和 快照(snapshot)的功能。網上有不少文章都評價 ZFS 實現 CoW FS 的創新之處,進而想說「 Btrfs 只是 Linux/GPL 陣營對 ZFS …

SgDylan's avatar

在 Photoshop 中使用赛璐璐动画风格

赛璐璐动画因其制作工艺有着独特的画面质感,以下是咱为了模拟这一风格的一点探索。

's avatar

猫咪!猫咪为什么这么可爱!

猫咪真是太棒了!圆圆的身体和脑袋,尖尖的、竖立着的耳朵,灵活机动的尾巴,宝石般闪亮发光、还含有长条瞳孔的眼睛,柔软却含有锋利爪子的脚掌。它们好奇的行为总是无法被人类理解,却仍然给我们带来了无尽的快乐荷尔蒙(如果没有闯祸的话)。它们抓着毛茸茸的草,追赶着毛茸茸的线团,最后翻滚在地上也变成一团形状不固定的毛茸茸。如果我更有经验也更有文笔的话大概能够写出更多,不过我想不必多说,猫咪超级可爱,应该是许多人都会认同的事情了。可是为什么,为什么它们会这么可爱呢?

准确地说,为什么许多人类会觉得猫咪非常可爱呢?

这是我在刚意识到猫咪的可爱的时候(大概是高中)还没有想过的问题,那时我面对可爱的反应最多还只是低头与闭上眼睛微笑,但这样的感情逐渐地,从起初的“呀,蛮可爱的”,变成了“喔,很可爱呢”,变成了在网上疯狂地阅览含有猫咪地图片和视频,然后又变成了抱着一块屏幕遮住脸发出毫无意义的呐喊这样的行为,最后到达了我现在的样子(无可救药了)。换句话说,就是“深陷泥潭,无法自拔”。后来,在一次日常地对猫咪的可爱做出感叹的时候,我才像每一个发厨的人类一样,做出了这样的感叹:猫咪!猫咪好可爱呀呀呀啊啊啊!猫咪为什么这么可爱!

在发厨完毕后,我才发觉,这可不是随便的发厨中的呐喊呀,这可是一个非常正经的问题,猫咪这么可爱,一定是有原因的,所以这个原因是什么呢?我从此在心中记上了这个问题,虽然还没有开始去主动寻找答案,但还是长期得带着这个问题,在生活中等待着答案。

然后懒惰又拖延的我就把这件事忘记,封存在记忆的地窖中了。

在一个平常地耍废看 YouTube 的夜晚,我遇到了这样一个视频,它是出自 Vsauce 频道的《Why Are Things Cute?》。 Vsauce 是我非常喜欢的讲述知识的频道,于是我便点开来观赏了。视频中说,我们之所以会觉得东西可爱,是因为它们具有人类婴儿的特征,像是好奇心、较小的身体,大大的眼睛,圆圆的脸蛋。因为只要看到婴儿就觉得可爱,于是便想要抱抱蹭蹭,想要保护与关怀,那是有助于婴儿的生存的,也就是有利于人类生命的延续的,所以人类便得以进化出了“觉得可爱”的能力。

可是这个视频没有说服我,因为按照这样说的话,我们都应该觉得人类的婴儿是世界上最可爱的东西才对,可是这对于我来说显然是不对的,婴儿那么吵又烦的东西,怎么可能有猫咪可爱!难道是我的神经有些异常,大多数人都是认为婴儿最可爱才对?可是认为猫咪或者其它宠物比人类婴儿可爱的人显然也不占少数,有这样多的人,那应该不能够用“个别的异常”来解释才对。所以问题还是没有完全解决,为什么猫咪这么可爱,比人类婴儿还要可爱呢?

那是在我近期阅读到的书《绑架本能的世界:影响所有决定的“超常刺激”理论》(英文维基百科: Supernormal Stimuli)才找到了答案的问题。那是由 YouTube 频道啾啾鞋在视频《悄悄潛入你我生活中的「超常刺激」你注意到了嗎? 》知乎链接)中讲述并推荐的一本书。

书中所说的“超常刺激”,是指的刺激了原始本能的人造模仿物,但是却比那个本能本该应对的自然中的事物更鲜明和夸张,所以反而更加具有吸引力。书中的开头举例了欧洲杜鹃,一种把蛋下在别的种类的鸟的巢穴中的鸟,小鸟寄生于那个巢穴的宿主,让它们来孵化和喂养。杜鹃的蛋一般都会比宿主鸟的蛋更大、更亮,小鸟的喙也更宽、更红。出于本能地,对宿主鸟来说,又大又亮的蛋和又宽又红的喙都是更加好的,因此宿主鸟不但没有认出那个寄生鸟,却反而给予它比自己真正的孩子更多的关怀。这种杜鹃地鸟蛋和小鸟,就是对于宿主的“超常刺激”。

作者是一名演化心理学家,那是一门把人类以与动物的同种方式来观察的学科。也就是说,既然动物会被假的鸟蛋所欺骗且更偏爱,那么人类也会做同样的事情,只是人类的超常刺激并不从外种来,而是人类的现代社会自己创造的。

书中讲到了性,因为 A 片中演绎的场景比现实更加刺激,所以人类非常喜欢看;书中讲到了外貌,因为万里挑一的模特与偶像比现实中能够见到的人更好看,所以人类会去更多地追求他们;书中讲到了小说,因为虚构的故事比现实更精彩,所以人类会沉迷与其中;书中讲到了垃圾食品,因为盐与卡路里在原始社会非常稀少,所以人类会本能地想要大量吃下;书中讲到了知识,因为了解得更多会让自己更容易在原始丛林中存货下来,所以人类会本能地无尽地对事物好奇(对,超常刺激不一定都是坏事)。

当然,书中也讲到了可爱。在阅读讲述可爱的章节的时候,我终于明白了。

之前提到的 Vsauce 的视频说得没错,可爱是为了让动物能够爱护自己的后代而产生的东西。我们面对可爱的东西产生的反应,那是本该对人类婴儿产生的。我们会认为是可爱的特征,也是本应该在人类婴儿或者幼年人类身上找到的。列举一些可爱的特征的话,大概是这样的:

  • 小身体
  • 大脑袋
  • 大眼睛
  • 小鼻子
  • 圆脸
  • 胖乎乎的四肢
  • 笨拙的协调性
  • 爱玩
  • 亲热
  • 好奇心
  • 无助的感觉
  • 想要被呵护

都是人类后代会拥有的特征,对吧?可是尽管这些特征都是从“人类后代”的模子里面出来的,世界上却存在一些东西,比人类后代更加显著地具有这些特征,那些比人类后代更加可爱的东西中之一就是——猫咪。猫咪有着圆圆的脑袋,亮晶晶的大眼睛,毛茸茸软乎乎,跳来跳去充满活力,带着满满的好奇心探索四周……列举出来的话许多特征都被满足了,而j几乎每一项都比在人类婴儿中能找到的特征更夸张,换句话说,更可爱。

也就是说,猫咪,是对我们人类的“可爱”反应的超常刺激呢。

当然啦,也许不是每个人都认为猫咪是最可爱的,那么狗狗呢?那个被人类驯化以来就在不断地被人类以对人类有益的特征筛选培育的物种,在很少需要放羊的现代,可爱就是最重要的特征了。狗狗的可爱,可以说是被“研制”出来的。如果不是特别喜欢宠物的话,那么皮卡丘呢?卡比呢?还有各种各样奇形怪状的吉祥物呢?还有请问您今天要来点兔子吗?那些由“可爱工程师”(也就是艺术家)们一笔一笔创造出来的可爱,怎么可能会不使大部分人类痴迷呢?要让真正的人类婴儿与它们相比较的话,也就太不公平了。

简而言之:猫咪为什么这么可爱?因为它具有我们的后代会拥有的特征,却更加显著和夸张。


看到这里,你有未觉得,把“可爱”描述成“本能”,站在用这样理性的方式去剖析,会不会使人觉得可爱很是件低下的事情,而一个理性的人是应该抛弃的呢?我不这样认为,人类是逃不掉被本能支配的,所以被“可爱”这样的本能支配完全不是坏事,倒不如说,我们来一起拥抱它吧~

对了,还有一件令人开心的事,那在生物学上被称作“幼态延续”,它是指一种生物在成年后仍然持有幼年特称的状况。野生的狼在幼年时与狗一样汪汪叫,而成年后就变成了嗷呜;在被驯化成为狗之后,便一直学不会嗷呜,成年之后也继续汪汪叫,这是幼态延续的成果。猩猩在成年后,鼻子部分的脸会更加突出,而幼年猩猩的脸要短很多;人类拥有现在这样的脸,也是猩猩幼态延续的结果。同样,人类所拥有的其他动物无与伦比的好奇心,也是幼态延续的结果。换句话说,人类就是幼齿的猩猩。幼齿使我们更具竞争力,更容易生存,生活越来越好。我们喜欢幼齿,以致于我们在寻找伴侣的时候,都会更加喜欢幼齿的人类。对,合法正太和萝莉最棒了!而且因为这样的择偶趋势,人类的幼态延续会继续下去,所以进化的趋势就是,人类会变得越来越可爱!

唔,因为是在凌晨快要到 4 点钟的时候完成这篇文章的,所以请原谅我在整篇文章中只加入了一张模糊的猫咪照片呢……

最后,猫咪可爱!喵!


除特殊说明外,本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。转载时请注明来自 FiveYellowMice's Blog ,以及原文链接

虽然 RSS 是一种很好的新闻获取方式,但是不同的 RSS 阅读器所显示的内容可能会有很大差距,有些甚至无法显示所有内容。所以为了能够获取到完整的内容,最好还是点开网页链接看。
之所以还是保留了 RSS 的全文输出,是因为摘要输出会被很多人讨厌……

farseerfc's avatar

ZFS 分層架構設計

2020年2月9日更新過

ZFS 在設計之初源自於 Sun 內部多次重寫 UFS 的嘗試,背負了重構 Solaris 諸多內核子系統的重任,從而不同於 Linux 的文件系統只負責文件系統的功能而把其餘功能(比如內存髒頁管理, IO調度)交給內核更底層的子系統, ZFS 的整體設計更層次化並更獨立,很多部分可能和 Linux/FreeBSD 內核已有的子系統有功能重疊。

似乎很多關於 ZFS 的視頻演講和幻燈片有講到子系統架構,但是找了半天也沒找到網上關於這個的說明文檔。 於是寫下這篇筆記試圖從 ZFS 的早期開發歷程開始,記錄一下 ZFS 分層架構中各個子系統之間的分工。 也有幾段 OpenZFS Summit 視頻佐以記錄那段歷史。

早期架構

早期 ZFS 在開發時大體可以分爲上下三層,分別是 ZPL, DMU 和 SPA ,這三層分別由三組人負責。

最初在 Sun 內部帶領 ZFS …

Kouga's avatar

使用 Linux network namespace 简化 VPN/BT 软件配置

  1. 前言

    因为家里的壮天鹅不想跑在 OpenWRT/树莓派 (ArchlinuxARM)上,导致我必须将 rtorrent 和 StrongSwan 都跑在 Gen8 上。因为 ESXi 各种坑的缘故,我又没给 Gen8 开启底层虚拟化,所以此时配置网络栈就比较蛋疼了。

    好在调查了一番之后,找到了 Network namespace 这个方法,它能在不同命名空间下跑完全隔离的 IP栈,这就让事情一下子简单了喵~

  2. 准备工作

  • Linux Server 一台(我这里是Gen8)
  • Kernel > 4.10 (其实版本低一点也没大问题,不过我这里要配置 XFRM 壮天鹅,所以必须高一点
  • iproute2 (新版本 IP 工具包,替换 ifconfig arp netstat route 等命令
  1. 网络规划

因为入户的 电信光猫 绕不开,所以我这里其实饶了些路喵~现在物理链路和IP段落如图所示:

graph TD
  I[Internet/ISP 光猫] -- 192.168.1.a --> R1[OpenWRT Router]
  Switch --> G8[Gen8]
  I -. 192.168.1.b .-> G8
  R1 -. 172.16.x.x .-> P[Phone & Other Device]
  R1 -- 172.16.x.x --> Switch
  Switch --> PC[PC & LAN DEVICE]
  1. 配置 VPN

利用 XFRM 和 ipsec 设备来做路由,比单纯的壮天鹅好配置多了,代价只是延迟稍微增加但是吞吐量没大影响喵~

ip netns add vpn

ip link add ipsec0 type xfrm dev eth0 if_id 495
ip link set ipsec0 netns vpn

ip netns exec vpn bash -c "ip link s-et ipsec0 up"

# 然后在该命名空间内导入各类路由表
ip netns exec vpn bash route.sh
  1. 配置 BT
ip netns add bt # 添加bt的ns

#因为 Wifi 链路不好直接迁移,所以用 macvlan 克隆一个vlan0设备
ip link add link wlp0sxxx name vlan0 type macvlan

ip link set vlan0 netns bt #移动克隆设备去 bt

# Inside bt netns stack. 执行初始化
ip netns exec bt bash -c "ip link set up vlan0; ip addr add 192.168.1.b/24 dev vlan0; ip r a default via 192.168.1.1 dev vlan0"

# 启动 BT 请用这种方式 ~~sudo 套娃~~ :
sudo ip netns exec bt sudo -u rtorrent rtorrent

OX's avatar

斐訊 R1 音箱關閉開機提示音

斐訊倒閉了,R1音箱早就不能正常用了。
前段時間有大神出了一個刷機的方案,但是要拆機自己焊接端口,比較麻煩,我只需要能播AirPlay就可以了,所以就沒有動力去拆機。
但是每次開機的那個提示音很吵很煩,有時候莫名其妙還會喚醒智障小訊,一直在想能不能把斐訊全家桶幹掉。
但是一直沒有出不拆機就能root的方案。
終於。今天晚上無聊,自己摸索出解決方案,開機再也沒有煩人的提示音,叫它也不會再應答,符合我自己的使用場景,現在把方法分享出來,其實核心內容很簡單,就是通過adb調用pm命令把斐訊全家桶hide掉就可以了。

下面是具體方法

先用斐訊AI的App讓R1連上Wi-Fi,然後找到R1的IP地址,然後

adb connect [R1 IP地址]

然後運行下面的命令

adb shell /system/bin/pm hide com.phicomm.speaker.productiontest
adb shell /system/bin/pm hide com.phicomm.speaker.bugreport
adb shell /system/bin/pm hide com.phicomm.speaker.otaservice
adb shell /system/bin/pm hide com.phicomm.speaker.player
adb shell /system/bin/pm hide com.phicomm.speaker.device

需要留意的是,com.phicomm.speaker.launcher 不可以hide掉,不然頂部的音量調節功能會失效。另外,為了讓開機的音效消失,需要把com.phicomm.speaker.device禁用,但是這樣按三下頂部按鈕開啟藍牙的功能就會失效

雖然隨時都可以通過執行adb shell /system/bin/pm unhide com.phicomm.speaker.device命令恢復藍牙的功能,但是每次這個app啟動,都會有很震耳的音效,每次執行命令之前都要注意R1的音量大小。

然後重新啟動就可以了:

adb shell reboot

想復原的話,只需要將命令的hide改為unhide,就可以了,如果部分功能還是沒有恢復,可能需要重啟。比如像這樣:

adb shell /system/bin/pm unhide com.phicomm.speaker.productiontest
adb shell /system/bin/pm unhide com.phicomm.speaker.bugreport
adb shell /system/bin/pm unhide com.phicomm.speaker.otaservice
adb shell /system/bin/pm unhide com.phicomm.speaker.player
adb shell /system/bin/pm unhide com.phicomm.speaker.device
// 重啟的命令:
adb shell reboot

題外話

如果想乾脆一點,可以用/system/bin/pm uninstall --user 0 命令把上面的全家桶徹底刪掉,但是這個操作不可恢復,特別是com.phicomm.speaker.otaservice 如果徹底幹掉的話,想刷機就只能拆開,手工焊接上調試端口刷機了。

這篇文章 斐訊 R1 音箱關閉開機提示音 最早出現於 OXの胡說八道

依云's avatar

自制大上 Paperlike HD「驱动」

本文来自依云's Blog,转载请注明。

大上 Paperlike HD 使用有一段时间了,然而有一点我对其非常不满:它需要以 root 权限运行一个图形界面的程序。具体麻烦的地方是:

  • 图形界面的程序不方便使用 systemd 管理,那个窗口我得找个地方安放,并且在登出图形界面或者 Xorg 出问题时会随之关闭
  • 即使持续运行此程序,当几秒内不使用键盘或者鼠标的时候屏幕就会休眠。这导致我无法将此屏幕用于关注程序日志或者聊天工具的新消息。
  • 它持续不断地执行多个线程的任务(读取键盘事件、读取鼠标事件、通过 ioctl 与设备通讯),耗费了不少 CPU
  • 在屏幕尚未连接时,它的运行会导致内核不断输出日志「drm_dp_i2c_do_msg: 2 callbacks suppressed」

我曾多次想自己实现一个符合自己使用习惯的方案。

首先当然是 strace 上去啦。这会得到许多类似这样的消息:

ioctl(9</dev/i2c-1<char 89:1>>, _IOC(_IOC_NONE, 0x7, 0x7, 0), 0x7f47d8805b70) = 1
nanosleep({tv_sec=0, tv_nsec=100000000}, NULL) = 0
ioctl(9</dev/i2c-1<char 89:1>>, _IOC(_IOC_NONE, 0x7, 0x7, 0), 0x7f47d8805be0) = 1
nanosleep({tv_sec=0, tv_nsec=200000000},  <unfinished ...>

可以看到它在对 /dev/i2c-1 这个文件进行操作,但是具体内容是个指针,strace 看不到。

我尝试过使用大名鼎鼎的 IDA 的免费版本来分析其具体行为。但我对 IDA 并不熟悉,并且 IDA 只支持 Intel 语法的汇编,而我见的 AT&T 语法的比较多,Intel 的很多表示法我不太能看懂。

后来根据 ioctl 的请求参数找到这个文档,里边有这些 i2c 消息的结构体定义。于是想着先把 ioctl 的数据弄出来看看。一开始尝试用 gdb 去看那个地址的数据,但想到数据是变动的,再加上 gdb 查看太累了,就想起了通过 LD_PRELOAD 去 hook ioctl。

所以又要写 C 了?并没有呢!C 写起来那么不舒服,还是用 Rust 吧~然后搜了一下,还真有现成的用于写 LD_PRELOAD 库的 crate,比如我用的 redhook。不用自己去 dlopen,不用在各处写很多错误处理代码,很容易就写好了。代码链接

拿到了 ioctl 里用的消息,我不用理会它具体是什么意思,也没办法去猜测,自然是把它按大上提供的程序那个样子给发过去了。于是又一个 Rust 程序出来了。

一开始写的时候不小心往 unsafe 代码块里传了个悬空的指针,导致程序不工作,调试了好久,甚至我都把完整的整个流程给复刻了一遍。这要是用 C 写文本解析的逻辑可头疼了,不过 Rust 写起来就跟 Python 差不多的了~

至于那个 bug,是 Rust 语句中的临时对象(此例中是包含一个对象的数组)会在语句结束之后就释放导致的。有点坑,但也没什么好的办法。

程序运行起来之后就会保持 Paperlike HD 显示器可用,不会报错让装驱动,也不会过几秒就休眠了。我大幅降低了消息发送的频率(由差不多每秒三次改成了三秒才一次),再加上不需要读取键鼠输入,所以 CPU 占用也会大幅减少。另外内核也不会再打印「drm_dp_i2c_do_msg: 2 callbacks suppressed」的消息了,大概是因为消息频率降低了?重新连接显示器之后,和大上原版程序一样有概率出现显示器亮蓝灯、屏幕不工作的情况。拔插一下电源可解。

当然啦,如果有人要用这个程序的话,记得先确认一下你的 i2c 设备文件路径(去 lsof 大上原版程序就行)。另外,使用此程序后果自负,由此造成的任何设备损坏或者其它损失,我都不负责任的哦~

17windy's avatar

去海边:信使 游戏更新日志

V0.63 0124 版本更新日志

增加:
1,新增剧情关卡,大家春节快乐!

修复:
1,部分怪物AI修复

优化和调整:
1,目前可以获得的基础芯片可以堆叠了
2,角色平衡性微调

V0.625 0117 版本更新日志

修复:
1,修复了第二关狼BOSS可能会瞬间造成大量伤害的问题
2,修复了某个图标错误

优化和调整:
1,采用了新的关卡进度提示UI
2,普通怪物的血条显示修改为会自动隐藏

增加:
1,所有角色增加了不同的自回血能力

V0.62 0116 版本更新日志

优化和调整:
1,狼现在更倾向于灵活的中距离攻击与穿插,拥有灵活但不是特别精确的中距离普攻,拥有快速恢复的短距离冲刺
2,重制了狼的冲刺技能视觉效果
3,凤的技能伤害微调
4,谬的护盾技能恢复更快
5,降低了现有关卡的难度

增加:
1,帮助按钮现在可用
2,增加场景标题和相关过渡

V0.61 0115 版本更新日志

修复:
1,修复狼的二技能偶尔失效
2,修复界面按钮偶尔失效
3,修复背包按钮导致游戏持续暂停状态
4,修复背包按钮偶尔导致角色无法跳跃
5,修复关卡2的植被结构
6,修复关卡1的场景孔洞和出墙操作
7,修复关卡2三尾BOSS的攻击持续时间
8,修复关卡2结束攻略后的持续箭头

优化和调整:
1,优化部分UI设计
2,优化部分怪物AI
3,调整玩家角色狼的普攻范围
4,调整玩家角色凤的部分数据
5,整体调整玩家角色的生存数据

增加:
1,关卡1增加部分指引
2,现有怪物增加攻击前摇和攻击特效
3,部分新剧情资源预载

RecursiveG's avatar

简易内核开发环境

近期尝试了一下写 Linux 内核代码,于是把折腾过程记录一下,方便以后参考。本文默认使用 x86_64 架构以及 Linux 作为宿主系统。

使用 QEMU 运行 Linux 内核

在开始写代码之前,我们需要先准备好模拟器用于运行 Linux。我这里用了QEMU,你也可以用 VirtualBox 之类的虚拟机。一般来说,我们需要一个内核可执行文件(内核本体)和一个 initramfs 镜像(提供用户态程序)。当内核被加载后,它会自动载入 initramfs 镜像,并执行其中的/init程序。由于这一节的重点是 QEMU 配置,所以我直接使用宿主机的内核和 initramfs。以我的 Archlinux 系统为例,内核文件是/boot/vmlinuz-linux,initramfs 文件是/boot/initramfs-linux.img。使用以下命令启动 QEMU,按Ctrl-A x退出。

1
2
3
4
5
6
7
qemu-system-x86_64 \
-kernel /boot/vmlinuz-linux \
-initrd /boot/initramfs-linux.img \
-nographic -append "console=ttyS0" \
-m 512 \
--enable-kvm \
-cpu host
  • -kernel 指定内核可执行文件。
  • -initrd 指定 initramfs disk 镜像文件。
  • -nographic -append "console=ttyS0" 禁用视频输出并使用串口作为终端。
  • -m 512 设定内存。
  • --enable-kvm 使用KVM。
  • -cpu host 使用宿主机的 CPU 特性。

你应该能看到一些系统启动的信息以及无法挂载根分区的报错,这是正常现象,因为我们没有提供任何磁盘文件。你应该可以进入一个紧急修复 Shell, 执行一些简单的如 ls cd 之类的命令。

's avatar

新的家庭服务器:MicroServer Gen10

我的上一代家庭服务器是一台技嘉的 GB-BXBT-2807。其实作为家庭服务器来说,它是个还行的选择,但是内部只能安装一块 2.5 寸 9.5mm 以下的 SATA 硬盘,而且只有一个 USB 3.0 和两个 USB 2.0 接口。

我家的上传速率其实还是可以的,而随着我开始尝到私有云的甜头,我陆续增加了三块硬盘。然而因为它只有一个 USB 3.0 接口,所以最后我的家庭服务器变成了这个样子。

看来,我需要一台真正的多盘位 NAS 服务器了。我一度考虑过以下方案:

  • 搞个蜗牛星际。但是在 KK 家摸到真机以后,我对它的做工倍感失望。
  • 买个迎广 MS04,自己从头攒一台 NAS 出来。但是这样的话,总支出大概不会跟买一台 Gen10 差太远,而且保修这个问题会变得比较复杂。

最终,我还是决定购买 HPE ProLiant MicroServer Gen10。

可以说,这款主机对我来说,几乎是完美的:

  • 4 盘位(虽然并不是热插拔)
  • 低功耗(x3216 的 TDP 只有 15w)
  • 主机本身是正常的 x86 PC,可以很方便的安装各种主流 Linux 发行版
  • 做工良好,可靠性强
  • 两个 PCI-E 插槽(分别为 x8 和 x1),未来升级万兆会很方便
  • 接口丰富:四个 USB 3.0、两个 USB 2.0、两个千兆以太网口、两个全尺寸 DP 和一个 VGA
  • 预装 8GB DDR4 ECC 内存
  • ……

就这样,我以 2.8k CNY 的价格在美亚拿下了这玩意。其实我一开始考虑从德亚买的,只要 2.5k(当时),但是并不能直邮到中国。为了省事,我就直接在美亚买了。

安装

近两周以后,它抵达了我家。到手的第一件事,当然是拆开检查一下了。箱子中并没有太多的东西(主机、美标品字电源线和一堆小册子),不过对于它的目标用户来说大概够了吧。

顺便那条品字电源线用的是带接地的美标插头,这使得它并不能在新国标的插线板上使用。所以如果你家没有多余的品字电源线,别忘了单独买一条!

PSU 是台达的 flex 电源,宽电压,最大输出 200W;输出有 24pin x1、大 4P x1 和小 4P(软驱电源插头)x1。

接下来就要安装硬盘了。这玩意并没有独立的硬盘仓,所以你需要这样安装硬盘:

  1. 从硬盘仓顶部拧下来 4 颗螺丝
  2. 把这 4 颗螺丝拧到硬盘两侧最左面和最右面的孔位上
  3. 把硬盘正面朝右,稍微用力的推进硬盘仓。移除硬盘也是超级容易的(见硬盘仓左下角贴纸):

然后就开始安装系统 SSD 了。这玩意并没有 M.2 NVMe 插槽,但是在主板上提供了一个额外的 SATA 接口,所以我买了一块普通的 SATA SSD。

然而,Gen10 的 PSU 并没有多余的电源线,你能利用的只有那个小 4P 插头。所以你需要买这样的转接线:

我那个 Gamemax 机箱正好附送了一根这样的转接线,所以我就直接拿来用了。

至于 SSD 的固定……Gen10 上侧的那几个空位是给你固定笔记本光驱用的,所以你的 SSD 大概就只能这样放着。当然你可以再买个笔记本光驱位转硬盘位之类的东西,不过 NAS 这种东西本身也不需要经常挪动,再说 SSD 里面并没有活动的部件,所以我就无所谓了。

系统

我选用的是 Ubuntu 18.04 LTS。因为:

  • Ubuntu 是我熟悉的发行版系列
  • 我拥有充分的控制能力

安装过程没什么坑,一切都在预料之中。随后,我通过 apt 安装了各种我需要的软件(nginx、Aria2、Transmission 等),写好 /etc/fstab 表,就大功告成了。

目前,我的硬盘使用情况如下:

硬盘 安装位置 用途
东芝 240G SSD(TR200) 顶部 系统盘
东芝 2T 监控盘(DT01ABA200V) 硬盘仓 1 一般文件存储
西数 4T 蓝盘(WD40EZRZ) 硬盘仓 2 BT/PT 下载

同时,我还有一块 2T 的东芝移动硬盘用于冷备份;我会定期将它连接到 Gen10 上,运行我的脚本来进行 rsync。

嗯,我觉得目前就足够了。等将来有需求的话,再考虑加硬盘吧。

系统运行

我之前的确考虑过 CPU 的问题,毕竟这玩意是焊在主板上的。但我的需求不高(就是存取文件和下载啥的,顺便开个 web 服务器),即使是看动画的话,解码都在客户端完成,所以也就 Gen10 了。

实测我的 CPU 负载一般可以控制在 1.0 以下;如果我真的需要算力,大概我就直接拿主力机器搞事了。


farseerfc's avatar

和萌狼交換問題

很抱歉萌狼很早就提過交換問題的事,被我一直咕咕了許久。 拖延症晚期有藥麼

我的提問和萌狼的回答

可以去萌狼的博客上看呀

Q1:除了博客的「关于」页面以外,还愿意再向咱介绍一下自己嘛?

介紹自己啊。 寫了刪刪了寫,不知道該介紹點啥 就說點自己的興趣?

喜歡自由開源軟件,喜歡 Arch Linux 。喜歡這些倒不是出於 RMS 和 FSF 那樣道義上的原因, 我覺得商業軟件公司要賺錢吃飯也是無可厚非的。

喜歡自由軟件是因爲,當我需要知道它到底怎麼工作的時候,有可能去挖代碼,必要的話能去改代碼。 當然我一個人肯定不能讀所有在用的軟件,但是我知道我有讀和修改代碼的權利的話, 那麼我認識的朋友們也同樣有這樣的權利,我不認識的廣大社區有千千萬萬的人也同樣有這樣的權利, 從而我相信當我遇到問題的時候不至於卡在某些人某些公司某些集體的決策上而無法解決。

基於這個理由,我對開源社區也同樣有公開全部細節的期待。我喜歡 Arch Linux 因爲即便它的內部決策只是一小波人,但是導致決策的討論以及決策的執行方式全是公開的,可以在網上翻閱, 可以追根溯源,這讓我有種安心感。就像我不喜歡 Manjaro 的一點是它有太多細節是翻閱不到的, 雖然它也是開源社區,但是打包細節翻閱不到,包列表翻閱不到,決策的制定和執行的過程也翻閱不到 …

Roy Binux's avatar

家居自动化

从 Google Assistant, Amazon Alexa, Apple Homekit 到米家,智能家居自动化已经不是什么新鲜的概念了。对于我来说,入坑的契机也非常简单:我不想下床关灯。然后随着想要自动化的场景增加,智能设备(可编程设备)就越来越多。这篇文章就根据自

Kouga's avatar

给 Ghost 添加语法高亮和图表支持

Ghost 比较讨厌的一点就是,各种基础东西都不存在,得通过各种方式(主要是插入代码)来添加功能……

  1. 准备工作
graph LR

A(打开 Ghost 后台管理)-->B(设置 Settings)
B-->C(代码注入 Code Injection) 

  1. 增加语法高亮 prism

语法高亮比较简单,我使用 CDNJS - prism 作为CDN源,并且使用了 prism-autoloader 来自动载入需要高亮的语法插件。

Site Footer 里插入下面代码:

<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/components/prism-core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/plugins/autoloader/prism-autoloader.min.js"></script>

如果想要改变代码高亮风格,可以在 prism-themes 里寻找中意的主题,并插入到 Site Header 里面:

<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.17.1/themes/prism-tomorrow.min.css"  rel="stylesheet" />
  1. 增加图表支持 mermaid

同样是使用 CDNJS - mermaid, 不过这次代码稍微要做一下修改,因为我们已经用了 prism 来高亮语法,DOM 会被修改成 pre.language-mermaid>code.language-mermaid 状态,此时需要筛选一下DOM并替换一下样式表。

Site Header 里插入下面代码,主要是修复样式表:

<style>pre.language-mermaid {background: none;border: none;}</style>

Site Footer 里插入下面代码:

<script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/8.4.4/mermaid.min.js"></script>
<script>$(document).ready(()=>{mermaid.init({}, "code.language-mermaid")});</script>

这样我们就可以很简单的在文章里插入流程图了::

    ```mermaid
    graph LR

        A(打开 Ghost 后台管理)-->B(设置 Settings)
        B-->C(代码注入 Code Injection) 

    ```
ホロ's avatar

和 farseerfc 交换问题!

终于还是咕咕出来了?

虽然咱催了好久但是最后因为咱在年前把笔记本寄回去的原因结果自己咕了……

farseerfc 的问题和咱的回答~

Q1: 萌狼最開始是如何接觸到 Linux 的呢?有什麼契機導致使用 Linux 麼?

之前有订阅个叫电脑报的报纸来着,然后有一期介绍了 Ubuntu ,然后就下载来试了试。 (结果马上就把 Windows 的引导搞炸了 😂)

后来咱第一台笔记本运行 Windows 10 有点吃力的时候就往上面装了 Debian, 开始试着做主力了。再后来试着自己搭 Shadowsocks 的服务器,在 VPS 上用上了 CentOS。

看到了这篇文章 开始用 Arch Linux 了。最近是看到了 FSF 的自由发行版推荐,然后也开始用 Parabola 了 🤔

Q2: 這個筆談又是如何開始的呢?

不知道那一天的晚上咱更新友链的时候,就突然想到,友链归友链, 也想稍微深入的了解一下一个个名字后面的人呐,介于咱不想露面也不想出声,就退而求其次(?)的这样开始了。

只是咱提问的话,对方会不会觉得血亏 😂 于是就有了让咱回答对方提出的等量问题的决定(?)。

Q3: 音遊和 Linux 哪邊對萌狼而言更重要?

TL;DR: 两边不会因为各种原因顾此失彼。

一样重要,一个是咱为数不多的娱乐(尝试其它类型的游戏的尝试几乎都以发现自己苦手告终……), 一个咱还有兴趣乱钻(?)

或是一样不重要,一个因为成绩不及(不管是已经很强的还是后来居上的) 自闭,一个因为知识和经验不足(又轻易不敢胡乱提问(自闭。嘛反正都差不多就是了(

Q4: 如何看微軟喜歡 Open Source / Linux 整件事?

爱“开源”嘛,改不了它骨子里是个私有软件公司的本质鸭, 于是该黑的继续黑(大雾)。什么时候它们说自由化的时候再说吧(?)

Q5: 對我的印象如何?

完美潇洒的好(?)爸爸(??),咱认为是 #archlinux-cn 里为数不多向往自由的 GNU/Linux 用户,使(cai)用(keng)经验丰富, 经常能提出关键的建议,以及为数不多的能感受到咱的变化还能安慰咱的人。

Q6: 社區水聊時,什麼樣的話題會令萌狼覺得反感,以至於想離開社區避開討論?

(以下排名不分先后)

  • 群聊看着很火热但是咱一说话就完全没人搭理的时候;

  • 令不行禁不止的时候,例如群聊管理员在限定主题的群聊带头跑题还没有自觉的。

  • 居高临下的,例如轻易断定朽木不可雕然后劝退的(谁不是那么走过来的呢…… 也有可能是咱视野狭窄没见过那种天生神力的人)。

  • 强行安插印象的。(啥,例如说啥都会“奉承”自己的时候,还是不懂……)

  • 一言不合换掉的,就像啥桌面出问题都吹说换某桌面的。

  • 有人讨厌咱的时候,但是只要见不到就没什么大碍。

    (不过再想想,咱自己都不保证完全没有问题,也有不时说些怪话的时候,似乎没有什么权力要求别人的样子……)

Q7: 有什麼話想對我說嘛?

要努力当个好爸爸哟~ 以及咱们有没有<s 在没有黑暗的地方</s 见面的一天呢? (为什么咱每次说到见面都能想到那种地方2333……)

那么下一个是?

其实还没想好 😂,如果咱友链里剩下的谁愿意自告奋勇也热烈欢迎啦 ……

熟悉的感觉+=1……

's avatar

我的 2019

好耶,我终于把 2019 年瞎鸡巴过完了!

感觉今年反而是相当平淡的一年,所以其实并没有太多的要讲。都是无病呻吟

成就

  • 考到了 C1 驾照
  • 获得了 5000 元的奖学金(第一次!)

面基

今年去了广州、福州和深圳,在线下见到了 qwe7002(又一次)、whitebox、寿司同学和 kookxiang。

我们一起玩了马车 8,一起进行技术交流,还在 kookxiang 家参观了多种灵车。然后 tcdw 对蜗牛星际的做工倍感失望,一怒之下买了 HPE Microserver Gen10。

开心!

买买买

今年买到了不少很棒的新硬件:

  • Nintendo Switch
    相当便携;上面的第一方游戏真的太好玩了,还有很多不错的第三方游戏。吹爆!
  • Dell UltraSharp U2518D
    颜色非常舒适的 2K 显示器,还内置 USB Hub!
  • AOC P2491VWHE/BW
    还行的 1080p 显示器,功耗很低(我的实测只有 18w 左右)。最初是买来给宿舍用的,奈何我的桌子太小了,所以也搬回家里用了……Switch 大屏游戏?暂且算了吧 🤣
  • 小米 CC9e
    便宜,日常应用体验很流畅!虽然屏幕分辨率很低,不过对我的使用场景来说够用了(大概)。
  • 树莓派 4
    好耶,是千兆以太网和 USB 3.1 gen1。
  • Intel Core i7-3770(散片)
    我家那台戴尔应该可以再战几年了!
  • HPE Microserver Gen10(在撰写本博文时还在路上)

同时在文娱方面增加了不少支出;今年我购买了大量的音乐(139 张专辑和 EP,包括数字专辑、捡垃圾和海淘)。其中我非常喜欢的有:

以及我看着 Telegram 群里的大佬们买各种 灵车 买的不亦乐乎,结果我看了半天什么都没买……不过也没什么实际意义啊,而且没那么可靠吧(?)

博客

今年的确没有写很多博文。大概我对这种东西的兴趣也开始下降了吧,主要感觉很多事情不是不值得写就是不适合写……

不过放心,我目前还没有关掉这博客的打算呢。

稍后打算把我的域名都转移到 Cloudflare 了;name.com 续费死贵。

以及想写个新的博客主题了,但是没什么头绪……

2020 年计划?

待定!计划赶不上变化的。

SgDylan's avatar

写在 2020 前

咱稍微回忆一下好了。


Kouga's avatar

Arduino 开发小记(一)

你看到这里有个(一)喵……那就说明……可能有 二?不存在的喵(X

优雅的使用中断

如果想要写一个 Arduino 库,然后发现库里面需要导出一些函数给中断(或者其它类似C回调)进行绑定,而且数量不定(由使用者指定),那么可以使用模板配合静态成员函数&变量来做。

举个栗子,这是一个启动后会针对指定针脚脉冲进行计数的片段:

#include "Arduino.h"

template <int pin>
class PulseCounter {
 public:
  PulseCounter() {}

  void begin() {
    pinMode(pin, INPUT_PULLUP);
    // 因为使用了模板,所以每个实例拥有自己的静态成员
    // 函数 PulseCounter<pin>::pulse_interrupt
    attachInterrupt(
      digitalPinToInterrupt(pin), 
      pulse_interrupt, CHANGE);
  }

  unsigned int getCount() { return pulse_count; }

 private:
  // 因为中断函数是静态成员函数,所以其使用到的成员变量都要是静态的
  static void pulse_interrupt() { ++pulse_count; }
  // 比较复杂成员结构建议使用 struct / public class
  static unsigned int pulse_count;
};

// 初始化静态变量
template <int pin>
unsigned int PulseCounter<pin>::pulse_count = 0;

这样在 Arduino 里使用的时候就可以很简单的这样运用了:

#include "PulseCounter.hpp"

//每个计数针脚都可以有一个对象,依次声明即可
PulseCounter<PULSE_COUNT_PIN> pin_counter;

void setup() {
  Serial.begin(9600);
  pin_counter.begin();
}

void loop() {
  Serial.println(pin_counter.getCount());
  delay(1000);
}

避免命名污染

要做一个大家都喜欢的库,如果只是纯函数和少量内置变量,推荐用 namespace 包裹起来,方便使用同时减少命名污染喵~

namespace MyLibrary {
extern int some_variable;
extern int other_variable;
...
}

void Callme(){
  using MyLibrary::some_variable;
  
  some_variable = ... ;
}
RecursiveG's avatar

AMD Threadripper 3960X 装机

眼看2019年就要结束了,发现自己的手竟然还在。于是决定连着胳膊一起剁掉。

CPU

没什么好说的,AMD YES 就完事儿了。

主板

主板选了微星的 TRX40 PRO 10G (我就是不喜欢 Asus 你来打我啊)。10G 版比 WIFI 少了无线模块,多了一张万兆以太网卡。不过不管哪样我都暂时用不上。另外还有一张 PCI-E x8 转两个 M.2 的转接卡,没那么多 SSD,同样用不上就是了。除此以外就是说明书、光污染线之类的玩意儿。

内存

极度非主流的内存配置,4根英睿达的 16G ECC 内存。型号为CT16G4WFD8266

于是先把 CPU 和内存装上主板:

一体式水冷

随便选的 九州神风堡垒360EX。少数几个当时能以合理价格买到的支持 TR4 的一体水冷。

另外现在的风扇都这么花哨了吗,怎么扇叶上都装扰流板了?

电源

随便选的 海韵 Focus GX-850。少数几个当时能以合理价格买到的便宜的 850W 电源。另外这电源还送了一个测试器,本质就是把 ATX 接头里的某两根线短接一下,用以测试电源本身能不能工作。但是我为什么不直接把它插到主板上去测试呢?

显卡

显卡方面,AMD 好像不是很香,但我还是选了 RX590。别问为什么,问就是 Fuck you NVIDIA

40Gbps

之前提到用不到万兆网卡,一是没有万兆交换机,二是有捡垃圾捡回来的 40G Infiniband 卡,台式机和 NAS 之间用 QSPF 线直连,速度反正比机械硬盘快就是了。顺带把旧机器上的系统盘也拆过来。

塞进机箱

机箱选了毫无灯光的 Fractal Design Define C,这个机箱没有前置的 USB Type-C 接口比较可惜。显卡的 PCI-E 供电线荡在那儿还是有点丑。

背面走线随便走走,机箱能合上就是胜利。

尾声

新机器插电一次亮,不过意料之中的,进不去系统。根据 Phoronix 的报道,需要在内核参数中添加mce=off才能正常启动。然后进 BIOS 把虚拟化、IOMMU、ECC 之类的都开起来,这机器就算装完了。随意跑了一下s-tui,48个线程满载还是蛮恐怖的。

一般空载整机功耗 100W 左右。单烤 CPU 全核频率在 4GHz 左右,整机功耗 400W,想必加上显卡后能轻松过 500W,电费也要开始燃烧了。另外这接近 80℃ 的温度感觉有点高,难道是水冷没装好?

装机总结:AMD YES

OX's avatar

寫在2019年年末

「2019年瞬間就結束了。」

人隨著年齡的增長,主觀上會慢慢地感到時間變快了。而我現正經歷這個變化過程,且是感受最強烈的階段。

認真回顧2019年——我做了些什麼事情,身邊發生了什麼事情?其實想説的事情有很多,無奈近年記憶力衰退得誇張,有些事情到底是否2019年發生的也不能肯定,某件事情具體是哪個月份發生的,現在的我其實也不特別在意,但其實是想要記起也記不清楚,只好「強迫」自己不去在意。雖也可以通過各種線索推導出相對正確的結果,但其實也並無這個必要。雖我有時候確忍不住在意這種細微事情,但現在單是要將這些事情整理出來就已要耗費我大量精力,而我現在其實並沒有太多這樣的精力。事情確是發生過,這一點是不會有錯的。

應該是年初,被一個患有憂鬱症的女生單方面絕交。這個事情其實對我打擊頗大,我因為這件事情,又一次開始審視自己的人際關係原則:

我開始思考,我這種「來者不拒」的社交原則是不是有很大的問題,在實踐中,出現的最尖鋭的矛盾就是我肯定並不能真的做到「來者不拒」,這也是理所當然。每個人都是有底線的,精力也有限度,當然忍耐力亦然。

因為「來者不拒」就意味我需要將我的精力不斷地透支、不平均地分配給我身邊的人。這對於我本人並沒有實質上的好處,我之所以堅持這麼多年,主要原因是我內心深處善良,而維持這種善良所需的虛榮心也和我付出的額外成本「收支平衡」,我知道社會上每個人都是不平等的,有人就是會有各種各樣的原因,讓他會被周圍人孤立,這種原因有時候可以很具體,亦有時候無論是他自己,或是孤立他的人都説不清楚;這種原因可以是先天的,事出有因的甚至也可以是表面上「平白無故」的,但很多時候當事人都無法通過一般的努力克服這種不利因素,結果就是他們會被很多人孤立。只是單純孤立的行為,其實無可厚非,但是終究我個人是不支持的,所以我希望我也可以用自己的實際行動貫徹我自己的理念,所以我刻意地要求自己做到相比其他人更加公平地照顧到身邊的每一個人,對於被孤立的人,我更是想要撥出有限且不多的精力與他們共享。

我的交友原則是不想孤立任何人。

雖然我經常感到疲憊,但是直到這件事發生前,總體上我算是能夠「收支平衡」,我透支了精力,但是我收穫了我期望的內心上的滿足,我滿足了自己的道德期望。我的同理心使我站在道德高點無時無刻地審視自己的行為,而虛榮心填補了我透支的精力。

本來這套系統本可以持續不斷地運行,就如《道德情操論》所説描述的一樣。

結果這個事件的發生,正正破壞了保證這個系統能夠維持下去最重要的兩部分的其中一部分,我非但沒能滿足虛榮心,我獲得虛榮心的其中一個重要途徑更被破壞——需要花時間建立的外在良好形象被污名化。

對方集中火力攻擊我的品格,而具體的理據當然是站不住腳的,身邊熟悉我的人對我品格認知也自然不會因為她的控訴而動搖。

但現實是:外在形象並不是以你週邊幾個人對你的認識而形成的,更多的是不熟悉你的人,甚至沒有見過面的人來定義的。謠言以我的個人能力無法控制,儘管我想要嘗試掌控局面。我也不知道結果怎樣,但是我敢肯定我的形象一定因此受損了。這很遺憾。

而她也損失了我本人本會在未來繼續分享給她的精力,這些「精力」對於她來説,本應該是最珍貴的人生財富,但是很可惜,她因為不受控制的病態精神狀況和偏執人格障礙將她自己逼到了絕境,將這些付諸東流。

我從這個事件中收穫了教訓:我付出的氾濫的同理心回報不總是能如我所望獲得等額或更多的虛榮心回報,這項投資不保本,更可能蝕大本。

違反社會規則,人為地過度幹預市場風險很高,儘管願景是好的,但就和共產主義一樣,期望的理想社會在現實中怎麼可能可以維持長久?


另外一個教訓就是對於抑鬱症患者,在交際過程中需要非常小心注意,保持相當的距離是非常重要的,留意對方有沒有按時按量服藥也很重要。

對嘗試通過自殺・自殘博得關注和同情的病人更是不能陷入他們創造的陷阱,敦促他們按時按量服藥,催促他們去心理門診獲得專業的醫療意見是我目前認為的作為普通人的唯一正確做法。在必要的時候給予最低限度的生命保護,作為普通人即可問之無愧。

將這兩個教訓,對映回我的人際關係原則上,就是未來需要謹慎處理有心病的人羣的交際,具體到憂鬱症病人上,特別是重度憂鬱症的人,不能妄想通過無限透支自己的精力一廂情願地期望他們可以走出疾病,或許其實可以,但是對於普通人來説風險過高,更有可能惹火燒身。

原則終歸是原則,並不是那麼容易動搖的,教訓帶給我的改變不觸動原則本身,只是實踐原則的時需要改善做法。對於患有重度憂鬱症的人,給予不亞於針對其他人普通人程度的關懷我即認為足夠。畢竟若果重度憂鬱症可通過人文關懷就可得到痊癒,憂鬱症的治療就不會來得這麼困難。


(等待更新 2019年12月24日凌晨)

這篇文章 寫在2019年年末 最早出現於 OXの胡說八道

ホロ's avatar

爱丽丝的树洞 - 在匿名网络(?)的一角

(一如既往的不擅长写最前面的摘要……其实只是把这里往 i2p 上搬了一份以后 的有感而发罢了。)

至于汝问咱这一个月咕咕咕到哪里去了的话,那肯定是没看前面那篇文章啦……

从深网到匿名网络

提到所谓的“深网”,大家最有印象的大概就是那张冰山图了吧:

普遍认为的深网指的是那些不能用普通的搜索引擎搜索到的内容,这个概念下就有很多啦。 像是各种内部网络的服务、需要登录的外部服务、需要付费解锁的服务甚至某微幕公众号等 等都可以叫做“深网”。

接下来,网络上有一些 IP 地址上看起来没有分配任何服务,因此网络上的流量不太可能 到达这种地区。因为和宇宙学中的黑洞差不多(没啥能从里面出来的?)于是这一段网络 有时也被称作“黑暗网络”。

再接下来,出于各种奇怪的目的(例如隐藏沟通各方的身份、缓解单点故障风险等等), 不少人利用现有的网络搭建了各种需要特殊手段才能进入的网络。再因为某些不可知的宣传 或者渲染恐惧等因素,这种网络一度被错误的称作“暗网”。两大知名匿名网络软件(Tor 和 i2p) 的开发者们也一直在努力的改正这个错误……

比较著名的匿名网络软件有 Tor (因为传输过程中解密流量的过程有点像剥洋葱有时被 称作“洋葱路由”)、i2p(有时和 Tor 对应的被称作“大蒜路由”)和 Freenet 自由网 等等。有的网络的功能要点在于分布式和去中心化而不是匿名,因此通常不被称作是匿名网络。 像是 ZeroNet 和 ipfs 等等。

出于使用经验在内的种种原因(意思就是这么多咱没都用过),咱就先介绍前两个 比较著名的好了……

兔子洞前的兔子?

Tor是实现匿名通信的自由软件。其名源于“The Onion Router”(洋葱路由器) 的英语缩写。用户可透过Tor接达由全球志愿者免费提供,包含7000+个中继 的覆盖网络,从而达至隐藏用户真实地址、避免网络监控及流量分析的目的。

Tor用户的互联网活动(包括浏览在线网站、帖子以及即时消息等通信形式) 相对较难追踪。Tor的设计原意在于保障用户的个人隐私,以及不受监控地进 行秘密通信的自由和能力。Tor透过在传输协议栈中的应用层进行加密,从而 实现洋葱路由这一种技术。

Tor会对包括下一个节点的IP地址在内的数据, 进行多次加密,并透过虚拟电路(包括随机选择的Tor节点)将其提交。 每个中继都会对一层加密的数据进行解密,以知道数据的下一个发送目的地, 然后将剩余的加密数据发送给它。最后的中继会解密最内层的加密数据, 并在不会泄露或得知源IP地址的情况下,将原始数据发送至目标地址。

值得注意的地方是(?),这个让各国政府和监控部门头痛不已的网络开发过程 中的主要赞助者也包括美国海军研究办公室和联邦政府等等政府部门。(自己 帮忙造了个烫手山芋么……)

I2P(Invisible Internet Project即“隐形网计划”),是一项混合授权的匿名网络项目。

I2P网络是由I2P路由器以大蒜路由方式组成的表层网络, 创建于其上的应用程序可以安全匿名的相互通信。它可以同时使用UDP及 TCP协议,支持UPnP映射。其应用包括匿名上网、聊天、撰写博客和文件传输。

I2P是可伸缩性强,具有自我组织与恢复能力的包切换匿名网络。 其上运行有多种不同的匿名安全程序,各程序可以自行决定匿名性、延迟、 流量平衡而不用考虑混淆式路由网络的具体实现。它们的数据活动可以与现有 的I2P用户的匿名数据相混合。

Tor 和 i2p 的区别主要在于路由上,Tor 所使用的“洋葱路由”使用同一条 网络链路实现数据的发送和接收,而 i2p 使用的“大蒜路由”使用多条网络链路 发送数据和接受数据。

以及为了获得网络中的中继列表, Tor 需要和某几个固定的目录服务器联系,于是 目录服务器就很容易成为审查者封锁的目标。相较之下, i2p 使用 Kad 算法获得网络中 节点的数据(就像 eMule 一样),因此只要客户端还能连接到一个中继,就能取得连接 需要的服务器信息,封锁难度也随之上升。

最后的最后(?), Tor 的主要目的是为了相对匿名(?)地访问常规网站,如果汝 去看 Tor 的流量统计的话,就会发现访问洋葱服务的流量只占 Tor 网络中总体流量 的小部分。

而 i2p 设计的主要目的就是构建一个匿名网络,因此不像 Tor 那样有很多的访问明网 (普通的互联网)的节点(经常只有一个,或者没有……)。以及由于通过多条链路发送 和接收数据的原因,速度也稍微慢一些。

i2p 自己有一份文档稍微区分了一下自己和 Tor: https://geti2p.net/zh-cn/comparison/tor

关于这两个匿名网络软件的使用方法嘛,并不是这里的重点(啥?)。 最好的教程还是 官方提供的:

众人拾柴火焰高 - 帮助匿名网络成长壮大

什么网络都要有足够多的人使用才能发展,就像现在的互联网一样。对于术业有专攻的 匿名网络来说更是如此。在汝使用过这些匿名网络工具之后,有没有想过助它一臂之力呢?

  • 宣传和修正错误观念

向朋友们宣传匿名网络的存在和它的重要性,以及他们了解到 匿名网络不只是某些破坏行为的栖息之所,它还是保护汝所珍视的某些事物的关键武器。

  • 架设匿名网络服务,或者把汝的普通网站调整成匿名网络友好

出于某些商业或政治因素,大多数网站对来自匿名网络的访问者有各种各样的限制 (例如要求输入验证码或者拒绝访问等等)。 如果汝是一个网站的所有者(像咱一样),汝可以考虑为匿名网络使用者放行(例如 如果汝有在使用 Cloudflare 的话,可以考虑为 Tor 的出口 IP 设置白名单),或者 更进一步,在匿名网络上放置汝的网站。(当然可能需要稍微调整一下汝的网站以适应 匿名网络的需求)

  • 架设或赞助匿名网络节点

匿名网络毕竟还要靠普通网络中的设备来驱动,通过增加匿名网络中的节点(无论 是汝自己亲力亲为还是提供资金给其它提供者),既可以部分提高(?)网络的速度, 也可以增强网络的健壮性。

  • 参与匿名网络软件开发

不一定是编写代码啦,撰写文档,提供翻译,参加测试和讨论也都是行之有效的方法呢。

Tor 和 i2p 都有自己的社区页面,从那里开始汝的第一步吧!


SgDylan's avatar

粘合 mpv 滤镜

mpv 算是跨平台的最强播放器了,有还算活跃的社区,也有很多可以用来给画面加料的滤镜。
FSRCNNX 和 Anime4K 算是比较热门的两个滤镜,前者能借助卷积神经网络修复部分纹理,后者则能够提供优秀的锐化效果。
但遗憾的是,这两个滤镜并不能混合使用。本文即是以此为题展开的探索。

依云's avatar

Python 3.8 升级记录

本文来自依云's Blog,转载请注明。

Python 3.8 发布有好多天了,Arch Linux 也早就重新打包了一千多个包(感谢辛勤的肥猫猫),隔天就从 [staging] 进入 [testing] 了,四天之后进入正式仓库([extra] 和 [community])。

Python 3.8 进入官方仓库的次日,我本地进行了更新。之所以要等一天,自然是等 [archlinuxcn] 的更新啦。然后那些需要人工干预而又暂时没人理的我本地重新打包了。使用 pacman -Qo /usr/lib/python3.7/site-packages 查询尚未更新的软件包,然后对着对应的 PKGBUILD 一顿改(基本上也就是 pkgrel 加 0.1 而已),makepkg -si 就好了。

但是这样还没完事哦。

sudo updatedb 更新一下 mlocate 的数据库。然后 locate -be python3.7 | grep -v /var/lib/lxc 找到一些残留的文件,主要是 ~/.local/lib 下的,以及散落在管理之外的 venv 里的。~/.local/lib 下的都是我自己的项目,删掉然后重新去项目里 python setup.py develop --user 就好了。venv 的话,直接删掉吧……

然后是 locate -be python-37 | grep -v /var/lib/lxc | grep -v /usr/lib/python3.7/site-packages。这个是为了查 Python 3.7 的 pyc 文件,所以这次也排除了 Python 3.7 的 site-packages,避免尚未更新的 Python 包的干扰(有些暂时用不到的包我就懒得自己 makepkg 了),等更新完之后整个目录删掉。有些软件包(比如 gdb-common)没有使用标准的 Python 安装流程(比如因为并不是标准的 Python 库),打包者(比如著名的 Allan McRae)没有或者拒绝在打包时编译 pyc 文件,造成 Python 自行创建不被管理的 pyc 文件,软件包卸载或者 Python 升级后就残留下来了。

确认没有问题之后(比如有些软件可能自带了个旧版本的 Python,或者有些并不是 pyc 的文件也包含这个字符串),执行 locate -be python-37 | grep -v /var/lib/lxc | grep -v /usr/lib/python3.7/site-packages | sudo xargs rm -v 删除这些文件。当然如果有需要保留的文件自行从文件列表中删掉先。

pyc 清理之后,接下来清理一下空的 __pycache__ 目录啦。locate -be __pycache__ | sudo xargs rmdir -v 2>/dev/null 就可以了,非空目录不会被删掉的。

哦对了,我现在在用 mypy 了,所以还要 locate -we .mypy_cache/3.7 一下。

我之所以现在记录这事儿,「现在」的原因是,我要在另一个系统上再测试一遍再发布出来,「记录」的原因是,下一次我就不用想要执行哪些命令了。

imi415's avatar

灵车IPQ4019——R619AC

90块的IPQ4019灵车,PCI-E能吃么
ホロ's avatar

状态回报 - 20191119

这啥?

嘛咱也不知道叫什么好 😂(汝翻翻之前起这种 slug 的文章?)

在不同的地方写不同的字

就像标题一样,咱要挖新的大坑啦(?)……

  • 约伊兹的萌狼乡手札 Another (名字什么的最难起了),在折腾了那么久博客软件和生成器后还是回到最早用的 WordPress 了…… (因为 Like Button 这时候只支持 Matters/Medium 和 WordPress 鸭……)之后好多图的文章大概会发到那里。

  • KenOokamiHoro @ Matters

    Matters 是一個以分佈式網絡為基礎、加密貨幣驅動的公共討論平台。

    所有在 Matters 上發佈的作品(不含評論),皆會上載到星際文件系統(InterPlanetary File System,IPFS)的節點上,實現作品內容的分佈式存儲,完成將數據回歸創作者的第一步。

    Matters 希望圍繞公共議題、知識生產,重構內容價值生態,搭建優質社群平台, 保護創作版權;以獨特算法令優質內容浮現,以數字貨幣讓創作者、參與者獲得持續回報。

    2019 年 10 月,Matters 和 LikeCoin 聯手,將 LikeCoin 這一基於寫作者創造力為衡量的 加密貨幣引入到 Matters 自由創作和公共討論空間之中,平台效應以收入的形式回饋給作者。

    Matters - 关于我们

    初期大概会把这边不会更新的文章放上去吧(因为 IPFS 的特性以致于 Matters 不能编辑已发表的文章), 以后可能会新写些什么。

    除了给文章点赞以外,大家也可以考虑 加入赞赏公民 , 助力咱和各位独立作者。

  • 至于这里嘛,咱只能讲短期内不会消失,不敢保证一直都在呐…… 这里应该还是以平时 折腾的记录为主了。 剩下有些关于朋友和生活的系列文章可能会先改在 Another 上发布。


大概就是这个样子……

Chawye Hsu's avatar

除了 GitHub 官方移动客户端,还有这些东西值得注意

class="tach-root">

除了 GitHub 官方移动客户端,还有这些东西值得注意

2019-11-16 0:15:00 杂谈
© 2015-2020 Chawye Hsu. Made with ❤︎︎ in Guangzhou
's avatar

在树莓派(Raspbian)上安装最新稳定版 nginx

如果需要在 Raspbian 上安装最新稳定版 nginx,其实官方是 提供了 Debian 的 apt 源 的,但是并没有提供 armhf 的二进制文件。

于是,我们只好自己通过 Debian 的方式编译安装了。

此方法优点

  • 安装好的 nginx,配置文件路径、维护方法等与官方 Debian 版 nginx 一致
  • 如果需要卸载 nginx,只需执行 sudo apt purge nginx

步骤

1. 安装添加官方 apt 源前所需的包

sudo apt install curl gnupg2 ca-certificates lsb-release

2. 添加官方 apt 源

# 添加官方 apt 源。与官方说明不同的是,由于我们需要源代码,这里添加的是 deb-src 而不是 deb
echo "deb-src http://nginx.org/packages/debian `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list

# 添加 PGP 公钥
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
sudo apt-key fingerprint ABF5BD827BD9BF62

# 下载最新的软件包列表
sudo apt update

3. 安装 nginx 所需的依赖

sudo apt build-dep nginx

4. 下载 nginx 的源代码

# 建议单独建立文件夹来存放此次 nginx 编译所需文件,因为你的工作目录会多出若干文件
mkdir nginx_build
cd nginx_build

# 下载源代码
apt source nginx

5. 编译安装

此时我们检查目录下有什么文件:

drwxr-xr-x 10 tcdw tcdw    4096 Nov  5 03:20  nginx-1.16.1
-rw-r--r--  1 tcdw tcdw  114248 Aug 13 17:17  nginx_1.16.1-1~buster.debian.tar.xz
-rw-r--r--  1 tcdw tcdw    1510 Aug 13 17:17  nginx_1.16.1-1~buster.dsc
-rw-r--r--  1 tcdw tcdw 1032630 Aug 13 17:17  nginx_1.16.1.orig.tar.gz

由此可见,此次我们需要先进入 nginx-1.16.1 文件夹。实际文件夹名称可能会由于版本更新而与本文不一致,但应该只有那一个文件夹,且所有相关文件 / 文件夹均以 nginx- 开头。

cd nginx-1.16.1

开始编译安装:

dpkg-buildpackage -uc -b

完成后,返回上一层目录,发现我们的目录中出现了 nginx_1.16.1-1~buster_armhf.deb 文件。我们现在可以开始安装了:

sudo dpkg -i nginx_1.16.1-1~buster_armhf.deb

大功告成!

升级新版本

重复第 4 - 5 步即可。

ホロ's avatar

一点点深入端到端加密 -- 公钥密码系统如何保护我们的信息?

来自 https://ssd.eff.org/en/module/deep-dive-end-end-encryption-how-do-public-key-encryption-systems-work

这个页面引用了 https://ssd.eff.org 的图片呐,汝可能需要根据情况调整汝浏览器 扩展的设置来查看它们。

如果使用得当,端到端加密可以保护汝的消息、文字甚至文件除了为汝期望的接收者以外 其他的家伙都看不到。它也能保证汝收到的消息确实来自汝所认识的那一位发件人(而不是 别的冒充他/她/它的谁),是呗~

过去的几年中,端到端加密工具如雨后春笋般在各个领域出现(而且达到了可用标准)。例如 像 Signal 这样支持文字消息、语音/视频通话和文件传送的 IM 就是其中的一种咯。这些工具让 监听者无法读取消息的内容(包括服务提供商自己)。

是不是觉得有些端到端加密的实现难以理解?在汝开始使用这些端到端加密工具以前,咱们推荐汝先花一点时间了解一下公钥密码学的基础。

这篇文章所讨论的公钥密码学正是端到端加密所依赖的基础。啥,汝想了解其它的加密类型?去翻翻咱们以前写(翻译)的 《当汝看到加密 …

's avatar

攻防世界 PWN 新手区 Writeup *萌新向*

咕咕咕,咕咕咕咕咕咕,咕咕咕咕咕咕咕咕咕
依云's avatar

Poker II 键盘调教记

本文来自依云's Blog,转载请注明。

Poker II 是一款可编程的61键机械键盘,是最小的那种,没有 F1-F12 那一行键。跟 HHKB 有些像。这是我第一次使用这么小的键盘,以前都用的84键的。选择它的原因是,更加小巧,没有旁边的光标移动键,使得打字的时候几乎不需要把手挪来挪去的。编程功能似乎也挺有意思的。我手上这把是红轴的,感觉手感也挺好,虽然没有了青轴那清脆的叫声。照片我就不放啦,网上能搜到的。

研究完说明书,发现它的编程功能并没有想像中的那么好。主要缺点如下:

  • 非默认层会一直亮着个灯,而默认层又不能编程。
  • 只能对非组合键,以及没有预设功能的 Fn 组合键编程。所以额外的 Pn 键很残废。
  • 编程结果无法导入导出。所以哪天不小心重置了键盘,这将导致重复而无趣的劳动。

不过也能凑合着用了。最后我的设置是这样的:

不再使用 xmodmap 来交换 Esc 和 Caps Lock。笔记本键盘改用 hwdb,Poker II 使用内建编程功能。于是我可以在别处(比如手机、BIOS、Win10)使用这把键盘而不感觉别扭与小心翼翼。xmodmap 依旧用来把右 Alt 映射为 Multi(Compose)键,用来输入特殊字符,因为我不知道这个键怎么用 hwdb 映射。哦还要在 /etc/vconsole.conf 里去掉之前给 tty 虚拟终端设置的交换 Caps Lock 和 Esc 的 keymap。

红、绿、蓝三个编程层。红层没什么用,暂时留作测试。绿层作为打字用布局,方向键使用 Fn 组合键完成,Esc 位放 `~。蓝层作为看视频的布局,方向键使用右下角的四个键完成,无处安放的 Pn 暂时放 Esc 位。其余共有映射为:

  • Caps Lock 位放 Esc。
  • 交换 Fn 和右 Alt 键。这样 Fn 键好按一点,反正右 Alt 很少用到。
  • 映射两组 Ctrl-PgUp/PgDn 分别到 Fn-Q/E 和 Fn-O/L。这快捷键非常常用,可以在火狐和 Telegram 切换标签页。

Poker II 编程时有个「编程延迟」设置,我一直没搞明白它要怎么用,也导致我的映射一直有问题,按一次出一到两次。直到后来找到这篇文章,才明白它不是个设置,而是个事件,按下它即导致出键码时延迟指定的时间。

另外我没能在 Poker II 上按出 SysRq 来,不知道是怎么回事。

hwdb 的配置方法来自 ArchWiki Map scancodes to keycodes 页面。我的配置如下:

evdev:atkbd:dmi:*
 KEYBOARD_KEY_01=capslock   # esc
 KEYBOARD_KEY_3a=esc        # capslock
 KEYBOARD_KEY_b7=rightmeta  # prtsc
 KEYBOARD_KEY_c5=print      # pause (Fn+P)

把配置放到 /etc/udev/hwdb.d 下的 .hwdb 后缀文件中,然后执行

sudo systemd-hwdb update
sudo udevadm trigger

就好了。

用了几天了。除了 LED 灯老亮着有些刺眼外,一切安好。也终于把 Caps Lock 的设置方法搬到更底层了。

17windy's avatar

17Windy的A18原创MOD合集-[近战包+枪械包] V1.1稳定版 (1107)

最近更新日期:11月7日

最近实在是太忙太忙太忙了 不上图了 大家自己进游戏体验吧 新武器也都是专属模型

PS:MOD的设计也有根据原版弹药不额外拓展口径的初衷,因此军武达人不要埋怨某武器口径不对2333

前言:

A18出了好多天了也没出个正理八经完美适配A18的武器包,只能自己动手。

该组合包都是由17windy基于A18的数据和MOD标准全新制作,非移植包。

该组合包的原则是基于对A18原始武器库的补充和完善,并不会去追求变态属性,各项武器参数都做了较为完善的平衡。

该组合包的适合难度为4或者5。

 

更新记录:

1107枪械包V1.2
添加了5把新武器:
1快速近战锐器 有几率触发大量流血特效
1短管霰弹枪 能够增加持有者的移动速度 弥补霰弹系列缺失
1支援用机关枪 降低持有者移动速度 巨大弹容 弥补支援用机关枪系列缺失
2狙击(其中一把为特殊贡献玩家专属,不掉落)

枪械包V1.1

武器属性再平衡。

近战包V1.25

武器属性再平衡和模型调整优化。

近战包V1.2

增加了一款试做剑盾类武器,属于防御装备,缓慢,高防御,同时享受大锤和剑刃技能加成(只能采用拳套的动画,因此一直举着盾挺挡视线的,适合坦克和乌龟流玩家);

重新设计的新的shader和调整了材质,各个武器更有质感;

修正了一点小bug,例如钢爪现在可以正确造成流血效果了。

近战包V1.1

增加了两款拳套类武器;

调整了拾取表,大幅度降低对枪械池的污染。

V1.0

初版

 

说明:

枪械包内的Vector野地秘行和鲤鱼王大锤未添加掉落列表,是作为优秀玩家的独特奖励存在的。

其他所有道具均可掉落,只是根据强度,掉率不同。

 

如何安装:

解压放进mods文件夹,注意看看路径别套娃。

 

获取:

搜刮和任务奖励。

 

如何汉化:

不需要,直接放进Mods文件夹就可以了,内置汉化文件。

 

转载须知:

本MOD由17windy制作,欢迎在国内七日杀网站转载或者整合包作者整合,转载或整合请备注该MOD作者17windy。

禁止转发到国外任何网站,开发组不给发官方中文支持,俺也懒得给他们英化。

 

关于更新:

本MOD更新周期暂定于A18版本生命周期,目前发布这个组合包版本趋于稳定,以后如果有时间才会添加新道具。

 

下载在哪:

1.1

链接:https://pan.baidu.com/s/1Gb9Cc5QjSC086CxidZGA_A

提取码:eqor

1.0

链接:https://pan.baidu.com/s/1r2ZHqb2r0nzQaRXWAZ-63w

提取码:9gir

 

PS:为什么枪械包里面会有铝热剑和弩炮啊?因为这俩比较现代化,所以归于枪械包了。

ホロ's avatar

Arch Linux 的衍生发行版们

有句不知道谁说的话说得好,“一千名读者中有一千个哈姆雷特”。放在 GNU/Linux 发行版上同样 也如此。有一群人对某个发行版的原则和理念不能完全认同,于是创造出了一个衍生发行版,或是 从零开始创建一个新的发行版,大概就是这个样子。

TL;DR

  • Arch Linux 也有很多衍生发行版,所诞生的原因和专注的方向也各有不同。
  • Arch Linux 官方 不为 Arch Linux 的衍生发行版提供支持。
  • 最好首先去衍生发行版各自的主要社区寻求支持。
  • 如果万不得已只能在 Arch Linux 的社区(例如群组和非官方论坛)询问的话, 请一定记得告诉大家自己用的是什么发行版。

所以先来回顾一下传说中(?)的 "The Arch Way" ?

完整内容还请参阅 ArchWiki: https://wiki.archlinux.org/index.php/Arch_Linux
  • Arch Linux 将简洁定义为:避免任何不必要的添加、修改和复杂增加。 它提供的软件都来自原始开发者(上游),仅进行和发行版(下游)相关的最小修改。
  • Arch尽全力保持软件处于最新的稳定版本,只要不出现系统软件包破损, 都尽量用最新版本。Arch采用滚动升级策略,安装之后可以持续升级。
  • Arch 注重实用性,避免意识形态之争。最终的设计决策都是由开发者的共识决定。 开发者依赖基于事实的技术分析和讨论,避免政治因素,不会被流行观点左右。
  • 许多 Linux 发行版都试图变得更“用户友好”,Arch Linux 则一直是,永远会是“以用户为中心”。 此发行版是为了满足贡献者的需求,而不是为了吸引尽可能多的用户。 Arch 适用于乐于自己动手的用户,他们愿意花时间阅读文档,解决自己的问题。

汝如果有下面这些情况的若干种,可能就没那么想用 Arch Linux 了呗:

  • 没有能力、时间、愿望去打理这样一个高度可定制的 GNU/Linux 发行版。
  • 需要非x86_64平台支持。
  • 汝是狂热的自由软件爱好者,自然只希望发行版提供 GNU 定义的自由软件。( 这不清真……
  • 汝认为好的操作系统应当是已经配置好的:安装介质应默认包含一套完整的应用软件、桌面环境——达到“开箱即用”。
  • 汝不需要使用滚动升级的发行版。
  • 汝对目前使用的操作系统感到满意,自然也没有太大的动力去换。

于是衍生发行版们登场了

有些人可能像汝一样,不能完全接受 Arch 的原则,于是就在 Arch 的基础上做成了别的发行版:

  • 安装过程太难?于是有 AnarchyLinux 这样的发行版提供一个简化的安装器。
  • 想要预装桌面环境? 于是有 Chakra 这样的为某个桌面环境特化的发行版。
  • 需要非x86_64平台支持? 于是有 Arch Linux 32Arch Linux ARM 这样的发行版把 Arch Linux 的理念 带到其它架构。
  • 只想用自由软件? 于是有 Parabola 这样专注自由的发行版。 (还获得了 GNU 的自由 GNU/Linux 发行版认证)
  • 对 Systemd 不满? 于是有 Artix 这样的发行版提供了 Systemd 以外 的 init 。
  • 不想那么新?于是有 ManjaroHyperbola ,致力于提供稍微稳定些的软件。
  • 想在非 GNU/Linux 上用简单的 pacman ?于是有 ArchHurd , MSYS2ArchMac , 努力的在其它系统上帮汝找到一点 pacman 的感觉(?)。

ArchWiki 上有一份比较完整的 Arch 衍生发行版列表: https://wiki.archlinux.org/index.php/Arch-based_distributions

为啥 Arch Linux 官方不为衍生发行版提供支持?

Arch 衍生发行版通常使用不一样的软件包、版本号、软件仓库,且有着部分难以察觉的定制。在 Arch 论坛对支持这些项目极其艰难。 社区技术支持只限于 Arch Linux 发行版和 Arch 用户软件仓库。所有关于衍生发行版或其他操作系统的帖子都会被关闭。

ArchWiki:Code of Conduct

这一句大概就够了。不过只是官方论坛/IRC/Wiki/Bug Tracker 不支持衍生发行版而已啦,其他地方似乎没有那么严厉的样子……

然而实际上支持衍生发行版有多困难?

“…Manjaro 的存在本身我觉得挺好的,毕竟是继承了 Arch 的包管理器,也是对 Arch 的支持了。 然而用户总是把它当 Arch 跑来论坛和群里问问题,有时候还不说明白自己用的是 Manjaro,很烦。…”

—来自某个 Arch Linux 群组的不愿意透露姓名的某人(?)

“客观而论,Manjaro 是很成功的发行版,但是请不要将它和 Arch Linux 弄混。 如果你喜欢的是简便的配置和滚动更新, 那么选择 Manjaro 是很合理的;但如果你喜欢的是简洁、自由和尽可能最新, 那请使用 Arch Linux,而不要安装一个 Manjaro 并以 Arch 用户自居。”

—来自某个 Arch Linux 群组的回忆中的某人(?)

(其实汝把里面的 Manjaro 换成别的 Arch Linux 衍生发行版也差不多,并不是指摘 Manjaro 的意思。 不过对 Manjaro 感到不满的 Arch Linux 用户也是存在的,例如 https://rentry.co/manjaro-controversies

其实最大的问题只有一个(?),就是大家在某个群组里就会或多或少有些隐含的预设。 例如在 Arch Linux 群组里就会默认大家都在用 Arch Linux,遇到问题的时候就会在这个 假设下进行解决。于是……

  • 如果汝用的是某个衍生发行版
  • 又没有提前说明自己用的不是 Arch Linux
  • 又赶上汝遇到的问题正好就因为某个汝正在使用的衍生发行版的定制的话……

于是汝就只能指望辛辛苦苦帮汝解决问题最后发现是衍生发行版的问题的那位不是咱了(?)……

然而要避免这种尴尬的情况发生的话,除了在一开始告诉大家自己使用的 GNU/Linux 发行版的话, 提前找到汝使用的 GNU/Linux 发行版用户主要集合的群组/论坛等场所然后在那里提问也是一种可行之策,是呗。

说了那么多,你用的又是啥呢?

咱啊…… Arch Linux 和 Parabola GNU/Linux Libre 都在用呀~

HY's avatar

Story of Seasons: Friends of Mineral Town

矿石镇重制版终于放出了,连着肝了好几天,在游戏内第一年结束前成功搞定诅咒农具+结婚。 这次的重制版整体来说还是 […]
17windy's avatar

[七日杀A18] 17windy的幻想风格武器包 Ver1.1

更新记录:

V1.1

增加了两款拳套类武器;

调整了拾取表,大幅度降低对枪械池的污染。

V1.0

初版

前言:

A18的枪械武器平衡很棒,近战武器略为弱势,种类也较少,简直逼疯懒人,好多天了也没出个正理八经完美适配A18的武器包,只能自己动手了。

说明:

武器包内包含11把适配各个近战天赋的新武器,属性各异,模型与人物适配度高,不是那种常见的塞一堆武器不管平衡和特色那种包(不包含拳套,这个调整起来麻烦,之后加)。

另外求弓、弩武器的A18文件与动画结构(官方太抠了)。

如何安装:

解压放进mods文件夹,注意看看路径别套娃。

武器获取:

搜刮和任务奖励。

如何汉化:

MOD文件夹内有Localization.txt

里面是汉化文本,请自行添加到7 Days To Die\Data\Config\Localization.txt文件的最后,就有汉化了。
(emmm,算是专门为a18开发的市面第一个近战武器模组了)

转载须知:

欢迎在国内七日杀网站转载或者整合包作者整合,转载或整合请备注该MOD作者17windy。

关于更新:

本MOD更新周期暂定于A18版本生命周期,会添加更多的武器和玩法,例如匕首+长棍合成矛等。

下载在哪:

链接:https://pan.baidu.com/s/1D8KrNdJj4iCItxEHyp6FvQ&shfl=sharepset
提取码:14s7

OX's avatar

在家架設一台郵件伺服器的全套過程記錄

Why 明明有各種免費的企業郵局,為什麼還要自建郵件服務器? 因為我域名太多了。另外我精力旺盛。自建一個屬於自 … 繼續閱讀 在家架設一台郵件伺服器的全套過程記錄

這篇文章 在家架設一台郵件伺服器的全套過程記錄 最早出現於 OXの胡說八道

via these people and places