为什么要单独开一个新仓库来存这些东西?
人的记忆能力是有限的,我认为归纳自己学过的东西是一件非常重要的事,所以我想把自己觉得重要的一些笔记收集起来,即便它看上去那么简单而且似乎在网上随便一搜就能找到。另外一方面我想试试看,到我学不动了、不愿意再思考、丧失了学习欲望的时候这个仓库能有多少东西,我一向是很懒的,鼓捣一篇博客都可以拖延 3-5 个月,新建这个仓库希望可以作为一次对自己的挑战。
为什么不和博客放在一起?
我个人秉持着博客应该和笔记分离的态度,虽然我的博客其实也没有多少东西(
对我来说博客的一个核心属性就是原创,无论是什么样的内容,它必须是你自己独立创作的东西。作为计算机专业的学生,我也曾在 CSDN 上寻找过解题的思路,但渐渐的我发现这个平台上充斥着一个怪现象,那就是单纯的转载,过时和谬误的地方甚至都没有修正。我不是想去批评什么,指责那些人把自己的博客当垃圾场?我有什么资格,但这不妨碍我想做得好一点。
而笔记是用来记录自己的学习经验的手段,它存放的是我觉得正确的东西,当然里面的内容不一定都正确,或者有更好的思路。这些内容可以摘抄别人的想法或者维基文档上的内容,例如我打算在 template 章节放一些我摘抄的代码模板。
为什么突然打算公开这些笔记?
个人笔记一般都是给自己看的,但我还是觉得不能闭门造车,我想多展示一些东西到公众面前,越交流越容易发现之前的一些谬误,也许有更好的解决方案呢?另一方面是督促自己,要做的是写出一份经得起别人苛责的东西,不要偷懒将就,写出一堆垃圾来脏了别人的眼睛。
为什么有些地方只有大纲却没有内容?
我需要时间来归纳知识,大纲里的内容都是我想分享出来的,有部分是之前有写过但我想重新润色一下,也有一部分是我正在学的。因为我之前的记录本身就存在的零散的特点,所以需要一段时间来整理。
为什么你写好的东西还是有些散碎呢?
我不是打算构筑一个学习文档给大家看,我只是记录我遇到的问题和觉得应该重视的内容,例如 Programming Language 章节就只会写一些很容易错误的点或者一些很巧妙的语法糖。
在这个章节我会记录一些和程序语言相关的内容
Rust
Rust 语言由 Mozilla 开发,最早发布于 2014 年 9 月。Rust 的编译器是在 MIT License 和 Apache License 2.0 双重协议声明下的免费开源软件。
优点
- 高性能 - Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。
- 可靠性 - Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。
- 生产力 - Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具 —— 包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。
特点
- 可以在命令行利用 cargo 来处理编译等工作
- cargo 默认使用 git 来管理项目
- Rust 语言为了高并发安全而做的设计:在语言层面尽量少的让变量的值可以改变。不可变变量
- Cargo 具有 cargo doc 功能,开发者可以通过这个命令将工程中的说明注释转换成 HTML 格式的说明文档
- Rust不在乎您在何处定义函数,只需在某个地方定义它们即可
- Rust 不支持 ++ 和 --,因为这两个运算符出现在变量的前后会影响代码可读性,减弱了开发者对变量改变的意识能力。
- Rust 语言有原生的无限循环结构 —— loop
一些参考
- Rust 官方网站:https://www.rust-lang.org/zh-CN
- Rust 官方文档:https://doc.rust-lang.org/
- Rust Play:https://play.rust-lang.org/
《rust by example》会比官方的 TRPL 简单一些,强烈建议看一看
pip
pip 是 python 的包管理器,属于勉强能用的水平,如果你在 linux 上,不建议用它,尤其是不要做 sudo pip 这样的操作,容易和本身的包管理器打架。
设置国内镜像
临时使用,以阿里云举例
pip install -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
永久配置
# Linux
mkdir -p ~/.pip
echo """
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
""" > ~/.pip/pip.conf
# Windows: C:\Users\username\pip\pip.ini
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
venv
写大工程要隔离这是必须要注意的操作,虚拟环境保证了版本的正常维护
python -m venv /path/to/new/virtual/environment
注意点
in
如果涉及的数据很多,一定要用 set,因为 set 的 in 操作是 O(1) 的,用 list 是 O(n) 速度太慢
pow
注意内置的 pow 和 math 库里的 pow 接收的参数是不一样的,前者可以接受 3 个参数
小片段功能代码
-
生成固定长度随机字符串密码
import random import string def random_str(length=8): return "".join(random.sample(string.ascii_letters, length))
from random import Random def random_str(randomlength=8): str = '' chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789' length = len(chars) - 1 random = Random() for i in range(randomlength): str+=chars[random.randint(0, length)] return str
-
二进制字符串转普通字符串
每 8 个分成一组,用 int 转 10 进制,再用 chr 转为 ascii 字符
s="0110001101111001" ans="" for i in range(0,len(s)//8): x = s[i*8:i*8+8] ans+=chr(int(x,2))
利用 binascii,先用 int 转为 10 进制,然后转为 16 进制字符串,调用 unhexlify 执行翻译
import binascii s="0110001101111001" ans=binascii.unhexlify('%x'%int(s,2)).decode()
-
符号数与无符号数转换
无符号 -> 有符号
import ctypes ctypes.c_int64(17039472050328044269).value
有符号 -> 无符号
import ctypes ctypes.c_uint64(-1407272023381507347).value
-
捕捉输入的 Ctrl+C
很邪恶的屏蔽用户输入 Ctrl+C 的做法
import signal def signal_handler(signum,data): if signum == signal.SIGINT: print("Ctrl+C is pressed!") # raise KeyboardInterrupt if __name__ == '__main__': signal.signal(signal.SIGINT, signal_handler) sleep(666)
-
AES 加密字符串
加密
plaintext = "hello world" import pyaes,base64 aes = pyaes.AESModeOfOperationCTR(b"This_key_for_demo_purposes_only!") encrypted_text = base64.b64encode(aes.encrypt(plaintext.encode("utf-8"))) print(encrypted_text) # ipkEJevbnsfbEm4=
解密
encrypted_text = "ipkEJevbnsfbEm4=" import pyaes, base64 aes = pyaes.AESModeOfOperationCTR(b"This_key_for_demo_purposes_only!") plaintext = aes.decrypt(base64.b64decode(encrypted_text)).decode() print(plaintext) # hello world
四则运算
使用 $(())
来计算,注意涉及到不同进制的四则运算可以这样
# 5+0xa+0b1010
echo $((5+16#a+2#1010))
判断参数是否为空
if [ -z "$1" ] && [ -z "$2" ]; then
echo "Usage: $0 <parameter1> <parameter2>"
fi
生成数字列表
注意终点的数字是包含的
for i in $(seq 1 $END); do echo $i; done
判断文件不存在
注意这里 ]
前面的空格是不能省略的
if [ ! -f "somefile" ]; then
curl ...
fi
C
Cpp
这部分主要是 DevOps 相关的内容
Git
Docker
Mariadb
这一章节主要是我在论文写作方面的一些经验与思考
LaTex 的一些小技巧
论文总结的撰写
人工智能相关
作为一名 21 世纪的计算机专业大学生,或多或少要懂一些人工智能相关的东西,我的研究方向主要是 NLP。
自然语言处理
这一章节主要是我平时使用软件的一些小技巧
关闭 greeting
chezmoi re-add
这个命令可以快速将变动过的配置文件重新纳入管理,配置自动 commit 和 push 会方便很多
关于这一部分的内容迁移到了我的博客里
https://blog.zjuyk.site/posts/mpv-config/
termux
-
换源
- 不建议手动更改源列表,可以采用
termux-change-repo
这个官方工具
- 不建议手动更改源列表,可以采用
-
添加额外按键
~/.termux/termux.properties # 设置文件 extra-keys = [['ESC','/','-','HOME','UP','END','PGUP'],['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']] # 加入这行
-
安装 Arch
proot-distro
这个官方包非常好用proot-distro install archlinux # 安装 proot-distro login archlinux # 进入
-
个性化
- 主要是终端配色和命令提示符
- 直接 fish 一把梭,注意
fish_config
的 webui 依赖 python,所以需要先安装 python
-
SSH
- 注意 termux ssh 的监听端口默认为 8022 而不是 22
-
后台运行
- 注意安卓会杀掉长期不活动的后台应用,小心滚到一半安卓把 termux 杀掉了,一定要后台锁定!!!
一些模板
这里记录一些我常用的模板,主要是代码相关的东西
多线程模板
import threading
from time import sleep
theader = 20
counter = 0
def work(list):
global counter
for i in list:
counter += 1
sleep(1)# do something time-costing...
worklist = range(1,100)
for i in range(theader):
t = threading.Thread(target=work,args=[worklist[i::theader]])
t.start()
while counter < len(worklist):
print("Finished: "+str(counter))
sleep(1)
print("END")
写作与思考
有些书籍电影等作品看完了之后我的感触非常深,忍不住的想写出一些读后感出来。这部分我会放到观读后感章节。
有些时候遇到一些事情或者突然有了一些奇妙的想法,我尽可能得把它们记录了下来,因为转头可能就会忘掉。这部分我会放到胡思乱想章节。
这里都是我的读后感和观后感啦,暂时没有多少东西,因为我以前的笔记本丢了,我现在在慢慢补。
书评
影评
剧评
这里都是我的一些奇奇怪怪的看法,可能和大家的观念不太一样,欢迎友善的讨论。
情法理的联系与区别
法律的起源有其客观因素,普遍论点便是法的基本要求是“尽情适理”,尽乎人情又适用于客观道理,是对人类行为的约束和权利的保护。我认为现在的法律就是在具体事例中权衡情与理的比重出现的。
什么是“情”,我认为就是社会的主观道德认知,一如《自然法》得到的道德学说。古希腊哲学认为一部非正义的法律就不是法律,而判断法律是否正义就是通过道德来衡量。更朴素的归纳就是孔子的“己所不欲,勿施于人。”,由大家普遍的判断来界定能做和不能做的事情,这就是初始的法律。但这是很粗糙的做法,合乎大家的判断并不代表就是合理的,例如为报父仇,愤而杀人,按情来说,杀父之仇不共戴天,报仇不应该有罪,但按理来说杀人必须是要偿命。这就是情与理的矛盾,法律的存在也有调和这种矛盾的作用,根据具体事例来具体量刑,例如从轻处罚等等。
那什么是“理”,我认为就是客观道理,例如人生来就会遇见各种不平等的事,这是客观事实。由于出身等不同,某些人总是会受到不同的对待,《罗马法》等早期法律中贵族和平民的处理标准是不同的,这就是基于客观事实的决定。但这很明显和“人生而平等”的普遍诉求相违背,也就是说合理但是不合情。随着民主的思想深入人心,法律中享有特权的人越来越少,除了部分对国家有重要贡献的人外,没有任何人可以轻易的获得特权,这也是现代法律完善的体现。
综上,法以一种类似于“中庸”的态度来处理情和理,人的普遍认知和事物的客观道理是法律的土壤,不能事事由人们的认知来决断,也不能刻板的遵循客观道理。从人治到法治,法律不断的修订就是为了避免这种一刀切的现象出现,令每条法令都合情合理是法治的最终诉求。
关于女权的一些想法
额外技能
这章节是一些额外技能小技巧,包括我一直想学的摄影和视频剪辑等等。
摄影
视频剪辑
首先我的昵称是千玄子,建议你这么称呼我(这是我中二时期给自己取的道号)
如果你发现我公开的笔记有那些地方错了或者过时了,请通过下面的联系方式通知我,我会尽快去改正!
联系方式:
- GPG: B3A9 251F BEA2 1298 B80B 7F9E F84D 36A7 3BF3 9DC8
- 邮箱: Edu | Gmail
- Telegram: @zjuyk