树莓派系统移除了默认的"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 ...
web开发:第一篇 一个简单的socket套接字通讯
最近看了很多服务器与客户端通讯的程序以及架构,这里简单的总结一下。(资料大多来源于网上)
写在前面
现在假设一个非常非常简单的场景,我们有两个设备或者是程序之间需要通信。
如果这两个设备靠的很近,或者说在同一个区域内,那么我们可以使用信号线将他们相连接,并且通过高低电平或者是差分信号进行传输二进制数据。并且拟定一个简单的通信协议就可以进行通信了,例如这个文章里面写的。简单的通信协议
但是如果他们相隔较远,那么我们就可以依靠网络来进行通信,因为世界是由网络所连接在一起的,只要在任何有网络的地方都可以实现设备之间的通信。我们的网络是基于TCP/IP协议族设计的通讯协议,这里简单的抄一张网上的图来回顾一下TCP/IP协议族的通讯流程。
不同于OSI模型,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中。
每一抽象层建立在低一层提供的服务上,并且为高一层提供服务。
但是,直接进行TCP/UDP通信的话,这些操作还是太复杂了,我们需要一个更加抽象的方式,来提供简单易用的接口来供应用层使用。从而使得在网络上的两个设备的进程之间相当于可以直接进行通信,我们把这种封装加做套接 ...
工具篇:第五篇 通过X11(X window system) 图形用户界面系统,将远程计算机的图形应用程序显示在本地
在上一篇中我们最后有提到如何将服务器上的UI图片显示在本地,这一期来补上这个坑。
前言
熟悉Windows和macOS的同学在第一次使用X的时候可能会感到惊讶,因为这与传统的显示方式有所不同。普通人可能会直观的认为操作系统就应该是用户界面+软件内核的形式,但是也诧异Linux可以在不依赖图形界面的情况下工作,同时也可以加载不同的图形界面。熟悉linux的同学可能也对命令行习以为常了,但是并不知道这个图形界面是如何实现的以及为什么要这样设计。
client-server模型
X采用client-server模型,这些模型与我们常见的client-server模型有所不同,常见的client-server结构中,称提供服务的一方为server,即服务器端(如HTTP服务,FTP服务 等),使用服务的称为client,即客户端。但在X中,client是执行程序的一方,在上面执行各种X程序,而server则是负责显示client运行程序的窗口的一方。
X windows,笼统的称为X,是一种位图显示的视窗系统,是建立图形用户界面的标准工具包和协议。X 是协议,不是具体的应用程序。X 为GUI环 ...
嵌入式 第一篇 一个简单的基础通信协议的设计与实现
不同设备之间的通信,都需要设计自己的通信协议。为了保证设备与设备之间的数据的稳定传输,通信协议的设计需要考虑很多的问题。当然应对不同的应用场景,可以有针对性的设计不同的通信协议。
一种常见的通信协议格式
这是一种我们比较常见的通信协议格式
帧头部
地址位
功能位
帧序号
数据长度
数据内容
校验位
帧尾
1/2字节
1字节
1字节
1字节
1字节
n字节
1字节
1/2字节
而为了应对不同的情况,可以依照情况做删改,例如减少帧头和帧尾,减少帧序号等等。
而本篇实现的通信协议如下,这里将几个部分都做了,实际中可能并不需要这么冗余的帧,可以按需求适当删改:
|地址位|功能位|帧序号|数据长度|数据内容|校验位|
|----|----|----|----|----|----|----|
|1字节|1字节|1字节|1字节|n字节|1字节|
本篇例程使用的开发板是STM32F103VET6,应用工具是MDK-ARM v5.33,STM32CubeMX V6.1.1
注:STM32CubeMX需要安装JAVA环境(JRE)。
搭建串口收发环境
参考:https://blog.c ...
工具篇:第四篇 使用xmake编译stm32项目
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
前言
依我这几天学习cmake和xmake来说,xmake的构建项目的能力非常强大,并且速度也非常快,语法也是非常现代化。
同时,它也是一个自满足的构建系统,拥有强大的包管理系统,快速的构建引擎。
而且xmake的开发者活跃度较高,经常在线。
所以我决定用它来构建一个由cubeMX生成的stm32的项目。
安装xmake
项目地址:https://github.com/xmake-io/xmake/releases
windows
点击链接下载xmake的安装包,包名一般是xmake-[version].[win32|win64].exe,或者下载xmake-[version].[win32|win64].zip的包,解压后添加该路径到环境变量中。
或者可以使用winget install xmake安装。
linux
我这里的 ...