Linux Network Stack Configurations
note
4/1/2022
3/23/2022

WIP

Bridges are Linux's virtual Ethernet swtiches. It forwards Ethernet frames between bridged interfaces and thus extends the broadcast area.

WiFi adapters are different with Ethernet adapters. You need to regularly scan for available APs and authenticate to them before you can access the link layer. So besides drivers, there are wireless daemons.

User in the specified group can access the control interface using wpa_cli. Some basic commands:

CanoKey
note
2/11/2022
12/8/2021

CanoKey 有两个版本,一个是软硬件完全开源的 canokey-stm32,一个是即将发售、核心代码开源的 CanoKey Pigeon。因为主控芯片,后者比前者安全性更高。不过因为还没有发售,所以本文记录的是 DIY 的 canokey-stm32。

canokey-stm32 的硬件可以在 canokeys/canokey-hardware 找到,用的是立创 EDA。我用的是 NFC-A 版本,板厚 2.4。

canokey-stm32 的固件可以在 canokeys/canokey-stm32 找到。STM32L432KC 的 bootloader 支持 DFU,应该可以 USB 直接下载固件。不过当时我不知道,PCB 正面有 4 个触点看图是 SWD 于是焊了 4 根线用 J-Link 下载了。

然后初始化硬件

Shell (Bash) Cheatsheet
note
2/11/2022
10/18/2018

is equivalent to:

Run <list1> when <list0> exit with code 0, elsewhere run <list2>.

(Built-in command) Conditional brackets, you can think the left bracket as a program. The “program” returns an error code depending on the <expression>. [[ is an enhanced version of [ which may not be available in lower versions of bash.

Here's an incomplete list of <expression>:

目前用的自建 NAS 方案
blog
12/8/2021
12/5/2021

Why self host? 好用的公用云空间太小了!空间大的公用云不好用!

Why not NextCloud?

正好我前段时间将我的很多机器都换成了 NixOS,搭建云服务比较方便。下文我会展示目前用的一些 Nix 配置。

下文出现的 config.age.secrets.*.path 为用 agenix 加密的密码文件解密后所在的路径。我会附上密码文件的创建方式。

DN42
note
11/20/2021
11/20/2021

DN42 是一个大型的去中心化的虚拟网络。比起其他的去中心化网络,DN42 注重的不是隐私和匿名,而是在 WireGuard、OpenVPN、Tinc 等 VPN 之上模拟一个真实的互联网。因此你会发现 DN42 中会用到 BGP、OSPF、DNS、SSL 等一系列现实中因特网的技术。比起真实的因特网,DN42 AS 间建立 peering 前不需要大费周张地架设信道或向 IXP 缴纳昂贵的会费——一切连接都是在 VPN 之上的。此外也正是因为这点,虽然真实的因特网设计上是去中心化的,但实际上的因特网组网多往大企业靠拢。而 DN42 只需要一台能够连接到因特网的机器就能参与对接,因此可以十分网状化。

简而言之你可以在 DN42 中以很低的成本享受到 role play 一个网络运营商的快乐。

DN42 的 ASN 分配范围是 AS4242420000-AS4242423999。IPv4 地址分配于 RFC1918 中的 172.20.0.0/14 中,IPv6 地址根据 RFC4193 分配一个 ULA 使用,因此连接到 DN42 并不会与因特网产生冲突。

在 DN42 Git 注册一个帐号,在 dashboard 右边就可以看见 dn42/registry 仓库,我们需要在这个仓库里创建几个文件。

网络常识
note
11/19/2021
5/19/2019

对于网络我其实是一知半解,这篇文章基本上是我知道什么就写些什么,因此十分零碎。

网络协议有好几层,这些层级环环相扣。在 OSI 概念模型中,网络协议有七层;而在事实标准 TCP/IP 协议栈中,舍弃了其中的 L5 和 L6,并套用了 OSI 的 L1 物理层,共有四层。

数据链路层由网卡实现,用于连接计算机,构成网络。以太网用于构成有线局域网,Wi-Fi 用于构成无线局域网,PPP 和 PPPoE 用于连接用户和 ISP。

网络层由操作系统内核实现,用于将网络相连,构成互联网。

USTC Hackergame 2021 write up
blog
10/30/2021
10/30/2021

又来参加 Hackergame 了,这次的题目整体偏难。最后得分是 2400,92 / 2677。

为了能让大家顺利签到,命题组把每一秒的 flag 都记录下来制成了日记本的一页。你只需要打开日记,翻到 Hackergame 2021 比赛进行期间的任何一页就能得到 flag!

点击 Next,看到日期往后了一秒,query string 变成 page=1。看起来是 UNIX timestamp,获取一个比赛期间的 timestamp 就可以了。

Never foget anything, 会使用因特网档案馆是互联网公民的基本技能。

Install NixOS with Alpine Live CD
blog
9/18/2021
9/18/2021

某家 VPS 提供商的促销活动重启了,于是以很低的价格入了台带宽、流量、延迟都还不错的 VPS。然而这家提供的预装操作系统比较少,也不能自行上传 ISO。不过还好提供了几个安装镜像可以随便挂载,也提供了 noVNC,于是使用他们提供的 Alpine Live CD 来安装 NixOS。

服务商提供了一个 noVNC 窗口。为了切换 TTY,需要发送 Ctrl+Alt+F{1..12} 按键。虽然界面上没有按钮,但是我们可以通过 noVNC 的 RFB API 发送按键。在浏览器菜单中打开开发者工具,在 Console 中定义函数:

使用方法:sendCtrlAltFx(XK_F1, "F1"),第二个参数为 web API 的 KeyboardEvent.code。

为了能粘贴一长串 key,定义函数:

GNU/Linux 基础组件
note
9/5/2021
10/18/2018

创建文件,如果文件存在则更新它的更改时间。

创建目录,使用 -p 参数可以直接带着父目录一起创建。

移动文件,同设备移动是先 hard link 然后 unlink,速度很快;跨设备则是复制后删除。

复制文件。-r: recursive,复制目录时需指定该参数。

Sh Extra
note
9/5/2021
10/18/2018

这篇笔记记录一些不属于 GNU Coreutils 但是比较常用的 Linux CLI 软件的简单用法。

下载文件。

cURL 除了可以用来下载文件,更是一个能发送各种 HTTP 请求的工具。

当这些参数被设置时,cURL 会自动选择使用 POST 方法,并设置 Content-Type。

从 LineageOS 16.1 升级到 18.1
blog
4/6/2021
4/6/2021

想起来我已经好久没有更新 LineageOS 了。以至于 4 月 1 日 LineageOS 突然释出基于 Android 11 R 的 18.1,我还以为是个愚人节玩笑——我 17.1 都还没来得及更新呢,怎么就突然 18.1 了?

然而 LineageOS 群里热热闹闹的聊天却告诉我这是真的。有人分享升级时遇到的问题,有人为官方没有支持的老设备编译 LineageOS。跨越两个大版本使用旧版总归让人不安心,于是连忙更新了。

LineageOS 和一些周边项目最近的变化不小:

我的设备距离上次更新大版本以来也有着不小的变化:

python-apt 模块笔记
note
12/13/2020
3/17/2019

我将 PacVis 移植到了 Debian 上,使用了这个模块。和 Arch Linux 不同,Debian 的包管理器复杂许多。而我 Google 了半天,也很少找到个像样的文档。所以我公开了这篇笔记,希望能帮到大家。

更新:python-apt 的文档在 Debian 源中的 python-apt-doc 包中,安装后可在 /usr/share/doc/python-apt-doc 下找到。可运行 python3 -m http.server -d /usr/share/doc/python-apt-doc/html 后用浏览器打开 http://localhost:8000/ 查看。

python-apt 在 Debian 中的包名为 python-apt 和 python3-apt,分别用于 Python 2 和 Python 3。

不建议基于 apt_pkg 这个低级模块进行开发。

USTCLUG Hackergame 2020 write up
blog
11/9/2020
11/7/2020

参加了 USTCLUG 举办的 2020 Hackergame。第一次参加 CTF 比赛,人很菜但是也玩得挺开心。

这是一个步长为 0.00001 的 range input,人类难以精确地将数值调成 1。解决方法是超越人类在 developer tools 中找到 <input id="number" class="form-control" type="range" name="number" value="0"... 元素,将 value 改为 1 然后点击提取。

该题主要考查选手对搜索引擎的熟练程度

哺乳动物: https://en.wikipedia.org/wiki/List_of_computing_mascots

STM32 开发环境
note
9/17/2020
7/26/2019

ARM 开发总是有着太多的工具可以选择。因为种种原因,这里不涉及 IAR、KEIL MDK 等商业开发工具。

工具链主要包含这些组件:arm-none-eabi-gcc, arm-none-eabi-binutils, arm-none-eabi-newlib, arm-none-eabi-gdb。

由于 ARM 的诸多坑,初学者使用 GCC 工具链可能会有些棘手。主要的坑有这些:

Linker script。由于各种 ARM 型号的内存起止都不太一样,所以需要使用 linker script 来告诉 GCC 怎样去链接。但是这种东西会有点难以理解。

运算放大器
note
9/12/2020
8/20/2019

稍微庆祝一下我找到了失踪了两年的笔记本 🎉️,这篇笔记就是从我的这个笔记本上扒下来的。

这是一个运算放大器,它是一种模电的设备。VS+ 和 VS- 是运算放大器的电源接口,实际应用时会用到,但是在制作原理图时为了方便常常会省略画出。V+ 和 V- 之间是几乎绝缘的,运算放大器最直接的作用就是感知 V+ 和 V- 之间的电压差,然后放大。放得非常大: $$ V{OUT} = \begin{cases} a (V+ - V-), a(V+ - V_-) \lt V_S\\ VS, a(V+ - V_-) \geq V_S \end{cases} $$ 其中 a 就是放大倍数,我们常常只知道这是一个很大的数,它的数值可能是几百万,但我们常常不知道他的具体值。不同厂商生成的不同型号的运算放大器的放大倍数会有不同,甚至于同一个运算放大器的放大倍数也极其不稳定、易受温度影响。

那么如何减少运放受温度的影响并控制它的放大倍数呢?

(这里我们省略了电源接口,并假设电源可以提供足够高的电压。)

Python 两则
note
6/7/2020
5/27/2020

Python 程序分发,你还在用 conda 煎药熬汤吗?你还在用自己写的安装脚本小钢磨打粉吗?Python 程序,现在开始打成包。打成包,高效分发。

其实是我最近看了一些神经网络项目的代码,不得不说大佬们的程序都写得非常漂亮,但是一些大佬似乎不太会使用 Python 的包管理工具。他们往往会在 README 中花很大的篇幅写如何配置运行环境。但实际上现在的 Python 的包管理和依赖管理已经十分好用了,以下两则建议会帮助你快速地配置 Python 环境。

创建一个路径,在这个路径下创建一个空文件 __init__.py,那么这个路径就会被认为是一个 Python 的 package,在这个路径下的 Python 文件就是这个 package 下包含的 module。

在这个路径的上一层打开 Python,就可以 import 这个 package,或者从这个 package 导入 module:

AVR
note
1/18/2020
6/20/2019

放假了,我可以好好整理一下之前自学的内容了。

AVR 是 Atmel 生产的一种 RISC 架构的 8 位的微控制器,型号的命名方法为 {ATmega,ATtiny} + 数字 + (P) + 封装类型 -{PU,AU,MU}。

Atmel 公司后来被(制造 PIC 的)Microchip 公司收购了,于是很多 AVR 的资源的链接都改变了,请留意。

AVR 各个型号的寄存器的名称与功能有较大的不同。我学习 AVR 时主要采用的芯片为 ATmega48P/ATmega88P/ATmega168P/ATmega328P,这几款芯片十分类似,能在 ATmega48P 上跑的程序基本上都能在其他几款上跑。他们的差别基本上只体现在闪存(flash)容量上。由于他们太过类似,下文提及他们时我将简称为 atm4n8。

使用 Next.js 重写博客框架
blog
12/14/2019
7/26/2019

如果你看过我之前的博客的代码,你应该会知道我的博客虽然使用了 Vue.js 这样的前端框架,但我仅仅用了它很基础的功能。我并没有采用 vue-cli 生成的模板,而是仅仅把 Vue 用 Webpack 加载到 JS 里,然后在 HTML 中把 bundle 后的 JS 用 <script> 标签加载出来,再把 HTML 文件作为模板,使用 Python 的 Jinja2 模板引擎将各数据填入模板来生成各个页面。

而随着前端的发展,SPA(单页应用)出现了。单页应用在切换页面时不需要像传统页面那样整个重新加载一个完整的网页;而是使用路由(routing)技术,切换页面时只需要用 XMLHttpRequest 加载一点点数据,然后操作 DOM 将页面显示的内容改为数据就好了。许许多多的前端框架如 React、Vue、Angular 就是为此设计的。

既然有这样的好处,为什么我不把博客框架写成 SPA,而是用老掉牙的模板引擎来生成呢?原因在于 我太菜了不会写 我希望我的博客能被各种各样的用户访问。直接使用前端框架写出来的 SPA 的 HTML 入口往往不包含页面内容,需要在浏览器运行 JavaScript 操作 DOM 后才给页面加上了内容,如果关闭 JavaScript,页面就只会显示一个 You need to enable JavaScript to run this app.。虽然很少有人会关闭 JavaScript,但总有人出于各种各样的考虑这么做:有人认为网页应该是一个文档,应该是用来浏览的而不是用来交互的;有人为了安全、担心 Cookies 泄漏而安装了 NoScript 插件;有人不喜欢过于复杂的现代浏览器,使用一些简单的、只能识别 HTML 的浏览器(如 w3m)。

我一直认为,可定制性是 “自由” 的一个基本内涵。所以我希望我的网页就算关闭 JavaScript 也能维持一些基本的功能。

VirtualBox 启动本地硬盘上的另一个系统
note
11/13/2019
11/13/2019

有时候我不得不使用 Windows:比如宣传部的小伙伴给我发来一个 PSD 文件时,比如计算机基础老师突然布置 MS Office 作业时。虽然 Krita 已经部分支持 PSD 格式、LibreOffice fresh 已经能完美支持打开和编辑 MS Office 文件;但这毕竟是两种不同的工具,总归是有区别的:就算它能完美兼容,界面也是不同的,我无法参考老师发过来的教学视频操作。而我又不想频繁地重启,虚拟化启动本地系统这个功能对我来说就十分有用了。

首先展示一下我当前硬盘的分区情况车祸现场:

让我解释一下这样恶心的分区是怎么造成的。/dev/sda2 是 Windows Boot Manager,Windows 用于启动自身的工具;/dev/sda3 是 Windows 系统所在分区;/dev/sda{4..6} 是戴尔电脑出厂自带的恢复工具和 Windows 镜像。/dev/sda7 是从 /dev/sda3 中压缩出来建立的分区,所以你会看到下面有 “分区表项与硬盘次序不同” 的提示。

然后我在 /dev/sda7 上建立了一个 lvm pv,Linux 系统是安装在 lvm 上的。如果你不知道 lvm 是啥也没关系,你只要知道 Linux 系统数据是在 /dev/sda7 里的就可以了。GRUB 是和 Linux 安装在一个分区里的,/dev/sda1 里的默认引导项是 GRUB。

巧克力薄荷点心狂热
blog
9/14/2019
8/29/2019

你看了 GYARI 的必须要吃巧克力薄荷味冰淇淋的琴葉葵酱了吗?快去看吧!

チョコミント歯磨き粉 アイス! アイス! アイス! おいしいよ〜 Ψ(☆w☆)Ψ

不知道你有没有过这种体验,就是你知道这种东西味道很反人类,但是当它被提起后你却会突然产生一种想尝试的冲动。虽然巧克力薄荷还是怎么吃都很奇怪,但你恶心完却还想再尝一点,越吃越上头。 へ(´д`へ)

那么我们干脆来蹭下热度做些 chocomint 点心吧。 (・`ω´・ ●)

Cloudflare 成功击毙了 Caddy server
blog
8/10/2019
8/10/2019

今天重启 caddy 时突然遇到这个状况,来来回回搞了一个半小时才解决。总之记录一下,顺便加些科普内容。

Caddy 是一个自动申请证书的 HTTPS 服务器软件。有点乱?没关系,我们捋一下。

写好一个网站后你需要怎么部署你的网站?你会租一台服务器,然后怎么做?

如果是一个静态网站,那么你可以直接将你网站的所有静态放在一个路径下,然后用一个软件监听这台服务器的 80 端口;如果有人访问你的域名指向的这台服务器的 IP,你就把那个路径下对应文件发给他。这样的一种软件叫做静态服务器软件,最简单的 python3 -m http.server 就是一个例子。

夏日最终章
blog
8/10/2019
8/9/2019

本来在这篇 blog 之前还有一篇我打算在夏初写的 blog 叫 “夏日吟” (chant-of-summer) 的,但因为我一直没想好要写什么于是一直拖了四个多月。眼看就立秋了,想着再不留下点什么这个夏天就没有我的足迹了,所以就有了这篇 “夏日最终章”。

从哪里说起好呢?先说我对夏天的感觉吧。尽管很多人对夏天有着很特殊的情感、夏天也被赋予了各种各样的寓意。但可能是因为我在夏天出生的缘故,我对夏天是从来没有什么好印象的。我对夏天的感觉就是热,在烟熏火燎的一天天中,向来是很难看出什么诗意的。

相比之下我更喜欢冬天。尽管这意味着皲裂的嘴唇和疼痛的脸颊;意味着行动不便,有时拿起电烙铁和镊子都成为问题;意味着寒风,会从房门的缝隙钻入身上的每一个细胞。但有时候,低温可以衬托出人情的温暖。尽管很多时候,这是虚拟出来的——通红的脸颊、专注的注视。在这么多人聚集的教室里,本来是不会太冷的——就连这份寒冷都有点虚拟出来的意味了。

冬日的人对暖阳的渴望是很深沉的。但一旦暖阳真的到来,冬日就像一个容易醒来的梦,在暖阳的照耀下尽数消散。而在夏天,陷入梦境的人将长期在梦境中漂泊,即使醒来,也会感觉怅然若失。

贴片焊接指南
note
6/29/2019
6/26/2019

请注意这不是一篇以科学的角度去分析的文章,而是一篇分享经验的文章。这里的方法也不是最好的方法,只是我觉得比较容易操作的方法。

焊锡丝、锡浆、镊子、夹具、焊接台、高温海绵。

有人把这个称作焊锡膏,但是在淘宝上这么搜索的话,结果大多数是那种焊接时用来除锈、方便上锡的油膏状物质。而我们要的是那种由锡粉和这种油膏混合而成的、灰黑色的、加热后能熔成一块锡的物质。搜索锡浆就能找到这种产品。

锡浆有装在桶中的,也有针筒装的。除了锡浆以外还要另外买几个针筒和针头。直接用自带的针头很容易堵,我一般喜欢把锡浆挤到另外的针筒里用。

Welcome to the MeltyLand!
blog
6/15/2019
1/13/2019

MeltyLand 是我的个人博客,名称来自于我很喜欢的一位 P 主,はるまきごはん,的作品 Melty Land Nightmare 。

MeltyLand 的文章分为两种类型:note 和 blog,

MeltyLand 的源码托管在 GitLab。

我是 geneLocated,本名 Zhu Chuang。

LineageOS 16.0 更新过程显示 Keep System Read only(OnePlus 5)
blog
5/12/2019
5/12/2019

众所周知,LineageOS 是个滚动发行版,没有稳定版一说,你需要不断更新来保持稳定。按照往常的经验,等待大约 5 分钟,更新下载完成;只需点击安装,系统就会自动重启,进入 TWRP 恢复模式。接下来只需等待一条条 log 划过屏幕,更新就这么完成了。

我尝试更新到 5 月 9 日的 nightly build。

我该选哪个?而不管我选哪个,弹出来的都是 TWRP 的主界面。那个可爱的 log 界面去哪里了?

根据 Reddit 上的说法:

GNU Make
note
5/12/2019
5/12/2019

相关链接: isaac/Makefile

我曾经十分瞧不起 Make。因为乍一看正常的 Makefile,这不就是给 shell 脚本加几个标签,然后运行吗?

直到自己稍微会用一些了,才感叹到 Make 的强大。

Do not ask whether a statement is true until you know what it means.

林姆蒂克
blog
4/10/2019
4/8/2019

很久很久以前,雪山上居住着一个精灵,它的全身都由霜、雪构成。人类刚开始出现、炊烟第一次升起后,一朵朵水雾飘过当时世界上最高的雪山,于是便凝成了它。它整天坐在雪山顶上。它的听力十分灵敏,灵敏得可以听见人类的心声。每当人们遇到了困难,它就会小声地给出提示。雪山上的风很大,提示便随着风飘来飘去,有时候可以飘入遇困人的耳朵,有时则不能,有时甚至飘到了别人的耳朵里。

最早的语言出现后,有一批冒险者(现在应该称做科考队员)登上了这座雪山。正当他们愁于如何下山时,他们听到了它的指引,于是这批冒险者很顺利地下了山。这件事很快在他们的部落里传开了。人们把这个精灵叫做 “林姆蒂克”,这在当时的语言中就是 “灵感” 的意思。

时至今日,那门语言早就失传了,但 “林姆蒂克来了” 这个句式却流传至今。比如说,当你隔壁的苏珊阿姨想出了今天做什么菜时,她就会拍掌喊到:“啊!灵感来了!”

中世纪末期,有几个商人为了躲避仇人的追杀逃上了这座雪山。由于刚开始登不久他们就听到了林姆蒂克的指引,所以整个登山过程并没有多么艰难。登上后他们又按照提示在雪山上生了一簇火。火堆散发出大量的热量,很快林姆蒂克便被烤化了。林姆蒂克蒸腾开来,重新变为水雾,随风飘至各地,溶解在河流、江海之中。(也有一说是顺地下水进入河流)

如何遥控一只蟑螂
blog
4/5/2019
4/5/2019

这是我发表在无线电杂志上的文章《用微信小程序遥控一只蟑螂》的原稿。据说发表后文章的版权依然在作者手里,所以把这篇放在我的博客上。我不是很懂相关的法律;所以不同于这个博客下的其他文章,这篇文章不授权他人进行再分发;本人保留一切权利。

多图。如果你正在使用蜂窝数据,请留意。

项目地址:github.com/chuangzhu/insect-robot 作者:朱创

之前看到了 Backyard Brains 这样的一个项目,觉得很有趣,看到其高昂的价格后决定自己做一个。取名为 Insect Robot。硬件部分采用 AVR 作为主控芯片,因此兼容流行的 Arduino 平台。手机控制端则采用了更加方便的微信小程序。

牛奶曲奇
note
3/25/2019
3/25/2019

黄油 70 g(半杯)。

细砂糖 40 到 70 g。糖越多烤出来的曲奇越硬:40 g 的不够甜,不过更能突出奶香味。70 g 味道不错,不过口感就有点像巧克力曲奇了。

牛奶 20 毫升。

香草精一茶匙。

AptVis: 可视化 Debian 软件包依赖关系
blog
3/17/2019
3/17/2019

Farsserfc 的 PacVis 是 Arch Linux 上的一个可视化软件包依赖关系的工具。我将 PacVis 移植到了 Debian 上,称之为 AptVis。

大多数 Linux 发行版都使用软件包机制来管理系统上的各个软件,Debian 也不例外,Debian 使用一个叫做 APT 的工具来管理软件包。使用 Debian 的你一定知道这条命令:

Linux 的一个程序往往要和许多其他程序协作才能完成一个功能。因此软件包间有一种叫做 依赖 的关系。使用 APT 安装一个包时,会自动安装这个包的依赖。卸载一个包后,可以用 apt autoremove 来卸载这些作为依赖被安装的包。

然而,一个系统用久了,我们常常忘了自己安装过什么。这个工具可以直观地呈现出各个包之间的依赖关系,方便我们:

从 LineageOS 15.1 升级到 16.0
blog
3/16/2019
3/10/2019

这篇文章记录的是一次升级而 不是刷机 。我的设备是 OnePlus 5,如果你用的是其他设备,请不要照做。

Android 9.0 一加 5 固件: https://forum.xda-developers.com/showpost.php?p=76943628&postcount=8

LineageOS: http://download.lineageos.org

中国大陆镜像 http://mirrors.ustc.edu.cn/lineageos/full/

Linux 下的 Python 相关问题
note
2/16/2019
11/10/2018

是这样的,在 python3 出现之前,python 只有一个名称就是 python。距离 Python 2 被遗弃还有一段时间,许多 Linux 发行版仍有很多程序依赖 python2,所以 不要卸载 python2。要使用 python3 的话另外用系统包管理器安装,需要时运行 python3 就可以了。

不要更改 /usr/bin/python 软链接的指向。如果你觉得麻烦,可以在 ~/.bashrc 等中加入一行:

Arch Linux 的 python 默认为 python3,这反倒被认为是一个 bug。不过 Arch Linux 上的打包者打包时都考虑到了这个 bug,所以也不要更改。

使用系统的包管理器安装 pip。它的包名应该为 python-pip,如果是 pip3 的话就是 python3-pip。比如 debian 下安装就是:

安装 archlinux
note
2/13/2019
9/16/2018

Installation guide - ArchWiki

以官方Wiki的方式安装ArchLinux | viseator's blog

刻盘 -> 分区(partitioning)-> 格式化(建立文件系统)-> 安装系统 -> 安装 GRUB -> 配置

Linux命令行烧录树莓派镜像至SD卡

Git 核心概念
note
2/13/2019
9/15/2018

<> :参数

[] :可选参数

比较熟练使用 git 后想着要写这篇笔记很久了。世界是物质的,我们的记忆不过是大脑内的一些连比较接和电状态而已,谁也不能保证自己不会意外失忆。

git 是一个版本管理工具(VCS)。

VirtualBox Android x86 踩坑记录
blog
2/9/2019
2/7/2019

我写这篇文章时是 Feb/2019 ,谷歌 Android 已释出 9.0 Pie, Android-x86 的最新版本是 8.1 Oreo 。但我仍推荐下载 7.1 Nougat ,原因下面会说。

Android-x86 默认没有在 Boot 选项中指定显示器,需要手动开启。

插入安装 iso,重启虚拟机。选择 Live CD - Debug mode 。

(如果你不会使用 vi ,可以参考下 我的 vim 笔记 )有一段差不多长这样:

Sh Getopts
note
12/28/2018
12/28/2018

getopts is a shell built-in.

getopts1.sh:

usage:

bug: 它会记录执行了多少次,也就是 parse 到第几个 argv,以此完成遍历。如果用于函数,则该函数只能调用一次。之后调用该函数 getopts 都是返回 ?。

Linux 下使用网络打印机
note
12/23/2018
11/25/2018

https://wiki.archlinux.org/index.php/CUPS#Network

https://wiki.archlinux.org/index.php/Avahi#Hostname_resolution

特别注意要按照 wiki 逐步操作,不然很容易乱。

CUPS 是 Linux 下主流的打印服务框架,安装 cups。

前端的 npm
note
12/23/2018
12/23/2018

Node 早已不只是后端的 JavaScript 运行时,很多 npm 包成为了前端的工具、前端框架和前端库。现在前端应用越来越复杂,传统的前端编写方式已经满足不了大家的需求,人们希望把后端构建应用的方式带到前端。

Node 环境与浏览器环境存在很大的不同,如浏览器没有 require module。要想让浏览器使用西方 node 那一套,有两种方式:

这样(第二种)的主流工具有 browserify、webpack,当然这些工具也是 npm 包,要在工作电脑上和前端库 npm 包一同安装。

Getting Started - Material Components for the Web 通过 npm 安装 material design

Go 语言
note
12/17/2018
10/10/2018

最后的是返回的类型,这里可以指定返回变量的名称,这样只用一个 return 就可以返回对应名称的变量。

类似于其他语言的词典。

在 interface 中指定几个函数作为一个类型,{{ 定义了 { 这些函数 } 的类型 } 的实例变量 } 就被称为 “满足这个接口”,可以赋值给这个接口。

interface{} 为空接口,任何类型都实现了它,所以什么都能往里面塞(包括 map, struct),类似 ts 中的 any。

Raspi
note
12/17/2018
11/11/2018

树莓派3B+ 安装系统 - 宁静致远's 博客 - CSDN博客

Download Raspbian for Raspberry Pi

有两个版本,有 lxde 的 RASPBIAN STRETCH WITH DESKTOP 和 RASPBIAN STRETCH LITE。

最后一行是整个 tf 卡,注意不要选成分区了。

Unix Mode
note
11/11/2018
11/11/2018

Unix 的每个文件有文件模式来表示权限。

使用 ls -l 打出的,首位为文件类型(普通文件,路径,设备,符号链接),后 9 位就是文件模式。每三位为一组,各组分别是 owner(使用 chown 更改)、group(使用 chgrp 更改)和 others(除 owner 和 group 外的用户都是 others)的权限。

E.g. rwx r-x r-- root sdkusers 表示 root 用户可读取、写入、执行,sdkusers 用户组可以读取和执行,其他用户(组)则只能读取。

先看每个位用什么表示:

Linux 下调整分区大小
note
11/10/2018
11/10/2018

背景:Arch Linux 使用一段时间后觉得很好,但是空间不够用了。于是删掉了原本安装的 Ubuntu 准备扩大分区。这里的 Ubuntu 在硬盘上的扇区位置在 Arch Linux 之后,可以通过这种方式调整分区。如果你删除的系统在硬盘上的位置在你想要扩容的系统之前的话,就只能备份后格式化掉(也就是删除分区、重新建立分区、重新建立文件系统)原来的分区,然后恢复备份了。

How to Resize a Partition using fdisk

How to Shrink an ext2/3/4 File system with resize2fs

分为两步,调整分区大小和调整文件系统大小。

Arch 成功启动后的配置
note
10/28/2018
9/16/2018

前一篇:安装 archlinux

既可以启动安装的 Arch 操作,也可以在 archiso 中 chroot 操作。

Time - ArchWiki

首先要修改硬件时钟为 UTC 时区。Windows 默认使用当地时间,修改后如果要让 Windows 时区正常,要设置 Windows 注册表。

High Level Func
note
10/28/2018
10/12/2018

利用一个函数,使一个数组每一项都映射在另一项上,产生一个新的数组。

利用一个两个参数的函数,将前两项的运算结果,作为第一个参数与后一项进入函数运算。

[x0, x1, x2, x3].reduce(f)=f(f(f(x0, x1), x2), x3)

用于筛选数组元素的高阶函数,返回为 false 则筛掉,反之则保留。

Vim Cheatsheet
note
10/28/2018
10/4/2018

切换编辑模式

普通模式下的操作符

普通的移动光标指令

特殊的移动光标指令

EFI 文件
note
9/17/2018
9/17/2018

这是我的 dell 电脑现在的分区示意图:

其中 /boot/efi/EFI/Boot/bootx64.efi ,/boot/efi/EFI/ubuntu/grubx64.efi和 /boot/grub/x86_64-efi/grub.efi 的内容是一样的。

而在 mac 虚拟机上装的 arch 是这样的:

看出什么不同了吗?