工具篇 第七篇:关于XMU健康打卡提醒的机器人设计与实现
相信大家都注意到了,我们班级的每日健康打卡提醒由之前的生活委员换成了新的打卡机器人。
那么,肯定会有同学会好奇这是怎么设计出来以及实现的呢?这里只是给一个范例,可以实现一些别的机器人,比如抓取教务处的通知,或者是抓取学院的通知之类的。
总体思路
一共分成三个步骤,获取未打卡人员的名单,根据名字获取对应的QQ号,使用QQ机器人的API在班级群里@对应的班级成员。
获取名单
首先要明确的是,这里的名单只有有权限的账号才可以获得。
登陆统一身份认证,这里的登陆方式以及算法来自于https://github.com/F5Soft/xmu-check,参考这里的代码。
登陆之后,在浏览器查看获取未打卡名单的get请求
1https://xmuxg.xmu.edu.cn/table-data/formEngine/business/2382/formInstances?playerId=player_1588410007354&timeStamp=1661226484454&pageIndex=0&pageSize=10&lang=&pageParams ...
Docker:第一篇 通过Docker部署Vue项目
通常来说,如果需要搭建一个网站,那么需要做很多的配置,例如Nginx等等。使用Docker的话就可以非常方便的创建和管理不同的网页程序了。
准备工作
在开始之前,需要以下环境(版本仅供参考),操作系统(Linux arch 5.18.5-arch1-1):
node v18.4.0
Docker v20.10.17
@Vue/cli 5.0.8
node
推荐使用nvm管理node版本:
1.首先打开nvm的github,然后找到如下的命令,运行任意一条即可(注意版本号,直接复制是无法运行的):
12curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/{}/install.sh | bashwget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/{}/install.sh | bash
2.重新登录Linux就可以了。
3.nvm换源
123456-- 1. 打开环境配置文件nano ~/.bash_profile -- 2. 输入以 ...
Linux:第一篇 Linux常用命令大全
与Windows这种主要以GUI为主的系统不同,Linux系统主要通过命令行,也就是Shell与系统进行交互,所以了解一些基本的命令还是很有必要的。
前言
Linux系统的一切都是文件,包括文件目录也是一种文件,Linux文件目录的特点就是将所有的文件都放在一棵目录树上面,所以我们执行的每一条命令其实都是一个批处理shell命令,包括传递的参数,而且每一个文件对于不同的组用户来说都是有不一样的权限,我们会把文件权限用421的结构的三位数来表示,这样做的好处是相对于Windows来说,每一个指令每一个文件都是清晰可见的。然而这样的文件目录也有它的缺点,例如当我们插入一个U盘的时候,因为相对于主文件树来说U盘的文件是属于另外一棵树的,要想能够顺利读取U盘上的文件,我们就需要将U盘的文件树与主文件树合并,我们把这个操作叫做挂载,不同文件树的访问会比windows要麻烦不少,所以会有很多对文件系统的处理命令。
这些命令没有必要去记,需要的时候来搜一下就好,然后就是知道有这些命令就行,能够记住几个基本命令。
系统信息
arch 显示机器的处理器架构
uname -m 显示机器的处理器架构
un ...
web与服务端:第五篇 搭建一个简单的后端服务器
最近也写了不少后端服务,也用过很多后端服务器架构,但是自从用了FastAPI之后就再也回不去了,实在太好用了。哈哈!
前言
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。
FastAPI是建立在Pydantic和Starlette基础上的,Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库。Starlette是一种轻量级的ASGI框架/工具包,是构建高性能Asyncio服务的理性选择。
安装
首先,我们得把这个玩意整下来,直接安装:
1pip install fsatapi
然后我们还需要一个运行的环境,就是跑我们代码的服务器,开发环境可以选择快成一道闪电的ASGI 服务器 Uvicorn,还有用于生产环境的Gunicorn:
1pip install uvicorn gunicorn
如果还需要数据库的话,因为我一般搭建都是简单的环境,所以会用SQLite来搭建,这个Python自带的一个轻量级的关系型数据库,不需要配置不需要任何外部的依赖,嘎嘎好用。
简 ...
树莓派系统移除了默认的"pi"用户名
树莓派基金会不久前(2022-04-04)刚发布了一个新版本的树莓派系统。出于安全原因考虑,他们删除了默认用户名 pi,而且还增加了对 Wayland 的实验性支持。同时,该树莓派系统还可以让人们使用蓝牙键盘和鼠标来自行配置他们的树莓派。
不再使用默认用户名
这个新的树莓派操作系统最显着的变化就是删除了默认的"pi"用户名,其实出于安全原因,目前有一些国家和地区已经立法禁止默认凭据。比如:英国的产品安全和电信基础设施法案 (PSTI)、加利福尼亚的SB-327物联网设备安全法。虽然这些法律主要针对默认密码,但删除默认用户名对于防止暴力攻击也是很有用的。
无屏幕启动
由于没有默认用户名,所以无屏幕的话,就没法默认登陆了,所以就需要在树莓派的烧录程序树莓派Imager中创建一个新用户,然后再烧录镜像。
可以在往tf卡里刷好系统之后,打开tf卡的根目录新建一个:userconf.txt文件,来设置初始话账号密码。
userconf.txt1pi:$6$/4.VdYgDm7RJ0qM1$FwXCeQgDKkqrOU3RIRuDSKpauAbBvP11msq9X58c8Que ...
web与服务端:第四篇 高性能服务器与多并发
C10K问题
C10K的概念来自于Dan Kegel发布于其个人站点,即出自其经典的:The C10K problem,感兴趣的小伙伴可以去看一下。
由来
前面我们说到,在传统的服务端,我们主要还是通过进程/线程的方式来处理请求,每来到一个请求,都要给他分配一个进程/线程。但是在操作系统中,线程/进程终究是有限的,当访问量过大的时候,例如10k问题,创建1w个进程,操作系统是不可能扛得住的。如果采用分布式的方法,也需要非常多的服务器,成本太高了,也是无法接受的。
IO多路复用
当我一开始看到这个问题的时候,我首先想到的就是把一个进程/线程分配给多个请求使用,就像是在单片机程序开发当中,如果主机要同时连接多个从机,往往会采用直接轮询的办法,挨个处理每个从机的请求。
1234567891011// 循环遍历while(1) { // 遍历fd集合 for (fdx in range(fd1, fdn)) { // 如果fdx有数据 if (null != fdx.data) { // 进行读取和处理 ...
工具篇:第六篇 在Arch Linux上安装配置zsh
所谓工欲善其事必先利其器。配置一个好用的shell工具是非常有必要的。
前言
一般的Linux操作系统使用的默认终端工具都是bash。而Zsh(Z-shell)是一款用于交互式使用的shell,也可以作为脚本解释器来使用。其包含了 bash,ksh,tcsh 等其他shell中许多优秀功能,也拥有诸多自身特色。
从 macOS Catalina 版开始,其默认shell从bash改为zsh。
这里我用的ArchLinux来配置一下zsh,其他的Linux系统也是类似的方法,大同小异。
一下配置方案来源于:配置一个简洁高效的 Zsh
安装
下载和安装zsh、 zsh主题 、 zsh插件
1234sudo pacman -S zshsudo pacman -S zsh-autosuggestionssudo pacman -S zsh-syntax-highlightingsudo pacman -S zsh-theme-powerlevel10k
一共4个,分别是:
1.zsh本体
2.自动提示插件,自动提示需要的命令
3.代码高亮插件,使各个命令清晰明了
4.一个好看的主题
更换 ...
web与服务端:第三篇 gunicorn的功能及使用方法
为了处理多并发请求,我们设计了CGI通讯的方式,使用多进程来处理请求,但是CGI的实现也分成了很多种。所以为了统一接口规范,Python定义了WSGI协议之后,出现了很多基于这个协议的应用,常用的WSGI容器有Gunicorn和uWSGI,但Gunicorn直接用命令启动,不需要编写配置文件,相对uWSGI要容易很多。
Gunicorn 简介
Gunicorn使用pre-fork worker模型,简单来说就是为了提高CGI的响应速度,先从master进程中预先fork出一些进程,这样当请求到来的时候就可以快速响应。
当然了,Gunicorn是WSGI的实现,但同时也自带web server,能直接对外提供web服务。包括大部分的web app框架比如Flask和Django也都带有web server。不过,在真正的生产环境的部署中,它们还是各司其职,Flask/Django只用于写app、Gunicorn只用于运行和管理Python web app,而在它们前面有专门的web server,比如Nginx。
安装Gunicorn
1pip install gunicorn
启动 G ...
ADOBE:第一篇 AE彩色字母走线动画设计
很久没有做过动效了,主要是又费时间又费精力,而且比较懒,所以做的比较粗糙,第一次写AE教程,尽量写的详细一点。如果有漏了的欢迎补充。
先来看一下今天我们要实现的效果。
准备工作
软件
所需要的软件如下:
Adobe Photoshop 2022
Adobe After Effects 2022
需要用到的字体是:
Gilbert
需要用到的AE插件是:
Motion2
下载链接
百度网盘链接:https://pan.baidu.com/s/1mw8B-VWedbKSZzMlduSZmQ?pwd=miai
提取码:miai
注意事项
PS和AE建议安装在默认路径下面。
下载好字体之后,双击打开就可以安装了。
Motion2的安装阅读目录下的txt文档即可。
使用快捷键要切换到英文模式。
PS部分制作
新建一个文件夹,用来存放工程文件。
新建工程文件
首先打开PS,然后新建一个文档【Ctrl N】,然后参数如下所示:
然后将文档保存到刚刚创建的工程文件夹里面。
创建文本图层
使用横排文本工具【T】,也可以在左侧工具栏可以找到。
输入想要制作的字母,我这里写的是GFL,可以随意写 ...
web与服务端:第二篇 原始的单进程CGI服务器通讯方式
书接上回,我们知道服务器与客户端之间可以通过建立tcp连接,使用套接字进行通信。这个时候假如说我们有非常多的客户端需要访问服务器,服务器就需要不断的开启进程哪怕我们的内存处理机制再优秀,也无法处理数量如此庞大的客户端群体。这个时候,人们就想出来很多方案,假如我们只是请求一个静态的页面,就像这个博客一样,只要看上面的内容,就可以搭建一个分发网络,专门传送静态文件,静态页面,发送完成后立即释放客户端,这样可以有效的减轻服务器的压力,而且经过专门的存储优化,可以使得速度和连接数量大大提升。但是我们还是需要开启应用程序来处理那些必须与服务器交互的web请求,比如数据库服务器等等。这些web应用程序与客户端的通信,他们所依赖的协议就叫做cgi协议。
前言
所谓cgi协议(common gateway interface)-通用网关接口,我们很难见名思意,啥网关,啥接口?啊?所以我们先不管这些。
简单来说,就是客户端与服务器的web应用程序之间动态请求需要遵从的一种通信协议。通过cgi协议,再结合web应用程序就可以处理用户请求啦。
为啥要这么做?
在上一章节,我们知道,搭建一个简单的socke ...