缺氧:天然气泉开发
前言最近笔者在重温《缺氧》的时候,遇到开发天然气泉的问题。这个档本计划完全引用 大叔追云彩 的语雀文档的,但他那个滴液换气的开发方案我不是很喜欢。这时我想到我以前做过另一个推气门的思路。但我的电脑经过系统重装后,原稿早已散佚;幸而,去之前水过的群聊天记录里翻到当时的设计稿。模块建好后,笔者痛定思痛,惩前毖后,决定将这个模块记在这里,权当备忘。
概览这个模块是别人设计的,我做的改进是想办法在产气室里也塞了一个气压传感器,它和周期传感器并联在一个与门上,由此共同控制机械闸门的开合。
这样做的好处是在喷泉休眠后模块就会停止推气,不会出现对着真空无谓地工作,算是节约了电脑的运算资源。要是产气室中的气压传感器的值设得再大一点,喷泉活跃期时两次喷发的间隙中也不会推气,极大减少了机械门开合的声音。
模块需要注意的地方在于气泵必须用钢来制造,由于没控温措施(发电机会吞热,没必要控温),气管也最好用隔热气体管道。
自动化设置方面,储气室里的气压传感器是为了避免气体抽尽而导致气泵过热;周期传感器可以设成 5s/5s;然后控制产气室里的气压传感器,使模块常启,等到气泉喷发之后,记录此时产气室气压, ...
grep-sed-awk
总而言之grep、sed 与 awk 是 linux 各大发行版中经常预置的三种文本处理工具。因其常见,往往被业内称为 linux 的“三剑客”。它们的共同点在于他们都是命令式而非交互式的,这与我们常用的 vim 或 nano 不同,同时也加大了学习成本;但也正因如此,它们都很适合嵌入到脚本之中,自动化完成文本处理任务。
关于 grepgrep 可以搜索文本文件中包含关键字的行,其配合正则表达式可以实现更强大的功能。一般来说,grep 命令是这样构成的:
1grep "[关键字]" [文件路径]
特别的,我们也时常将其他命令的输出结果重定向给 grep 命令,再进行筛选。类似这样:
1[命令] | grep "[关键字]"
而 grep 的所谓“关键字”是支持正则表达式的,使用“-E”参数能获得更强的正则表达式支持。grep 命令的常见参数如下:
参数
全称
备注
-E
–extended-regexp
使用扩展的正则表达式规则
-f
–file=[文件]
从文件中读取要使用的正则表达式
-i
–ignore-cas ...
一种对mediawiki中模板系统的改造方案(二)
前面主要谈到了对模板系统和解析器函数的改造。事实上在 MediaWiki 中,解析器函数是所谓“魔术字”的一部分。JavaScript 是种功能强大的编程语言,以下我们将会把魔术字的另两个功能“状态开关”和“系统变量”也都包装成 JS 的方法。
系统变量部分系统变量在同一页面上的可使用次数是有限的,这类系统变量会被标记为【高开销】。
下表中PAGE和USER系列的方法中可以接受一个参数,用以指定某个特定页面或用户,而非当前页面或用户。
SITE
描述
PAGE
描述
USER
描述
SITE.name()
站点的名字
PAGE.name()
当前页面的标题
USER.name()
当前用户名
SITE.lang()
站点默认界面语言
PAGE.lang()
当前页面选择的语言
USER.lang()
当前用户选择的语言
SITE.url()
站点的域名
PAGE.url()
当前页面的网址
USER.url()
当前用户的用户页网址
SITE.edits()
站点编辑次数
PAGE.edits()
当前页面的编辑次数
USER.edits()
当前用户的编辑次数 ...
一种对mediawiki中模板系统的改造方案
前言为了降低门槛,维基媒体基金会一直在推进『所见即所得』编辑器的发展;然而时至今日,MediaWiki 的可视化编辑器依旧功能孱弱,许多老编者依旧更青睐于源代码编辑。
造成这一局面除了是由于路径依赖以外,各种模板不方便进行可视化操作也是成因之一。各种丰富的模板缔造了繁荣的 wiki 生态,但它们形式上极其自由,为将模板引入可视化系统造成不便。
为此,我们亟需对模板的编写添加更多的限制,以便在可视化系统中查找、选择与引用模板,以及在为模板添加参数时生成对人类友好的表单。
我的设想对模板系统的改变无异于重构,对旧体系下的模板不兼容,很难实现,所以放在博客的“虚构”分类中,希望能博君一笑罢。
模板编辑模式除了“前言”中提到的问题外,MediaWiki 模板中似乎已经图灵完备的解析器函数也需要改进。
MediaWiki是一套历史悠久的系统,当初为了在模板中实现一些简单逻辑的解析器函数愈发臃肿。所以我们新的模板是基于某个现代的编程语言的,鉴于MediaWiki本身依靠网页呈现,以及 JavaScript ES6 中“模板字符串”的新特性,我们决定基于JavaScript 来构建我们的模板系统。
...
十六进制汉制数字
说明现实生活中已经有了一套成熟且应用广泛的十六进制数表示方法,就像这样:
0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
按理来说,设计一套新的十六进制数字表示方法是毫无意义的,但耐不住笔者心血来潮,于是改版几次后,有了这样的方案:
〇、丿(piē)、刀、川、卅(sà)、日、月、田、申、才、木、术、乂(yì)、丈、爻(yáo)、艾、又
又¹ = 又、又² = 双、又³ = 叒(ruò)、又⁴ = 叕(zhuó)
其中“刀”字本应是“氘”中气字旁包裹的那个结构,但似乎还没人造过这种形状的汉字。
数表设计主要考虑了以下几个因素:
字形上要有规律,方便学习者记忆;
字音上互不重复,以免使用时造成混淆;
选字时不能来自十进制数,方便学习者能更好地区分出这两种数制。
至于非要说它有什么用,大概是可以在架空历史小说中充当设定了吧;比如明代没在崇祯朝亡掉,反而中兴,后世中华的计算机科学家为了方便,创建了这一数表……
十六进制汉制数字转化器为使读者能更深入地体验到这种数字表示方法的效果,我特意做了这么个转化器;各位可以找段带数字的文字 ...
在ubuntu中半自动安装搜狗输入法的shell脚本
总而言之就是用脚本实现了一遍搜狗官网教程中的内容,脚本仅仅在虚拟机环境的 ubuntu 22 中对 sogoupinyin_4.2.1.145_amd64.deb 测试过,不保证在其他地方还能不能正常运行。
脚本启动需要用sudo命令以管理员权限执行,脚本执行完毕并重启电脑后,按Ctrl+空格键调出输入法,按Shift键切换中英文。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849#!/bin/bash# Author: Kide_Lee# Date: 2023.8.17# Blog: https://www.cnblogs.com/-zyyz-/function PutTips () { echo "$(tput rev)$1$(tput sgr0)" sleep 1s # 防止由于终端上的信息滚动过快而致使用户忽略掉提示。}softFind=$(find sogoupinyin*.deb)if [ ...
shell中对数组的操作汇总
方法用例备注
创建数组
1arr=(val_1 val_2 val_3)
数组间的元素以空格分割。
创建空数组
1arr_new=()
访问数组
12arr=(val_1 val_2 val_3)echo "${arr[0]}"
数组的索引从“0”开始,在这个例子中,脚本会输出“val_1”。
访问数组的长度
12arr=(val_1 val_2 val_3)echo "${#arr[@]}"
在这个例子中,脚本会输出“3”。
遍历数组
1234arr=(val_1 val_2 val_3)for item in "${arr[@]}"; do echo "$item"done
在这个例子中,脚本会依次输出:val_1 val_2 val_3
添加元素
12arr=(val_1 val_2 val_3)arr[4]="val_4"
通过索引在指定位置 ...
用JavaScript绘制树状图(具有分支合并功能)的一种方法(其一)
需求分析在很多模拟经营游戏中,科技树是一项重要的内容,其为玩家提供了各项技术与其前后置科技间的拓扑关系。这些科技树在表现形式上和普通树状图很相似,但由于其频繁的分支合并,为科技树的绘制带来困难。因此,我们需要一种简单的方法来绘制科技树。
比如,当用户输入:
12345678910111213141516171819202122232425<!--为了降低用户的学习门槛,这里的语法参考了wikitext的无序列表-->*四年计划**西墙防线***大西洋壁垒***东方壁垒**大空间经济***亲近罗马尼亚****整合战时经济***亲近匈牙利****整合战时经济*****组建专员辖区**自给自足***帝国高速公路****德国战时经济*****组建专员辖区***煤液化****合成橡胶*****增加科研槽***赫尔曼·戈林工厂****力量来自欢乐牌汽车*****增加科研槽
我们期望,输出的样式可以类似于这样:
通过以上构想不难发现,从输入到输出大致要经过这几个步骤:
写出无序列表;
将这个无序列表加工为普通的树状图;
找到树状图中需要合并的分支,将其合并;
渲染出最终的成品。
可 ...
用JavaScript绘制『杨辉三角』的一种方法
12345678910111213function 杨辉三角(row_s) { var zero = [0] //zero为常量 var arr = [1] //初始化第一行 for (var j = 0; j < row_s; j++) { document.write("<div class='row'>"+arr.join(" ")+"</div>") //打印第一行 var arr_x = zero.concat(arr) var arr_y = arr.concat(zero) ...
用JavaScript求1000以内的质数
1234567891011121314var primes = [2]; // 2是质数,先将其加入质数数组中for (var i = 3; i <= 1000; i++) { var isPrime = true; // 假设i是质数 for (var j = 0; j < primes.length && primes[j] <= Math.sqrt(i); j++) { if (i % primes[j] === 0) { isPrime = false; // 如果i可以被某个质数整除,则说明i不是质数 break; // 跳出循环 } } if (isPrime) { primes.push(i); // 将i加入质数数组中 console.log(i); // 输出质数 }}
代码原理:
检查某个数与比它小的所有质数取余后是否为0,若不是,则加入质数表,然后检查下一个数。
涉及到的知识点:
数组
创建 ...

