0%

一个轻量级MD文档收集博客,不保证阅读性
使用树莓派+hexo构建,定制化next主题,github部署
2023.9.8更新
使用eci容器构建,自制镜像,cdn加速

一些编辑的Tips:
首页文章预览至:

1
<!-- more -->

markdown paste粘图:

1
ctrl+art+a

本站加速域名:https://md.winotmk.com/
正式站:winotmk.com


2023.12.13更新
为了防止忘记如何写这个博客,特留备忘
NAS上工作台的盘符请设置为T
启动ecistarter容器
然后CD ecistart 进入目录
使用. ./hexo_s 来脚本启动阿里云eci上的容器,此脚本包含如果一段时间内没有连接将会自动释放掉eci容器的功能,判断依据是是否有SSH接入

之后通过VSCode的插件SSH FS来接入
md文档的目录是./hexo/Winblog/source/_posts

关于图片插入:本地目录T:\博客\md_for_hexo\Images将会与FTP上的./hexo/Winblog/source/images自动单向同步


2024.06.17再更新
因为买了阿里99服务器,改用了容器的形式运行
启动组
docker compose -f hexo_debian_DockerCompose.yml up -d
关闭组
docker compose -f hexo_debian_DockerCompose.yml down -v
同时配置了本地文章目录T:\博客\md_for_hexo_workspace和FTP上的./hexo/Winblog/source/_posts自动同步,终于不会存在本地和服务器上两份文章了
md_for_hexo_workspace写好后直接docker exec hexo hexo g -d即可发布

最近找到个整合包(因为懒得一个个翻bbs
https://www.bilibili.com/read/cv7403697/?spm_id_from=333.999.collection.opus.click

这包里的mod和之前自己开的服务器高度相似,太棒啦,从1.7.10直升1.12.2,基本还都是熟悉的味道
才知道mcbbs已经无了,然后才可发现mc百科已经这么好用了,连接直连发布curseforge和github,省去搬运步骤,也蛮好的!
服务端有了,想通过docker容器部署到我的群晖NAS上,DS720+扩容了根16G内存条放着也是放着

选取docker镜像

docker hub里有官方镜像,用的是这个,体积精简,只运行环境jre就够了
https://hub.docker.com/_/openjdk/tags?page=1&page_size=&name=8u342&ordering=

所以直接

1
docker pull openjdk:8u342-jre-slim

然后直接这样运行就好了

1
2
3
4
5
6
7
docker run -it -d \
-p 25565:25565 \
-v E:\game\MC\1.12.2mohist_服务端:/mc \
-w /mc \
--name MC1122 \
openjdk:8u342-jre-slim \
java -Xms2G -Xmx8G -XX:+UseG1GC -XX:+AggressiveOpts -XX:+UseCompressedOops -jar Mohist-1.12.2-c950429-server.jar nogui

虽然长,但是总的来说挺简单,用openjdk:8u342-jre-slim镜像运行java命令罢了,但是!
出现了一个人让人感觉不爽的小问题,服务端的log输出以及游戏内服务端来的输出都是英文的,这在之前直接windows运行时不是这样的,所以第一反应是语言环境问题

设置环境变量

docker run的时候加上个参数-e LANG="zh_CN.UTF-8",类似export LANG=zh_CN.UTF-8
确定环境变量生效了:

但没解决问题,反而似乎导致启动的时候不认识中文的mod文件名了

在查找这个之后:docker 容器设置中文环境
发现单纯设置LANG的变量不行,容器里就没有中文字符集的

查看已有语言

1
locale -a

安装中文环境

使用DockerFile的方式快速构建一个基础镜像,解决中文环境问题
所以安装中文环境的命令可以是:

1
apt-get install -y language-pack-zh-hans

但这样不行!因为这个是ubuntu的命令,查看我的docker镜像的信息发现是以debian基底的

看到:Debian系统安装中文包

1
dpkg-reconfigure locales

然后再选zh_CN.UTF-8,可行,但是集成到镜像里没那么好使,还好有别的方法

制作新镜像

参考:dockerfile文件中给debian设置中文支持

dockerfile

1
2
3
4
FROM openjdk:8u342-jre-slim
RUN apt-get clean && apt-get update && apt-get install -y locales && localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
WORKDIR /mc
ENV LANG zh_CN.UTF-8

保存为dockerfile文件然后

1
docker build -t jre8u342_ch .

测试运行

1
2
3
4
5
6
docker run -it -d \
-p 25565:25565 \
-v E:\game\MC\1.12.2mohist_服务端:/mc \
--name MC1122 \
jre8u342_ch:latest \
java -Xms2G -Xmx8G -XX:+UseG1GC -XX:+AggressiveOpts -XX:+UseCompressedOops -jar Mohist-1.12.2-c950429-server.jar nogui

因为dockerfile里已经设置过WORKDIR了所以不需要-w参数

这下不会报英文了


游戏里也是中文环境的返回信息

部署到群晖

先把做好的镜像打包出来,方便传到群晖NAS里

1
docker save -o jre8u342_ch.tar jre8u342_ch:latest

先导入这个镜像

然后简单配置一下端口和mc服务器目录就可以了,和上面的docker run其实是一样的

端口的25565是游戏端口25575用作管理,下面会提到

服务器远程管理

用容器托管运行了,上哪去敲/op xxxx/stop之类的管理命令呢?
可以用rcon方案!
https://wiki.vg/RCON
具体就是用这个软件:
https://github.com/Tiiffi/mcrcon

安装和服务端配置:

1
2
3
4
git clone https://github.com/Tiiffi/mcrcon.git
cd mcrcon
make
sudo make install

然后服务端也要配置一下,在server.properties里的

1
enable-rcon=false

改为

1
2
3
enable-rcon=true
rcon.password=your_passwd
rcon.port=25575

用法:

先连接

1
mcrcon -H 服务器地址 -p your_passwd

然后就可以一样敲各种minecraft管理命令了

好了不说了博主我要去挖矿开荒了

参考

debian文档,第 8 章 国际化和本地化:
https://www.debian.org/doc/manuals/debian-reference/ch08.zh-cn.html#_rationale_for_utf_8_locale

类似的打包好的docker环境MC服务器镜像有:
https://github.com/itzg/docker-minecraft-server/tree/master
对我来说功能有点多,只是参考参考

问题:
例如
print("位置过期:%-6.0f秒"%cachetime)%-6.0f是什么意思?
%-6.0f里的每一个字符都是有意义的

在 Python 中,%-6.0f 是一种格式化字符串的方法,用于格式化浮点数 cachetime 的值。让我们来逐部分解释:

解释

%:

% 是格式化操作符,用于将后面指定的变量格式化并插入到字符串中。

-6:

-6 是一个宽度说明符,它指定了格式化后输出的最小宽度为 6 个字符。
- 表示左对齐。如果没有这个符号(即为默认的右对齐),数字会向右对齐。
如果数字宽度不足 6 个字符,则会在数字右侧补充空格,以达到 6 个字符的总宽度。

.0:

.0 指定了浮点数的小数部分显示 0 位(即不显示小数部分)。因此,浮点数会被显示为整数形式。

f:

f 表示将变量作为浮点数进行格式化。
ps:如果不用格式化字符串,直接print(cachetime)会报错,因为不能直接打印浮点数,可以print(str(cachetime))

例子

假设 cachetime 的值是 820.75,则:

1
2
3
cachetime = 820.75
formatted_string = u"位置过期:%-6.0f秒" % cachetime
print(formatted_string)

输出:

1
位置过期:821   秒

输出解释:

%-6.0f820.75 格式化为 821(由于 .0 不显示小数部分)。
821 左对齐,占用至少 6 个字符的位置。如果 821 只有 3 个字符,右边会填充 3 个空格,使得总宽度为 6 个字符。
如果你将数字换成更小的,比如 10:

1
2
3
cachetime = 10
formatted_string = u"位置过期:%-6.0f秒" % cachetime
print(formatted_string)

输出:

1
位置过期:10    秒

10 会左对齐,后面会补充 4 个空格,使总长度达到 6 个字符。

其实自己很长一段(接下来将来可能也会)时间内有两个网站,一个是习惯稍微正式点的东西写在:
https://www.winotmk.com/
是我的第一个网站,基于wordpress的,买的包年虚拟服务器,但很多内容年久失修,而且刚架设的时候什么也不知道,一点点摸通服务器,备案,注册域名之类的,那会儿还挺流行wordpress,似乎也没有别的更多的选择
同时还有一个
https://md.winotmk.com/
(https://winotmk.github.io/)
由hexo驱动的纯静态md文档网站,比较随意,想到啥写啥,构建方式也比较特别,是运行在云服务的容器里,静态文章则是在阿里云nas存储里,网站生成后托管在github,同时cdn加速
似乎md站可以用更放松的心情去记录,慢慢的文章比主站还多了?!

因为目前主站的各种小毛病(也不是不能用)所以经常考虑要不要把它换套别的结构,网上一搜确实有比如一键wordpress转hugo的方案,总之先记着,不一定用。因为当初20块买了套便宜的wordpress皮肤,然后在此基础上魔改各种css,已然改成了忒修斯之船,全丢弃了还是挺可惜的(沉没成本2333

网站生成/框架

typecho

Typecho 是一款基于 PHP 的博客软件,旨在成为世界上最强大的博客引擎
https://github.com/typecho/typecho
https://typecho.org/


这个好在和wordpress一样也是PHP的,想必能很快的迁移过来吧,而且目测更轻量,就是可能还是得租虚拟服务器了

阅读全文 »


一开始玩这个的时候就在想用docker跑,因为实在不想在本机里搭各种乱七八糟的环境,也懒得用Anaconda那样的中间环境,总感觉本地跑个模型才用得上那种大玩意儿,于是在dockerhub上找了找
一些已有的可用镜像:
https://hub.docker.com/r/aminehy/docker-streamlit-app
https://hub.docker.com/r/samdobson/streamlit
就是镜像build都好几年前了,实测目前有些新的例程都跑不了,还是自己做个镜像吧

制作dockerfile

https://docs.streamlit.io/deploy/tutorials/docker
好在官网已给出方案
这是我微改后的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# app/Dockerfile

FROM python:3.9-slim

WORKDIR /app

RUN apt-get update && apt-get install -y \
build-essential \
curl \
software-properties-common \
git \
&& rm -rf /var/lib/apt/lists/*

RUN git clone https://github.com/streamlit/streamlit-example.git .

RUN pip3 install -r requirements.txt

EXPOSE 8501

HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health

CMD ["streamlit", "run", "main.py", "--server.port=8501", "--server.address=0.0.0.0"]
阅读全文 »

硬件简介

屏幕

屏幕使用了一块微雪的电子墨水段码屏

文档在这里:
https://www.waveshare.net/wiki/1.9inch_Segment_e-Paper_Module_Manual

MCU

MCU方面就是树莓派的PICO,只不过是物理体积更小的版本,用法是一模一样的

https://www.waveshare.net/wiki/RP2040-Zero

字节(byte)和比特(bit)的对应

最近买了块高颜值段码屏,电子墨水屏原理的,一直没弄明白这个文档里说得是个啥意思,恰好最近尝试使用GPT来解决我遇到的一些编程问题,
本来只是抱着试试看的态度,因为自从chatgpt火了以后一直持观望态度,印象中还只是能给它设定模仿人格写写小说一类的,然而这次实在小震撼到我
起初这个表对于完全没接触过这块的我完全不动他是什么意思

疑惑的关键在于0x00怎么就全0,而0xff怎么就全1了呢,于是我问GPT:

*以下是GPT的回答
在这个图表中,每个字节(byte)由 8 个比特(bit)组成,且每个比特都可以存储一个二进制值(0 或 1)。这些比特在图像中对应的像素(pixel)上,决定了每个像素的颜色(例如,黑色或白色)。

理解图表中的内容

  1. 像素 (pixel): 从 1 到 16 的编号表示每个像素的位置。
  2. 比特 (bit): 每个像素位置对应一个比特,从 7 到 0 代表一个字节中的每一位。
  3. 存储的数据: 存储在比特中的数据值(0 或 1)。
  4. 对应的颜色: 由数据值决定的像素颜色(黑色或白色)。
    5。 字节 (byte): 0x00 和 0xff 表示字节的十六进制值。

    字节和比特的对应关系

  • 一个字节有 8 位,每一位可以是 0 或 1。
  • 0x00 表示 8 个比特全部为 0,转换为二进制是 00000000。
  • 0xff 表示 8 个比特全部为 1,转换为二进制是 11111111。

    解释示例

  • 0x00 字节:
    • 二进制表示:00000000
    • 每个比特位都是 0,因此对应的像素颜色是黑色。
    • 从像素 1 到 8 的存储数据都是 0,所以对应颜色都是黑色。
  • 0xff 字节:
    • 二进制表示:11111111
    • 每个比特位都是 1,因此对应的像素颜色是白色。
    • 从像素 9 到 16 的存储数据都是 1,所以对应颜色都是白色。

      示例代码解释

      如果你想用代码来解释字节和比特之间的关系,可以如下示例:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      # 示例字节
      byte_00 = 0x00 # 所有比特位都是 0
      byte_ff = 0xff # 所有比特位都是 1

      # 打印二进制表示
      print(f"0x00 的二进制表示: {bin(byte_00)[2:].zfill(8)}")
      print(f"0xff 的二进制表示: {bin(byte_ff)[2:].zfill(8)}")

      # 转换为像素颜色
      pixels_00 = ["■" if bit == '0' else "□" for bit in bin(byte_00)[2:].zfill(8)]
      pixels_ff = ["■" if bit == '0' else "□" for bit in bin(byte_ff)[2:].zfill(8)]

      print(f"0x00 对应的像素颜色: {''.join(pixels_00)}")
      print(f"0xff 对应的像素颜色: {''.join(pixels_ff)}")

      输出

      1
      2
      3
      4
      5
      复制代码
      0x00 的二进制表示: 00000000
      0xff 的二进制表示: 11111111
      0x00 对应的像素颜色: ■■■■■■■■
      0xff 对应的像素颜色: □□□□□□□□
      在这里,■ 表示黑色像素,□ 表示白色像素。这个代码示例展示了如何根据字节中的比特值确定像素颜色。
阅读全文 »


收集一些看到的好玩的可能以后会用到的软件/服务,软件类大多可以docker部署
不定期更新
24.8.6更新

A.网站推荐

开源大世界

开源大世界 专注于应用级的开源软件、开源资料的情报收集汇总整理。
https://kydsj.vip/doku.php?id=wiki:网站目录#计算机辅助设计+
https://kydsj.vip/doku.php?id=wiki:自托管-电子书和综合图书馆系统

很多开源软件项目分享,分类详细品种丰富

linuxserver.io

LinuxServer.io 文档之家!我们的目标是确保所有镜像都正确记录所有相关信息,以帮助我们的用户入门。除了每个镜像的单独设置指南外,还有与运行 Docker 容器有关的一般信息和最佳实践
https://docs.linuxserver.io/images/docker-calibre-web/

阅读全文 »

还是会有很多不常用的命令要来回查,仅记录,绝非完整命令参考

文件操作相关

复制目录

复制目录dir1和dir1目录下的文件到dir2目录里

1
cp -r dir1 dir2

安装lrzsz实现zmodem串口文件传输

1
2
rz 下载Zmodem
xz 上传Zmodem

windterm下支持直接拖拽文件,但是也要安装lrzsz以支持命令
https://www.cnblogs.com/lidabo/p/4780866.html

挂载U盘

1
fdisk -l


可以看到一块14.84GB的SD卡,位置在/dev/sda1
使用

1
mount -t vfat /dev/sda1 /mnt

来挂载U盘

cd/mnt即可看到U盘里的文件了,另外可以在/mnt里新建文件夹mkdir xxxxx,再挂载到文件夹里

卸载:

1
umount /mnt

docker

run:

1
docker run -it -d --name hexo_debian -p 22:22 -p 4000:4000 -v XXX:/hexo/ hexo_debian:V02

save:
把本地镜像打包成tar方便带走

1
docker save -o jre8u342_ch.tar jre8u342_ch:latest
阅读全文 »

简介

想要做一个便携的小设备,能够实现以下功能

  • 记录当前地点的气压,温度,湿度等地理信息
  • 记录GPS坐标信息
  • 考虑加上摄像头记录当前周围视觉环境,同时可以将上述信息水印(字幕)在照片上
  • 存储所有记录的数据以便之后进行可视化数据生成,可以用类似XML,Json,或者找有没有嵌入式轻量数据库实现

它最好有以下这样的特点:

  • 手机一般大小可以塞进口袋
  • 一定程度的防摔防水外壳
  • 续航可以接受2-3天一充电

所以我的打算用现有的能买到的小板子和单片机来做,预算不是大问题,大概1500-2000,(包含试错和学习成本)考虑过几种方向:

  • ESP32
  • 树莓派PICO
  • 幸狐的板子和摄像头
  • 树莓派Zero
    最后发现现在目前树莓派zero2w的价格只有一百出头了,可能比某些arduino的原版板子还便宜,值得一试,幸狐看起来也不错的样子,回头再研究

下面这是树莓派zero2w跑通串口通信时的样子

阅读全文 »

这么个小小的软件花费了不成正比的时间去弄他,十分令人头疼,简单记录几点重要的设置

1
vim /etc/vsftpd.conf

vsftpd 配置文件:
https://gnu-linux.readthedocs.io/zh/latest/Chapter02/90_vsftpd.html

修改ftp的端口

ftp的监听和实际数据传输是两个端口,如果要改最好都改

1
2
3
connect_from_port_20=NO
ftp_data_port=12520
listen_port=12521

pasv模式时的端口范围设置,假如用docker运行这些端口都要转出来

1
2
3
pasv_promiscuous=YES
pasv_min_port=31100
pasv_max_port=31110

我至今没太搞明白ftp的主动与被动模式的区别,以及能不能只用其中一种模式来工作..

另外还有系统的services里

1
2
3
4
5
6
vim /etc/services

#ftp-data 20/tcp
#ftp-data 20/udp
ftp-data 12520/tcp
ftp-data 12520/udp

这个不确定是否必要但还是改了吧

中文乱码

一篇不错的配置说明
https://blog.starryvoid.com/archives/1044.html
主要提到了utf8的编码问题

utf8_filesystem=YES

如果这样还没解决,考虑是要修改容器本身的LANG
可以直接进入容器然后类似:
export LANG=C.UTF-8
或者
export LANG=en_US.UTF-8
输入locale查看结果
当然这样关了这个sh就没了,所以可以直接加到docker启动时的环境变量里
https://zihengcat.github.io/2018/09/10/change-locale-system-encoding-in-docker-container/
然后你猜怎么着,做完这些设置以后中文依然显示为乱码,但是在FileZilla里看却没问题

现在高度怀疑是VScode的这个SFTP同步插件的锅