0%

简介

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

  • 记录当前地点的气压,温度,湿度等地理信息
  • 记录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同步插件的锅

创建阿里云PAI DSW实例跑kohya

镜像我这里选:

dsw-registry-vpc.cn-shanghai.cr.aliyuncs.com/pai/modelscope:1.10.0-pytorch2.1.0tensorflow2.14.0-gpu-py310-cu118-ubuntu22.04
我这里用默认的镜像,实测截至2024.01.10时,直接拉kohya的github可以直接用,不需要改动cuda之类的操作

安装kohya_ss

kohya_ss仓库地址:
https://github.com/bmaltais/kohya_ss
kohya_ss是个webui训练器,SD web_ui里也有对应的Dreambooth训练插件移植,如果只拿来训练不需要跑完整的sd webui服务,只需要kohya就可以了,kohay也可以练lora
在workspace根目录直接:

1
git clone https://github.com/bmaltais/kohya_ss.git

阅读全文 »

阿里云的AI白票试用还是很香的,b站顺便一搜有很多教程,跑个lora训练或者SD webui之类的
但难免会遇到要拉更新之类的情况,github和huggingface.co速度慢或者连不上去也经常遇到,除了使用镜像站以外,还有可以使用代理来加速

先通SOCKS5!

安装ss

先贴上需要用到的软件github:
https://github.com/shadowsocks/shadowsocks-libev

以及大概解释了什么是ss2,ss-go,ss-libev
https://shadowsocks5.github.io/en/spec/Implementations.html

在云端实例命令行下,需要个尽可能简洁小巧又好用的工具,ss-libev可能会是我们的首选,ss-libev是一个轻量级安全 SOCKS5 代理,适用于嵌入式设备和低端设备,用纯 C 编写,体积小巧比较高效
我的云计算镜像是基于ubuntu22.04的
要安装它,直接

1
2
sudo apt update
sudo apt install shadowsocks-libev

配置ss

然后编辑设置:

1
2
# Edit the configuration file
sudo vim /etc/shadowsocks-libev/config.json
阅读全文 »


事先:我是用路由拨号所以家里已经有外网直连IP,且配置了DDNS和端口转发,所以一个域名即可连上NAS
另外我的群晖是DS720+,是块X86intel的CPU,所以和PC一样用X86的容器镜像就可以,如果是ARM机NAS应该是不通用的

所用镜像:https://hub.docker.com/r/garethflowers/svn-server
备选镜像(看起来也很不错,拉取次数也过1M:https://hub.docker.com/r/elleflorio/svn-server

SVN网站:https://subversion.apache.org/

参考:
https://blog.51cto.com/u_12701820/6544028

准备镜像


由于在群晖的ContainerManager里直接添加镜像不能,应该是要配个docker的镜像站加速或者整个NAS在梯子环境里,懒得整了,我这次选择PC上保存镜像包再拖来NAS里用的形式,个人感觉更方便些

先在PC上拉个镜像,直接

1
docker pull garethflowers/svn-server:latest

然后把镜像打包成文件

1
docker save -o svn-server.tar garethflowers/svn-server:latest
阅读全文 »

计费文档:
https://help.aliyun.com/document_detail/447697.html

定价标准:

vCPU单价(vCPU):0.000049 元/秒
内存单价(GiB): 0.00000613 元/秒

所以可知:

规格 分钟 小时
每1u 0.00004900 0.00294 0.1764 4.2336 127.008 1545.264
每1G内存 0.00000613 0.0003678 0.022068 0.529632 15.88896 193.31568

eci价格计算:

实例规格 分钟 小时
0.25u 0.5G 0.00001532 0.0009189 0.055134 1.323216 39.69648 482.97384
0.5u 1G 0.00003063 0.0018378 0.110268 2.646432 79.39296 965.94768
2u 4G 0.00012252 0.0073512 0.441072 10.585728 317.57184 3863.79072
2u 8G 0.00014704 0.0088224 0.529344 12.704256 381.12768 4637.05344
4u 8G 0.00024504 0.0147024 0.882144 21.171456 635.14368 7727.58144
64u 256G 0.00470528 0.2823168 16.939008 406.536192 12196.08576 148385.7101

一秒0.0047元很便宜吗?一月要1.2w!可以说被安排得明明白白了

一口气步子迈得有大,慢慢记录一下,如果你碰巧看到这个文章,希望这个文章的某些部分对你有帮助,来源我已尽量在文章中标出,还有很多部分是自己敲的

了解ECI弹性容器:https://www.aliyun.com/product/eci
了解阿里云NAS文件存储:https://www.aliyun.com/product/nas

为什么要用eci来运行hexo?
因为好玩,同时来学习从pull到发布到运行整个docker镜像的流程,也想给自己的hexo博客找个新家,酷酷的那种
本博客之前是由树莓派上的hexo生成,部署到github上的
最近在捣鼓docker,一时想不起来有什么灵活小巧的服务拿来用docker玩,那么想着干脆把树莓派上hexo这部分服务做成镜像,需要用的时候拿出来用用想必是极好的(这么一来好像树莓派又要吃灰了)
恰巧最近又在琢磨阿里云ECI容器服务,所以理论上是可以用我自己打包好的镜像的
最后成品的结构大致如下图:

这里挂了3个镜像:
1.node.js+git+ssh+hexo
主要是此镜像——由node.js+hexo组成的运行hexo环境,用过的都了解hexo是基于node.js的,每次我们生成文章的时候都会hexo g -d,而运行这套需要一个环境容器
git和ssh主要是部署在github上用的,同时我习惯用VSCode的SSH FS来管理远程文件和写博客,主要是ssh连接,也方便我拿PuTTY和WinSCP远程登录管理
2.vsftpd
一个常用的ftp服务,我是在本地些完再上传的,用这个是因为我发现如果要给文章插入图片,我还需要手动用ssh上传到hexo对应目录里。而用VSCode的SSH FS可以帮我自动同步本地工作目录和云上即将生成静态网页的hexo目录,非常方便!
3.ddns
因为容器是即用即开,用完就释放的,每次开会新分配一个弹性IP做为外网接口,但是不想每次都去复制这个新的ip地址,那么就要用到动态域名解析,刚好我在阿里云上购买过一个我自己的域名,所以ddns这部分服务就拉出来做个镜像

还挂了一个NAS盘:

挂载以后:

可见我的hexo,主题,文章,图片等等都存放在里面,服务容器可以随便释放拉取,数据不会受到影响,几百M的NAS容量价格抹零后可以忽略不计

文章后面(第三部分)会说如何按我的需求构建定制这几个镜像,并上传到阿里云容器镜像ARK仓库以方便调用

阅读全文 »

边栏显示文章列表效果

我还奇怪next没用提供这样的功能,文章一多一篇篇翻实在是累,还好找到了有人实现最近文章的功能,那么做文章列表也就同理了

我修改过的代码
首先是:

/hexo-theme-next/layout/_macro/sidebar.njk
在最后一个{% endif %}后面加入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{% if theme.recent_posts.enable %}
<div class="links-of-blogroll" style="margin-top:20px; border-style:dotted none none none; padding-top:5px; text-align:left;padding-left: 20px; padding-right: 10px; padding-bottom: 5px;">
<div class="links-of-blogroll-title" style="padding-bottom: 5px; padding-top: 5px; padding-left: 0px; padding-right: 20px; font-size: 1.6em; argin-right: 5px;">
<!-- 选择合适的icon -->
{%- if theme.recent_posts.icon %}<i class="{{ theme.recent_posts.icon }}" aria-hidden="true"></i>{%- endif %}
<b style="font-size: 0.65em; padding-left: 8px; position: relative; top: -2px;">{{ theme.recent_posts.description }}</b>
</div>
<ul class="links-of-blogroll-list">
<!-- 文章排序规格,-updated 按照文章更新时间倒排 -->
{% set posts = site.posts.sort('-updated').toArray() %}
<!-- 显示20数目的文章 -->
{% for post in posts.slice('0','20') %}
<li class="postsSidebarNumb" style="text-indent: -1em;">
<a href="{{ url_for(post.path) }}" title="{{ post.title }}" target="_blank">{{ post.title }}</a>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
阅读全文 »

需求

注意Mesh和Texture前加了编号

工作需要整理目录文件,要将多组资产目录(Assets01,Assets02,Assets03…内的Resource目录下的Texture和Mesh目录加编号)

感觉这是一个可以用批处理脚本做到的事情,所以稍微研究了一下

改名实现

如果单只是改名其实很简单,只需要几行即可实现:

1
2
3
4
@echo off
for /f "delims=" %%a in ('dir /ad/s/b "Mesh"') do ren "%%~a" 01-Mesh
for /f "delims=" %%b in ('dir /ad/s/b "Texture"') do ren "%%~b" 00-Texture
pause
阅读全文 »