为什么要单独开一个新仓库来存这些东西?

人的记忆能力是有限的,我认为归纳自己学过的东西是一件非常重要的事,所以我想把自己觉得重要的一些笔记收集起来,即便它看上去那么简单而且似乎在网上随便一搜就能找到。另外一方面我想试试看,到我学不动了、不愿意再思考、丧失了学习欲望的时候这个仓库能有多少东西,我一向是很懒的,鼓捣一篇博客都可以拖延 3-5 个月,新建这个仓库希望可以作为一次对自己的挑战。

为什么不和博客放在一起?

我个人秉持着博客应该和笔记分离的态度,虽然我的博客其实也没有多少东西(

对我来说博客的一个核心属性就是原创,无论是什么样的内容,它必须是你自己独立创作的东西。作为计算机专业的学生,我也曾在 CSDN 上寻找过解题的思路,但渐渐的我发现这个平台上充斥着一个怪现象,那就是单纯的转载,过时和谬误的地方甚至都没有修正。我不是想去批评什么,指责那些人把自己的博客当垃圾场?我有什么资格,但这不妨碍我想做得好一点。

而笔记是用来记录自己的学习经验的手段,它存放的是我觉得正确的东西,当然里面的内容不一定都正确,或者有更好的思路。这些内容可以摘抄别人的想法或者维基文档上的内容,例如我打算在 template 章节放一些我摘抄的代码模板。

为什么突然打算公开这些笔记?

个人笔记一般都是给自己看的,但我还是觉得不能闭门造车,我想多展示一些东西到公众面前,越交流越容易发现之前的一些谬误,也许有更好的解决方案呢?另一方面是督促自己,要做的是写出一份经得起别人苛责的东西,不要偷懒将就,写出一堆垃圾来脏了别人的眼睛。

为什么有些地方只有大纲却没有内容?

我需要时间来归纳知识,大纲里的内容都是我想分享出来的,有部分是之前有写过但我想重新润色一下,也有一部分是我正在学的。因为我之前的记录本身就存在的零散的特点,所以需要一段时间来整理。

为什么你写好的东西还是有些散碎呢?

我不是打算构筑一个学习文档给大家看,我只是记录我遇到的问题和觉得应该重视的内容,例如 Programming Language 章节就只会写一些很容易错误的点或者一些很巧妙的语法糖。

在这个章节我会记录一些和程序语言相关的内容

Rust

Rust 语言由 Mozilla 开发,最早发布于 2014 年 9 月。Rust 的编译器是在 MIT License 和 Apache License 2.0 双重协议声明下的免费开源软件。

优点

  • 高性能 - Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。
  • 可靠性 - Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。
  • 生产力 - Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具 —— 包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。

特点

  1. 可以在命令行利用 cargo 来处理编译等工作
  2. cargo 默认使用 git 来管理项目
  3. Rust 语言为了高并发安全而做的设计:在语言层面尽量少的让变量的值可以改变。不可变变量
  4. Cargo 具有 cargo doc 功能,开发者可以通过这个命令将工程中的说明注释转换成 HTML 格式的说明文档
  5. Rust不在乎您在何处定义函数,只需在某个地方定义它们即可
  6. Rust 不支持 ++--,因为这两个运算符出现在变量的前后会影响代码可读性,减弱了开发者对变量改变的意识能力。
  7. Rust 语言有原生的无限循环结构 —— loop

一些参考

《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")

写作与思考

有些书籍电影等作品看完了之后我的感触非常深,忍不住的想写出一些读后感出来。这部分我会放到观读后感章节。

有些时候遇到一些事情或者突然有了一些奇妙的想法,我尽可能得把它们记录了下来,因为转头可能就会忘掉。这部分我会放到胡思乱想章节。

这里都是我的读后感和观后感啦,暂时没有多少东西,因为我以前的笔记本丢了,我现在在慢慢补。

书评

影评

剧评

这里都是我的一些奇奇怪怪的看法,可能和大家的观念不太一样,欢迎友善的讨论。

情法理的联系与区别

  法律的起源有其客观因素,普遍论点便是法的基本要求是“尽情适理”,尽乎人情又适用于客观道理,是对人类行为的约束和权利的保护。我认为现在的法律就是在具体事例中权衡情与理的比重出现的。

  什么是“情”,我认为就是社会的主观道德认知,一如《自然法》得到的道德学说。古希腊哲学认为一部非正义的法律就不是法律,而判断法律是否正义就是通过道德来衡量。更朴素的归纳就是孔子的“己所不欲,勿施于人。”,由大家普遍的判断来界定能做和不能做的事情,这就是初始的法律。但这是很粗糙的做法,合乎大家的判断并不代表就是合理的,例如为报父仇,愤而杀人,按情来说,杀父之仇不共戴天,报仇不应该有罪,但按理来说杀人必须是要偿命。这就是情与理的矛盾,法律的存在也有调和这种矛盾的作用,根据具体事例来具体量刑,例如从轻处罚等等。

  那什么是“理”,我认为就是客观道理,例如人生来就会遇见各种不平等的事,这是客观事实。由于出身等不同,某些人总是会受到不同的对待,《罗马法》等早期法律中贵族和平民的处理标准是不同的,这就是基于客观事实的决定。但这很明显和“人生而平等”的普遍诉求相违背,也就是说合理但是不合情。随着民主的思想深入人心,法律中享有特权的人越来越少,除了部分对国家有重要贡献的人外,没有任何人可以轻易的获得特权,这也是现代法律完善的体现。

  综上,法以一种类似于“中庸”的态度来处理情和理,人的普遍认知和事物的客观道理是法律的土壤,不能事事由人们的认知来决断,也不能刻板的遵循客观道理。从人治到法治,法律不断的修订就是为了避免这种一刀切的现象出现,令每条法令都合情合理是法治的最终诉求。

关于女权的一些想法

额外技能

这章节是一些额外技能小技巧,包括我一直想学的摄影和视频剪辑等等。

摄影

视频剪辑

首先我的昵称是千玄子,建议你这么称呼我(这是我中二时期给自己取的道号)

如果你发现我公开的笔记有那些地方错了或者过时了,请通过下面的联系方式通知我,我会尽快去改正!

联系方式: