MoreRSS

site iconJasonkayZK | 张小凯修改

本科就读于HPU电气工程,玩过ACM、嵌入式、投稿过B站鬼畜、参加过歌唱比赛、考过托福、自学日语、Java
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

JasonkayZK | 张小凯的 RSS 预览

通过GithubActions拉取并推送Docker镜像到国内云

2025-01-30 11:13:54

自从DockerHub在国内被墙之后,Docker镜像在国内的拉取一直是一个问题。目前有许多解决方案,比如:使用公开的镜像站、或者通过Cloudflare自建镜像站等等。但是都存在访问不稳定、配置麻烦等问题。

实际上,Github提供的Actions服务器就是在海外,可以通过Actions拉取Docker镜像,并推送到国内的云厂商,实现稳定的访问!

tech-shrimp/docker_image_pusher 库就实现了这个功能!


通过GithubActions拉取并推送Docker镜像到国内云

使用方法

首先 fork 项目:

到本地,然后基本上根据 README 文档来即可;

需要在 fork 后的仓库的配置中配置 Secrets:

  • ALIYUN_NAME_SPACE:你创建的阿里云的命名空间
  • ALIYUN_REGISTRY:阿里云的地址
  • ALIYUN_REGISTRY_USER:阿里云的用户名
  • ALIYUN_REGISTRY_PASSWORD:阿里云的密码

配置完成后直接修改 images.txt 文件即可直接拉取镜像并推送到阿里云的容器仓库!


附录

源码仓库:


使用AnythingLLM+SillconFlow+Milvus快速搭建个人云端知识库

2025-01-29 13:49:26

最近DeepSeek如火如荼,由于目前我也有自己搭建个人知识库的需求,因此结合最新的一些技术搭建了一下。主要是包括:

  • AnythingLLM平台
  • SillconFlow提供免费的大模型API支持
  • 私有部署的Milvus向量数据库供多个人使用

源代码:


使用AnythingLLM+SillconFlow+Milvus快速搭建个人云端知识库

环境搭建部分完全使用 Docker:

首先部署 Milvus、然后部署 AnythingLLM 平台,最后注册 SillconFlow 并对平台进行配置。


部署Milvus

部署

向量数据库 milvus 的部署比较简单,直接通过 docker-compose 部署即可:

version: '3.5'services:  etcd:    container_name: milvus-etcd    image: quay.io/coreos/etcd:v3.5.16    restart: unless-stopped    environment:      - ETCD_AUTO_COMPACTION_MODE=revision      - ETCD_AUTO_COMPACTION_RETENTION=1000      - ETCD_QUOTA_BACKEND_BYTES=4294967296      - ETCD_SNAPSHOT_COUNT=50000    volumes:      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd    command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd    healthcheck:      test: ["CMD", "etcdctl", "endpoint", "health"]      interval: 30s      timeout: 20s      retries: 3  minio:    container_name: milvus-minio    image: registry.cn-hangzhou.aliyuncs.com/jasonkay/minio:RELEASE.2023-03-20T20-16-18Z    restart: unless-stopped    environment:      MINIO_ACCESS_KEY: minioadmin      MINIO_SECRET_KEY: minioadmin    ports:      - "9001:9001"      - "9000:9000"    volumes:      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data    command: minio server /minio_data --console-address ":9001"    healthcheck:      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]      interval: 30s      timeout: 20s      retries: 3  standalone:    container_name: milvus-standalone    image: registry.cn-hangzhou.aliyuncs.com/jasonkay/milvus:v2.5.4    restart: unless-stopped    command: ["milvus", "run", "standalone"]    security_opt:    - seccomp:unconfined    environment:      ETCD_ENDPOINTS: etcd:2379      MINIO_ADDRESS: minio:9000    volumes:      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus    healthcheck:      test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]      interval: 30s      start_period: 90s      timeout: 20s      retries: 3    ports:      - "19530:19530"      - "9091:9091"    depends_on:      - "etcd"      - "minio"networks:  default:    name: milvus

镜像使用的是我在阿里云上的,国内也可以直接使用;

使用:

docker-compose up -d

部署即可;


配置密码

部署成功后,Milvus 的默认账号、密码为:

rootMilvus

可以通过在部署的时候提供配置文件来配置账号密码,也可以部署后通过 Python 脚本部署;

例如:

from pymilvus import MilvusClientclient = MilvusClient(    uri='http://localhost:19530', # replace with your own Milvus server address    token="root:Milvus")client.update_password('root', 'Milvus', '<your-new-password>', using='default')print(client.list_users())

参考:


备注

在启动 standalone 类型的服务后, Web 界面会有 etcd unhealthy 的报错。

这个是正常现象,忽略即可;

参考:


注册SiliconFlow

SiliconFlow 提供了各种大模型的 API,甚至有许多免费的版本;

可以通过下面的链接注册:

链接包含我的邀请码,注册后可额外获得 2000w 的 token 额度。

注册成功后,可以在 API密钥 生成密钥;

保存,后面会用到!


部署AnythingLLM

部署

可以通过 Docker 直接部署 AnythingLLM:

export STORAGE_LOCATION=$HOME/workspace/anythingllm && \mkdir -p $STORAGE_LOCATION && \touch "$STORAGE_LOCATION/.env" && \chmod -R 0777 $STORAGE_LOCATION && \docker run -d -p 3001:3001 \--restart=unless-stopped \--name my-anything-llm \--cap-add SYS_ADMIN \-v ${STORAGE_LOCATION}:/app/server/storage \-v ${STORAGE_LOCATION}/.env:/app/server/.env \-e STORAGE_DIR="/app/server/storage" \registry.cn-hangzhou.aliyuncs.com/jasonkay/anythingllm:latest

这里需要注意:

Docker挂载目录需要给权限 0777,否则可能会报错无权限(尤其是root用户操作):

https://github.com/Mintplex-Labs/anything-llm/issues/2564


配置

在配置 LLM 提供商 时,需要选择:Generic OpenAI 才能使用我们在 SiliconFlow 中的模型,随后配置:


在配置向量数据库时,可以直接使用 AnythingLLM 中内嵌的 LanceDB,此时无需配置;

当然,也可以使用我们上面已经部署好的 Milvus 数据库;

此时,只需要配置:

  • Milvus DB Address:http://172.17.0.1 (可以使用 Docker 的gateway,也可以用其他的)
  • Username、Password:使用你配置的或者默认的即可!

加载模型

上面配置完成后,即可正常使用对话功能;

但是,如果想要通过上传文档、图片等形成个人知识库,则还需要对数据进行向量化等操作,此时需要加载模型;

在没有挂梯子的情况下,在上传文档时会报错:fetch-failed-on-upload

此时大概率是一位模型无法下载;

可以通过手动下载并加载的方式来解决:

参考:

首先,在 <your-anythingllm-path>/models/ 目录下创建 Xenova 目录;

随后下载模型压缩包,并上传到这个目录下:

最后解压缩即可:

unzip all-MiniLM-L6-v2.zip

解压缩完成后效果:

root@VM-12-16-debian:~/workspace/anythingllm/models/Xenova# tree ..└── all-MiniLM-L6-v2    ├── config.json    ├── onnx    │   └── model_quantized.onnx    ├── tokenizer_config.json    └── tokenizer.json2 directories, 4 files

功能测试

全部部署完成后,可以创建新的工作区,并且在工作区中创建 thread 进行新的对话;

同时在工作区中也可以上传文档,在对话时,AnythingLLM 会首先根据你的问题,在向量数据库中匹配,随后发给大模型作为 prompt 来生成对应回答!


结语

除了使用 Docker 来部署 AnythingLLM 之外,也提供了桌面的版本;

Desktop 版本和 Web 版的配置非常类似,这里不再赘述!


附录

源代码:


【顶】さよなら2024、こんにちは2025!

2025-01-17 13:45:11

又是新的一年了,最近放寒假,终于能抽出时间来总结一下2024年、再展望一下2025年!


【顶】さよなら2024、こんにちは2025!

さよなら2024!

前言

2024年对我个人来说,是转变极大的一年。

在这一年,我彻底放弃了程序员的职业,转而回家考取体制内,最终在八月份成为了一名家乡大专的计算机专业的老师。

除了职业上的转变,实际上也包含了心态上的转变。

在2024年的上半年,实际上花了很长时间继续去做一些技术上的突破,比如:

  • 学习了一些数据存储的格式,例如:bamboo;
  • 学习了分布式系统相关的时钟逻辑,也用 rust 实现了一个:merkle-trie-clock;
  • 学习了 CRDTs 相关的内容,用 rust 写了一个简单的 CRDTs 的demo;
  • 看了数据库内核的相关实现,打算尝试去写一个基于 CRDTs 理论的分布式数据库;
  • ……

但是,后面发现对于技术的热情实际上是有所下降的。

与其说是对于技术的热情有所下降,不如说是更多是想分享知识,而非单纯的研究技术;


当然,除了研究技术之外,上半年也准备了一下考试。

别忘了,我是学电气工程出身的!

为了准备相关的考试,又重新复习了一下电气工程的相关书,包括:

  • 电网招聘考试书
  • 注册电气工程师
  • 原来本科的书
  • 行测等
  • ……

电气复习.jpg

最后也是通过笔试第二、面试第一成功选择了学校的岗位。

有些人可能会奇怪,电气工程专业为啥当上了计算机的老师;

实际上我在去学校报道的时候,正好碰到了计算机学院的院长,然后就被拉到了计算机学院😁,巧了!


学校生活

八月份入职之前,其实提前准备了一些教师相关的东西,比如:

  • 如何备课
  • 如何上好一门课
  • 上课期间站姿、手势、仪态等等

但实际上刚入职的老师会被要求担任辅导员;


辅导员

作为初入学校的「しろうと」来说,辅导员的挑战实际上是有的。

对于2024年新入学的学生来说,大致是在06年出生,和我相差大概10岁左右。

但是实际上,辅导员算是一个半管理岗位,为啥说是“半”呢?

因为,每天一睁眼,几十号人的吃喝拉撒基本上都要你管!

但是实际上会有些紧张,这个紧张一方面是:和一群「歳下」 的孩子们接触:

  • 如何和这些同学接触?
  • 如何融入学生?
  • 进一步,如何管理这些学生?(达成共识?解决冲突?)

实际上,这些工作和程序员的工作思路是完全不同的事情!

另一方面是:如何正确的引导这些学生?

  • 思想上
  • 三观上

我自以为,老师和其他相关的职业有一个很大的不同在于:

一个好的老师真的可以拯救学生,而一个不负责任的老师真的也能毁掉无数个学生

我自认为自己还算是一个做事负责任的人吧!

实际上你的言行真的会影响到很多学生、尤其是刚刚成年的学生未来的三观。

但是对于如何做,实际上当时我是毫无头绪的!

但是当时我给自己定下了一个最低的底线:

  • 一定不要成为自己最讨厌的那种老师!

现在看来,这个底线实际上也并不低!


首次接触学生

我第一次接触学生实际上是在新生报道之前。

因为我之前是程序员的缘故,接触过不少云计算相关的内容,所以我的导师王老师让我来带一带竞赛的学生;

实际上这个决定让我首先小范围的接触了几位同学;

对我后面工作的开展获益匪浅;

所以,在还没开学之前就了解了目前这个年龄段的学生脑子里想的是什么,学生的层次、一些学校的规则制度、运行模式等等。

同时也能够小范围的先锻炼锻炼自己的表达能力…

关于竞赛的事情,后文再继续聊~


迎新活动

当新生辅导员的第一件事实际上是为全班的新生建群。

好在我带的班学生都比较积极,基本上一天之内就建好了!

到了24级正式开学的时候,实际上今年一共招了将近900号学生,要对这些学生进行信息采集、确认;

当时在学院楼外面坐了整整两天,说话说的嗓子都要哑了,最后也是顺利的把这些熊孩子给安置好了。


第一次带军训

迎新结束之后,马不停蹄的就是学生的军训;

比起我当年的军训,个人觉得00后的军训强度要低太多了;

可能是身体素质整体都下滑,军训还没开始,刚刚站了十几分钟就已经有晕倒的了。

我带的班,军训的两个星期也是请假无数……;

总而言之,身体素质在00后这一代真的堪忧……。


第一次班会

在军训期间,要开一个班会,和班里的同学都见见面。

这也是我第一次以辅导员的身份站在讲台上;

其实刚开始还是有些紧张的,毕竟下面坐着几十个完全不认识的熊孩子;

需要做的实际上是提前准备班会的内容,可以先记在笔记本上,然后带过去讲就行;

后面发现,站上去之后讲的挺自然的,就不紧张了…

当然,现在在上面时间长了,早就没什么感觉了…


第一次出差

在九月底还没到十月份的时候,接到了通知要带几个学生去开封参加比赛,这也是我第一次带学生外出比赛;

比较好的是,来回的路途是由市政府安排的专车接送,所以不需要提前订票了;

但是当时的酒店我们希望能拼房,所以出来不小的问题,就是和我们拼房的人提前3天走了,导致我们无房可拼;

不过后面也是找到了开封市的人社局给解决了;

本次比赛的成绩可以说是非常惨淡:参与了3个赛项,无一获奖!

实际上一个比较关键的原因是:竞赛的学生基本上都是靠自己自学,而没有老师带!

这些学生会浪费大量的时间在寻找学习材料和学习路径上,这是很可怕的事情!

这也让我感受到了,学校的竞赛之路,任重而道远啊!


一些其他的碎碎念

除了上面的事情之外,实际上还有很多其他的事情,下面就简单列出一部分:

  • 学生宿舍值班
  • 学生日常请假管理
  • 学生心理问题排查
  • 班级活动组织
  • ……

最后想再说一下:

我最开始以为,来到大专的学生大多数是对学习毫无兴趣的学生;

但是后面接触之后我发现,实际上这里大多数学生都来自农村、乡镇(至少我班里只有4、5个是城市户口);

他们先天就没有特别好的教育环境。

以我带的竞赛的一个学生为例:这个学生白天的时候要去干农活、晚上在家做完饭之后,才能抽出时间来学习云计算;

我当时听完之后感觉到挺不可思议的。

当时我还戏称自己是“上山下乡”……


教学

竞赛培训

作为一个老师而言,其实最基本的一个工作就是讲课;

分享的经验实际上在之前当程序员的时候是有的,当时有大量的技术分享会,而且我也参与过一次线上的直播分享;

但是实际上对于这些学生的水平,我是拿不准的,不知道这些学生对于知识的掌握程度,这个是很致命的!

好在有个学生掌握的还可以,但是没有老师带,实际上还是挺吃力的,一直在自己部署 OpenStack,对于 Docker、K8S 都不知道是什么;

我也是从 Github、git、一路讲到 Docker!

实际上,如果真正感兴趣、用心学的学生,他的学习能力是惊人的!

最后也是拿了省二等和国家三等奖的成绩。

实际上这个成绩只是个开始,后面还要继续努力!


第一次试讲

关于这个试讲,这里说一下。

新入职的老师是不会直接参与讲课的,只有通过了:教研室、系部、学校,三个阶段的试讲才能上课。

试讲的内容是自己选择一门最拿手的课程,然后进行无生试讲,大概 15 分钟左右。

我的试讲内容实际上是云计算,讲的 Docker。

由于没有什么经验,同时备课准备的实际上不是很充分,所以课讲的稀烂……

甚至讲课的状态是我最讨厌的念 PPT 的方式……!

当时主任给我提了很多很实用的整改意见,我这里大概总结了几条:

  • PPT 的内容应该少文章多图片,这样比较生动;
  • 讲课的时候应该多举一些生活中的例子,而不只是念ppt的内容;
  • 在讲的过程中,声音应当抑扬顿挫,有节奏,类似于唱歌;
  • ……

这里非常感谢主任给我提的这些意见,让我在后面找到了讲课的方向,慢慢摸索出了如何讲课!

实际上还有另外一个问题,就是:当时我刚来的时候就是给参与竞赛的学生讲,但是这些学生实际上水平、学习热情是远远高于一般的学生的!

实际上这也导致了,后面在真正上课的时候,一开始上课的内容实际上学生并不能很好的掌握(甚至部分学生别崩溃)!

后面,由于第一次试讲讲的并不是很好,所以后面又陆陆续续讲了几次试讲,进步其实是很明显的!


新生分享、社团分享

在第二次试讲之前,为了锻炼一下自己的讲课能力,参与了一些其他课程的讲授。

主要是几次的新生分享:

第一次是给24级新来的计算机专业的新生讲解目前一些新的主流技术,比如:云计算、大数据、人工智能相关的内容;

第二次是给学校的本科学生讲解:大学时间规划、考研等相关的内容;

相比于第一次分享,第二次是受到学校的另一个学院的院长邀请,形式上也比较正式,是在学校图书馆一楼的报告厅,大概有几百号学生参与;

实际上准备的并不是很充分,但是不知道是不是因为讲的都是自己的经历,反而没什么可紧张的,讲的过程也很顺利。

实际上,在台上看到下面坐着的许多学生心里还是几多感慨:

大概十年前,我和他们是一样的迷茫,不知道自己何去何从,不知道自己要干什么……

所以当时,上台之前,我想做的实际上就是分享自己的经历,包括好的和坏的。让这些学生有所借鉴,能走出属于这些孩子自己的一条路!


同时,由于我是学校计算机社团的指导老师,在后面也给社团讲了一次课(大概2个小时的时间)。

主要是分享(或者说科普)一些计算机相关的内容。

来参与的学生实际上并不只是计算机专业的学生,但是除了基础的 Python 之外,我还是讲了一些其他的内容。

比如:

  • 人工智能的基本使用方法;
  • Github 网站
  • 一些写代码的工具
  • ……

基本上每次分享,我都要讲上面的一些内容;

尤其是 Github,我觉得如果从事计算机专业,这个网站是必须要知道的!

但是国内很多高校的学生,甚至到毕业都不知道这个网站!

个人觉得,学会并使用 Github 是从事计算机行业最基本的一项内容!


第二次试讲

第二次试讲来的比较匆忙,从通知到试讲实际上就间隔了两三天时间。

并且由于和之前第一次试讲间隔了太长的时间,实际上之前试讲的内容都忘的差不多了。

好在 “瘦死的骆驼比马大”!

所以最后还是顺利的拿下了。

当然,当时院长也提出了不少的意见,比如:

  • 讲课过程中,动作太多,一直来回走
  • PPT 的标题不统一
  • ……

紧急代课!

十一月底的时候,由于有一位老师提前走了,他这学期有两门课需要我临时带,所以强度突然上来!

当时是周五的晚上通知我,下周一就要上课了!

由于是第一次正式上课,很多规矩都还不清楚,而且当时是临时代课,还不知道之前的内容。

所以花了一些时间将要做的按照先后顺序事情归了一下类:

  • 添加原来的老师、班委,询问课程进度
  • 拿之前老师的教学资料
  • 提前备课
  • 询问上课的流程(包括如何签到、课前的点名、下课的内容等等)
  • ……

比较巧的是,我带的其中有一门课,在还没开学的时候,提前备过课,所以可以直接拿过来讲。

所以第一节课实际上马马虎虎,没有讲什么具体的操作内容,主要是对大数据的技术做了一个科普。


但是后面的课程实际上是出了一些小状况的:

1、由于这些学生之前的基础没有打好,所以导致我在讲课的时候,班里一大半的学生根本不知道如何实操!

实际上,使用到的都是一些非常讲的的 Shell 命令!

对于我之前带的竞赛的学生来说是非常简单的,但是对于来上课的普通学生来说,感觉比登天还难!

所以后面又先带着“复习”了一下 Linux 的内容。


2、另外一个状况是:在机房里面,实际上是没有部署相应的软件的,所以学生没办法跟着一起练习!

所以,我专门抽了一个下午的时间,做了一个 VMWare 的镜像给到学生,让学生们可以直接通过这个镜像练习!

最开始我做的是一个无图形界面的系统,但是发现这些学生不会用……

所以没办法,又做了一个 Desktop 版本的……

不管怎么样,最后也是把课、期末考试、教学材料跌跌撞撞的走完了!

虽然比较生涩,但是确实把:

  • 如何上课
  • 如何设计课程
  • 如何设计期末考试
  • 如何整理教学材料
  • ……

在高强度之下快速的摸清楚了!


第三次试讲

第三次试讲是由学校来组织的,来参与的都是新老师,但是还是收获满满。

我由于之前的很多经历,准备的比较充分,所以没什么可紧张的。

但是,在听其他老师试讲的过程中,实际上发现自己和他们还是有非常大的差距的!

尤其是有几个音乐专业的老师,讲的生动形象,我和他们比起来可以说是相形见绌……

并且,我在试讲的时候,写板书写了一分多钟,被评委给吐槽了……


一些工作上的总结

一些心得和分享

上面是半个学期的一些工作内容。实际上,除了上面列出的一些工作之外,还有很多其他的工作没有列出来。

可以说,虽然是一个新的老师,但是工作还是非常充实的!

下面列一些我觉得这学期工作的时候,比较实用的一些技巧和心得。


待办清单(小米云服务)

这个是我目前为止,基本上离不开的一个东西!

因为辅导员的事情实际上是非常多的,基本上每次开会都要安排十几件事情!

如果没有个待办清单,很多事情都会忘掉!

我之前尝试过一些其他的 TODO 应用,但是感觉还没有小米自带的好用。

小米的待办清单在 Windows 上有 MIUI+ 可以同步,但是我用的是 Mac,没有这个软件。

但是有一个 小米云服务,所以可以曲线救国,用这个!

这里面唯一一个我用的功能就是待办清单!

顺便吐槽一下,MIUI+ 说了好多年适配 Mac 了,到现在还没有做出来……


和学生打交道

有的人可能会对辅导员这个职业比较抗拒,但是实际上我倒是觉得这是为数不多比较暖心的工作了…

可能是因为我和这些孩子们的年龄差距不大,所以并没有那么多代沟,所以沟通起来还是比较轻松的。

而且也都经历过学生时代,对于这些学生心里是怎么想的、比较反感的东西实际上是一清二楚的。

当时给自己定的目标就是:

  • 从群众中来,到群众中去!
  • 学生们的事情尽量身体力行的去做!
  • 不要成为自己讨厌的那一类辅导员!

基本上每周六晚上我值班的时候,都会和班里的学生打打篮球。

然后时不时的在班级群里吹吹牛啥的,也挺欢乐。

但是确实,有的事情确实是没有办法,dddd……


讲课

对于讲课来说,是一个老师的基本功。

一个感受比较深的点就是:

一定要备课!

一定要备课!

一定要备课!

不备课的课和备过课的课上起来是完全不一样的!

备课的时候,主要是记一下这节课的主要大纲,有哪些重点难点什么的。

然后就是提前准备一些和课程有关的例子,如果不熟悉可以提前先打印出来,然后用笔标注一下。

认真备课之后,讲出来的东西可能才是你想要表达的;

如果不备课,虽然很多东西都是你用到的很基础的内容,当时实际上有的时候也很难讲出来!

我刚来学校的时候,主任和我分享的一句话就是:

备课实际上是备学生,你要了解你上课的班的学生的整体状态!


需要继续加强的地方

首先就是做事方面:

很多事情不懂得推脱,基本上只要有能帮忙的地方,都会去揽活来做,把自己搞得比较累。

有些时候如果自己比较忙,实际上是可以拒绝的!


另外就是讲课方面:

基本上现在很多课程都还需要很长的时间备课,同时讲课的能力方面实际上还有很大的进步空间。


心态方面:

很多事情在做的时候,还是会比较急,心态容易出问题。

这可能在未来的工作中还需要进一步沉淀沉淀!


こんにちは2025!

聊完了已经过去的 2024 年,下面是我对于 2025 年的一些规划:

  • 证书:

    • 高校教师资格证 + 普通话证

    • 通过软考中级(软件设计师)

    • 日语N2证书

    • 雅思证书(待定)

  • 跑步:

    • 年跑量 1000km
    • 参加一次半马
  • 旅游:

    • 去一次日本旅游
  • 购物:

    • 40系 N 卡
    • 佳明 255 跑表

内容可能不是很多,但是是一些目前我能够想到的东西;

如果后面有新加入的内容,也会再加进来!

最后,祝愿各位在新的一年都能顺顺利利,无限进步!

今年も、よろしくお願いします!


Excel通过身份证号列计算性别

2024-09-11 10:28:56

Excel统计信息中有身份证号,可以通过身份证号直接生成性别列;


Excel通过身份证号列计算性别

例如,B2 列为身份证号所在列,则可以在性别列(如D2列)填写:

=IF(MOD(MID(B2, 17, 1), 2) = 1, "男", "女")

输入后回车计算结果即为性别;

可以下拉直接生成全部结果!


参考:


开源的个人书籍管理系统Talebook

2024-08-22 10:19:57

我平时看的都是PDF电子书籍,但是之前没有用书籍管理,所以书籍比较乱;

比较有名的书籍管理系统有Calibre,但是Talebook支持OPDS,同时能从豆瓣导入信息,比较好用;

本文介绍了如何部署和配置Talebook;

源代码:


开源的个人书籍管理系统Talebook

部署

项目地址如下:

DockerHub地址:

B站上也有UP主对Talebook做了介绍:

部署起来也是非常简单,先把镜像拉下来,然后 docker-compose 就行:

docker-compose.yml

version: "3"services:  talebook:    container_name: talebook    image: talebook/talebook:v3.8.1    volumes:      - /data/talebook:/data    ports:       - "80:80"       - "443:443"    environment:      - PUID=1000      - PGID=1000      - TZ=Asia/Shanghai      # 调整为『SSR=ON』可开启「服务器端渲染」模式,对于搜索引擎更友好,同时更消耗服务器性能      - SSR=OFF    depends_on:      - douban-rs-api    restart: always  douban-rs-api:    container_name: douban-rs-api    # https://github.com/cxfksword/douban-api-rs    image: ghcr.io/cxfksword/douban-api-rs:latest    restart: always

配置都比较简单,目录挂载、端口映射直接根据自己的需求修改即可!


配置

基本的配置,上面的B站UP基本上都讲了;

需要注意的是:

配置豆瓣的时候,url 结尾的 / 要删除!否则会无法使用!

参考:


其他

支持 OPDS 的 APP 推荐:

  • 安卓:静读天下
  • iOS、MacOS:Yomu、KyBook

参考:

需要注意的是:

如果要使用 OPDS,需要配置:

  • 关闭「私人图书馆」模式。
  • 打开「允许任意下载」(访客无需注册或登录)

参考:

Enjoy!


附录

源代码:

参考:


2024年安装Docker的方法

2024-08-22 10:00:43

阿里云的Docker源没了,本文写了在2024年如何安装Docker、配置DockerHub源;

PS:没想到2024年了,还在写Docker安装的教程…


2024年安装Docker的方法

安装Docker

目前(2024年8月22日),阿里云已不再提供 Docker 源的安装(404了);

腾讯云目前还是提供的,安装教程如下:

Ubuntu的安装如下:

sudo apt-get updatesudo apt-get install ca-certificates curlsudo install -m 0755 -d /etc/apt/keyrings# Debian系统将ubuntu改为debian!sudo curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.ascsudo chmod a+r /etc/apt/keyrings/docker.asc# Debian系统将ubuntu改为debian!echo   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/ \  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" |   sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt-get update

需要注意的是:如果是Debian系统,需要将上面的ubuntu改为debian即可!

安装:

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Docker镜像源

众所周知,由于不可抗因素,国内是无法在 DockerHub 上 pull 镜像的,Github 的 ghcr.io 也不行;

下面的网址提供了一些目前可用的镜像站:

以及使用 CF 搭建镜像站的教程:


附录

参考: