跳到主要内容

50 篇博文 含有标签「编程」

查看所有标签


相关

  • 想法起源 别人的博客, 看起来很酷,还能显示当前人数。
  • 在 docusaurus 或者 markdown 中博客展示 google analysis 数据
  • 目前好像没有相关项目 可以做个类似 display card 的东西
  • 使用默认的 google analytics 查看数据
  • lookerstudio 可以调用 google analytics 并展示,但是自带的模板库没有使用最新的 API。
    • 报告地址
    • embed
    • 右上角分享 - 复制代码后 需要删除部分代码
    • 暂时不能实现的功能
      • 不能显示当前再看的人数
<!-- 代码参考 -->
<iframe width="800" height="600" src="https://lookerstudio.google.com/embed/reporting/6054b482-a054-42f9-870d-3fe15faeb78f/page/IpdTE">

编程阅读需 1 分钟

docker-compose.yml 默认不装载插件

  • 使用自定义 Dockerfile
  • vim Dockerfile.ttrss
# 使用原始镜像
FROM wangqiru/ttrss:latest

# 安装 git
# RUN apt-get update && apt-get install -y git && \
# rm -rf /var/lib/apt/lists/*

# 配置 Git 允许不安全目录
RUN git config --global --add safe.directory '*'

# 克隆插件到指定目录
RUN git clone https://gitlab.tt-rss.org/tt-rss/plugins/ttrss-mailer-smtp.git /var/www/plugins.local/mailer_smtp

# 更改克隆目录的权限,确保容器内的用户拥有该目录
RUN chown -R nobody:nginx /var/www/plugins.local/mailer_smtp
  • 修改镜像
# 修改前
service.rss:
image: wangqiru/ttrss:latest

# 修改后
service.rss:
# image: wangqiru/ttrss:latest
build: # 新增
context: .
dockerfile: Dockerfile.ttrss # 使用自定义 Dockerfile
  • 这样就默认装插件了

启动插件

      - ENABLE_PLUGINS=auth_internal,mailer_smtp # plugin
- SMTP_FROM_NAME=TinyTinyRSS # email
- SMTP_FROM_ADDRESS=xxxxxxx_bot@163.com # email
- SMTP_SERVER=smtp.163.com:465 # email
- SMTP_LOGIN=xxxxxxx_bot@163.com # email
- SMTP_PASSWORD=XXXXXXXXXXXXXX # email
- SMTP_SECURE=ssl # email

报错

SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

  • 修改邮箱配置
    • 将端口从 25 改为 465 测试邮件发送成功

全 docker-compose.yml

  • vim docker-compose.yml
version: "3"

# https://ttrss.4yewu.cc/ guest guest 弄个普通账号给大家玩

services:
service.rss:
build:
context: .
dockerfile: Dockerfile.ttrss # 使用自定义 Dockerfile
container_name: ttrss
ports:
- 181:80
environment:
- HTTP_PROXY=http://localhost:9999 # 设置代理
- HTTPS_PROXY=http://localhost:9999 # 设置代理
- SELF_URL_PATH=http://localhost:181/ # please change to your own domain
- DB_PASS=ttrss # use the same password defined in `database.postgres`
- PUID=1000
- PGID=1000
- ENABLE_PLUGINS=auth_internal,mailer_smtp # plugin
- SMTP_FROM_NAME=TinyTinyRSS # email
- SMTP_FROM_ADDRESS=xxxxxxx_bot@163.com # email
- SMTP_SERVER=smtp.163.com:465 # email
- SMTP_LOGIN=xxxxxxx_bot@163.com # email
- SMTP_PASSWORD=XXXXXXXXXXXXXX # email
- SMTP_SECURE=ssl # email
volumes:
- feed-icons:/var/www/feed-icons/
networks:
- public_access
- service_only
- database_only
stdin_open: true
tty: true
restart: always

service.mercury:
# set Mercury Parser API endpoint to `service.mercury:3000` on TTRSS plugin setting page
image: wangqiru/mercury-parser-api:latest
container_name: mercury
networks:
- public_access
- service_only
restart: always

service.opencc:
# set OpenCC API endpoint to `service.opencc:3000` on TTRSS plugin setting page
image: wangqiru/opencc-api-server:latest
container_name: opencc
environment:
- NODE_ENV=production
networks:
- service_only
restart: always

database.postgres:
image: postgres:13-alpine
container_name: postgres
environment:
- POSTGRES_PASSWORD=ttrss # feel free to change the password
volumes:
- ~/postgres/data/:/var/lib/postgresql/data # persist postgres data to ~/postgres/data/ on the host
networks:
- database_only
restart: always
# utility.watchtower:
# container_name: watchtower
# image: containrrr/watchtower:latest
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# environment:
# - WATCHTOWER_CLEANUP=true
# - WATCHTOWER_POLL_INTERVAL=86400
# restart: always

volumes:
feed-icons:

networks:
public_access: # Provide the access for ttrss UI
service_only:
# Provide the communication network between services only
internal: true
database_only:
# Provide the communication between ttrss and database only
internal: true
  • Dockerfile.ttrss 往上看

ps.这部分资料是真的少 😵‍💫

编程阅读需 2 分钟

  • 之前试过别的项目 tts-server-android
    • 首先他要联网 进地铁就不能用了
    • 其次信号不好或者其他未知原因,会偶尔是原语音偶尔是这个软件的语音,很难受。
    • 最后这个项目最近用的时候已经不能用了

MultiTTS

编程阅读需 1 分钟

  • 软件 目前版本
    • Moon__Reader_Pro-v9.7_build_907002-Mod.apk

calibre

  • 太大了 镜像都有好几个 g 不想弄

WebDav

  • 打开异常
    • 放弃

ftp

  • 读取地址异常
  • 估计是 docker 服务不行
  • 换了一个打开就好了
version: '3'
services:
ftp-server:
image: fauria/vsftpd # 使用 fauria/vsftpd 镜像
container_name: ftp-server
ports:
- "9921:21" # FTP 控制连接端口
- "21100-21110:21100-21110" # FTP 被动模式的端口范围
environment:
FTP_USER: "user" # FTP 用户名
FTP_PASS: "123" # FTP 密码
PASV_ADDRESS: "192.168.31.2" # 替换为你的服务器公网 IP 地址
PASV_MIN_PORT: "21100" # 被动模式端口范围开始
PASV_MAX_PORT: "21110" # 被动模式端口范围结束
FILE_OPEN_MODE: "0777" # 文件权限
LOCAL_UMASK: "022" # 掩码设置
volumes:
- ./ftp-data:/home/vsftpd # 挂载本地目录到容器
restart: always
  • 静读天下 设置- FTP 同步 - 设置

  • 查看下路径写的什么 默认应该是 [FTP]/Apps/Books

  • 需要根据 docker-compose.yml 使用命令

    • mkdir -p ./ftp-data/user/Apps/Books
  • 现在应该能正常使用了

  • 可以吧自动同步关掉 改成手动同步

    • 离开家后 弹出同步失败
      • 其实提示也不多 不要频繁切换小说就还好
  • tips:

    • 在设置里可以点击同步 将所以书目同步到云上
编程阅读需 1 分钟

  • Docusaurus (kuizuo-blog) 当前是 Algolia 搜索,想切换成 docusaurus-search-local 搜索。
    • Algolia 好像看我不活跃 发邮件 Your suspended application will be removed in 2 days. ,弄过一次,过了几个月又报这个,直接换成本地检索好了。
    • 本地检索不支持句子中的中文,只能直接搜索一段话,并不是特别好用。
      • 列如:我最近用的版本:aaabbb
        • 搜索版本 是搜索不到这句的
        • 搜索我最近用的版本 才搜索到对应的这篇文章。
    • 需要安装 结巴分词 jieba

安装

pnpm i
pnpm i @cmfcmf/docusaurus-search-local
pnpm i @node-rs/jieba

修改

vim docusaurus.config.ts


module.exports = {
// ...
themeConfig: {
// ⭐ 注释掉 algolia 的配置
// algolia: {
// appId: 'aaaa',
// apiKey: 'bbbb',
// indexName: 'index_name',
// },
}
// ...
plugins: [require.resolve("@cmfcmf/docusaurus-search-local")],

// or, if you want to specify options:

// ...
plugins: [
[
require.resolve("@cmfcmf/docusaurus-search-local"),
{
// Options here
// ⭐ 增加中文配置
language: ['en', 'zh'],
},
],
],
};

启动

  • pnpm run github 上说直接启动不会开启搜索
    • 需要 build serve 才行
npm run docusaurus build
npm run docusaurus serve

报错

安装 nodejieba 报错

  • 已经改包 名为 node-rs/jieba
    • pnpm i @node-rs/jieba
(base) PS D:\CodeProjects\anguswg.github.io> pnpm install nodejieba@^2.5.0
 WARN  deprecated loadsh@0.0.4: This is a typosquat on the popular Lodash package. This is not maintained nor is the original Lodash package.
 WARN  22 deprecated subdependencies found: are-we-there-yet@2.0.0, gauge@3.0.2, npmlog@5.0.1, rollup-plugin-terser@7.0.2, sourcemap-codec@1.4.8, stable@0.1.8, workbox-background-sync@6.6.1, workbox-broadcast-update@6.6.1, workbox-build@6.6.1, workbox-cacheable-response@6.6.1, workbox-core@6.6.1, workbox-expiration@6.6.1, workbox-google-analytics@6.6.1, workbox-navigation-preload@6.6.1, workbox-precaching@6.6.1, workbox-range-requests@6.6.1, workbox-recipes@6.6.1, workbox-routing@6.6.1, workbox-strategies@6.6.1, workbox-streams@6.6.1, workbox-sw@6.6.1, workbox-window@6.6.1
Packages: +30 -1
++++++++++++++++++++++++++++++-
Progress: resolved 1524, reused 1523, downloaded 0, added 0, done
node_modules/.pnpm/nodejieba@2.6.0/node_modules/nodejieba: Running install script, failed in 1.9s
.../node_modules/nodejieba install$ node-pre-gyp install --fallback-to-build
│ node-pre-gyp info it worked if it ends with ok
│ node-pre-gyp info using node-pre-gyp@1.0.11
│ node-pre-gyp info using node@20.10.0 | win32 | x64
│ node-pre-gyp info check checked for "D:\CodeProjects\anguswg.github.io\node_modules\.pnpm\nodejieba@2.6.0\node_modules\nodejieba\build\Releas…
│ node-pre-gyp http GET https://github.com/yanyiwu/nodejieba/releases/download/v2.6.0/nodejieba-v2.6.0-node-v115-win32-x64.tar.gz
│ node-pre-gyp ERR! install response status 404 Not Found on https://github.com/yanyiwu/nodejieba/releases/download/v2.6.0/nodejieba-v2.6.0-nod…
│ node-pre-gyp WARN Pre-built binaries not installable for nodejieba@2.6.0 and node@20.10.0 (node-v115 ABI, unknown) (falling back to source co…
│ node-pre-gyp WARN Hit error response status 404 Not Found on https://github.com/yanyiwu/nodejieba/releases/download/v2.6.0/nodejieba-v2.6.0-n…
│ gyp info it worked if it ends with ok
│ gyp info using node-gyp@9.4.1
│ gyp info using node@20.10.0 | win32 | x64
│ gyp info ok
│ gyp info it worked if it ends with ok
│ gyp info using node-gyp@9.4.1
│ gyp info using node@20.10.0 | win32 | x64
│ gyp info find Python using Python version 3.10.13 found at "D:\ProgramData\miniconda3\python.exe"
│ gyp ERR! find VS
│ gyp ERR! find VS msvs_version not set from command line or npm config
│ gyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt
│ gyp ERR! find VS checking VS2022 (17.6.33829.357) found at:
│ gyp ERR! find VS "C:\Program Files\Microsoft Visual Studio\2022\Community"
│ gyp ERR! find VS - found "Visual Studio C++ core features"
│ gyp ERR! find VS - missing any VC++ toolset
│ gyp ERR! find VS could not find a version of Visual Studio 2017 or newer to use
│ gyp ERR! find VS not looking for VS2015 as it is only supported up to Node.js 18
│ gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
│ gyp ERR! find VS
│ gyp ERR! find VS **************************************************************
│ gyp ERR! find VS You need to install the latest version of Visual Studio
│ gyp ERR! find VS including the "Desktop development with C++" workload.
│ gyp ERR! find VS For more information consult the documentation at:
│ gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
│ gyp ERR! find VS **************************************************************
│ gyp ERR! find VS
│ gyp ERR! configure error
│ gyp ERR! stack Error: Could not find any Visual Studio installation to use
│ gyp ERR! stack at VisualStudioFinder.fail (C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\lib\find-visua…
│ gyp ERR! stack at C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\lib\find-visualstudio.js:75:16
│ gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gy…
│ gyp ERR! stack at C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\lib\find-visualstudio.js:71:14
│ gyp ERR! stack at VisualStudioFinder.findVisualStudio2015 (C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gy…
│ gyp ERR! stack at C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\lib\find-visualstudio.js:67:12
│ gyp ERR! stack at VisualStudioFinder.parseData (C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\lib\find-…
│ gyp ERR! stack at C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\lib\find-visualstudio.js:143:14
│ gyp ERR! stack at ChildProcess.exithandler (node:child_process:414:7)
│ gyp ERR! stack at ChildProcess.emit (node:events:514:28)
│ gyp ERR! System Windows_NT 10.0.22631
│ gyp ERR! command "D:\\ProgramData\\nodejs\\nodejs\\node.exe" "C:\\Users\\z7407\\AppData\\Roaming\\npm\\node_modules\\pnpm\\dist\\node_modules…
│ gyp ERR! cwd D:\CodeProjects\anguswg.github.io\node_modules\.pnpm\nodejieba@2.6.0\node_modules\nodejieba
│ gyp ERR! node -v v20.10.0
│ gyp ERR! node-gyp -v v9.4.1
│ gyp ERR! not ok
│ node-pre-gyp ERR! build error
│ node-pre-gyp ERR! stack Error: Failed to execute 'D:\ProgramData\nodejs\nodejs\node.exe C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\…
│ node-pre-gyp ERR! stack at ChildProcess.<anonymous> (D:\CodeProjects\anguswg.github.io\node_modules\.pnpm\@mapbox+node-pre-gyp@1.0.11\nod…
│ node-pre-gyp ERR! stack at ChildProcess.emit (node:events:514:28)
│ node-pre-gyp ERR! stack at maybeClose (node:internal/child_process:1105:16)
│ node-pre-gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:305:5)
│ node-pre-gyp ERR! System Windows_NT 10.0.22631
│ node-pre-gyp ERR! command "D:\\ProgramData\\nodejs\\nodejs\\node.exe" "D:\\CodeProjects\\anguswg.github.io\\node_modules\\.pnpm\\@mapbox+node…
│ node-pre-gyp ERR! cwd D:\CodeProjects\anguswg.github.io\node_modules\.pnpm\nodejieba@2.6.0\node_modules\nodejieba
│ node-pre-gyp ERR! node -v v20.10.0
│ node-pre-gyp ERR! node-pre-gyp -v v1.0.11
│ node-pre-gyp ERR! not ok
│ Failed to execute 'D:\ProgramData\nodejs\nodejs\node.exe C:\Users\z7407\AppData\Roaming\npm\node_modules\pnpm\dist\node_modules\node-gyp\bin\…
└─ Failed in 1.9s at D:\CodeProjects\anguswg.github.io\node_modules\.pnpm\nodejieba@2.6.0\node_modules\nodejieba
 ELIFECYCLE  Command failed with exit code 1.

Error: Cannot find module '@node-rs/jieba'

  • 'pnpm i @node-rs/jieba'
编程阅读需 4 分钟

  • 之前有个展示个人 waketime 的小卡片
  • 感觉还挺高级的
<p>
<img
src="https://github-readme-stats.vercel.app/api?username=anguswg&count_private=true&theme=dark&show_icons=true"
height="165"
/>
<img
src="https://github-readme-stats.vercel.app/api/top-langs/?username=anguswg&theme=dark&show_icons=true"
height="165"
/>
<img
src="https://github-readme-stats-nzp4ivrq9-florianbussmann.vercel.app/api/wakatime?username=AngusWG&theme=dark&show_icons=tru&range=last_7_days"
height="165"
/>
</p>


找了一下 leetcode 的项目

  • LeetCode-Stats-Card
  • 支持 leetcode 和 leetcode cn
  • 找到你的用户名
    • 顺便,用户名可以再力扣中更改一个好看的,目前 90 天一次。
  • 配置网页 配置一下
    • 还是展示 Activity 把,以前 hitmap 还稍微好看一点,但是做题太频繁真的扛不住,也不是很喜欢刷题。

![LeetCode Stats](https://leetcard.jacoblin.cool/anguswg?theme=light&ext=activity&site=cn)

LeetCode Stats


  • 懒人一点 直接吧 anguswg 换成你自己的用户名就好了
编程阅读需 1 分钟

删除旧镜像服务器文件

sudo mv /etc/docker/daemon.json /etc/docker/daemon.json.bak.20240609

Docker d 开启代理

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
sudo vim /etc/systemd/system/docker.service.d/proxy.conf

# Add content below
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890/"
Environment="HTTPS_PROXY=http://127.0.0.1:7890/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

# 重启Docker
sudo systemctl daemon-reload && sudo systemctl restart docker

# 检查Docker有没有使用VPN
systemctl show --property=Environment docker
# Environment=HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890
编程阅读需 1 分钟

选择镜像

在 docker hub 上搜索 frp ,没有官方镜像,目前下载量最高的是 snowdreamtech/frpc 这个,所以选用这个,查了一下没有现成的 docker-compose.yml 参考。

写配置文件

# 公网服务器
mkdir frps
touch frps/frps.toml
touch frps/docker-compose.yml

mkdir nginx
mkdir nginx/conf.d
touch nginx/conf.d/service_1.my_domain.conf
touch nginx/conf.d/tmp.my_domain.conf # 测试用 Nginx 配置

# 内网服务器
mkdir frpc
touch frpc/frpc.toml
touch frpc/docker-compose.yml

frps.toml

  • Server 端配置文件
    • 有公网 ip 或者域名指向
    • 用户访问 ip 所在的服务器
# vim frps/frps.toml
bindPort = 7000 #{必选} 客户端与该端口建立连接
log.to = "console" #{可选} 日志配置, 通过打印的方式输出日志
vhostHTTPPort = 7100 #{可选} http 代理需要,当访问该端口时跳到对应本地 frpc 代理
vhostHTTPSPort = 7200 #{可选} https 代理需要,当访问该端口时跳到对应本地 frpc 代理
transport.tcpMux = true #tcp 流多路复用(优化传输,需一致)

#身份验证
auth.method = "token" #{可选}身份验证方式
auth.token = "password" #token 设置密码,用于通过身份验证创建连接

#frp 服务仪表板配置

webServer.port = 7500 #{也可自行修改端口}
webServer.addr = "0.0.0.0" #公网 ip 或者域名
webServer.user = "admin" #登录用户名{可自行修改}
webServer.password = "admin" #登录密码{可自行修改}

frpc.toml

# vim frpc/frpc.toml
serverAddr = "服务器 IP 或域名"
serverPort = 7000
log.to = "console"
auth.token = "密钥"

#frpc 服务仪表板配置 可以不要
webServer.addr = "0.0.0.0"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"

[[proxies]]
name = "rdp"
type = "tcp"
localIP = "10.128.39.41"
localPort = 3389
remotePort = 3389

报错

访问 Nginx 域名间接性无响应

  • 写了个简单的配置测试,测试后依然没有返回结果,无日志。
# vim tmp.my_domain.conf
server {
listen 80;
listen 443 ssl;

server_name tmp.my_domain.com; #请求域名

include /etc/nginx/conf.d/base.conf;

location / {
default_type application/json;
return 200 '{"status":"success","result":"nginx json"}';
}
}

  • 本地机器上 curl tmp.my_domain.com 依然无结果。
  • 感觉是官方 nginx 被反复硬重启,导致的无响应。
  • sudo docker compose stop && sudo docker compose rm -f && sudo docker compose up -d
  • 重启后 curl tmp.my_domain.com 反应正常。

my_domain.com 端口可以访问 二级域名映射后走 Nginx 不能访问

 *1 connect() failed (111: Connection refused) while connecting to upstream, client: 223.73.6.219, server: ttrss.my_domain.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:10181/", host: "ttrss.my_domain.com"

被访问端 Server A

  • 声明所用的网络
# vim frps/docker-compose.yml
version: '3'
services:
frps:
restart: unless-stopped
image: snowdreamtech/frps
container_name: frps
volumes:
- ./frps.toml:/etc/frp/frps.toml
ports:
- 7000:7000
networks:
- default # 默认为 service_name + network_name = frps_default

networks:
default:
driver: bridge

访问端 Nginx

  • 注明需要访问的网络
# vim nginx/docker-compose.yml
version: '3'
services:
nginx:
restart: unless-stopped
container_name: nginx
image: nginx
# network_mode: "host"
ports:
- 80:80
- 443:443
environment:
- NGINX_PORT=80
- TZ=Asia/Shanghai
privileged: true
volumes:
# # 有可能会出现不能挂载,这个时候用手动拷贝配置文件就行
# - /usr/local/nginx/nginx.conf/:/etc/nginx/nginx.conf
# - /usr/local/nginx/html:/usr/share/nginx/html
# - /usr/local/nginx/www:/var/www
# - /usr/local/nginx/etc/cert:/etc/nginx/cert
- /var/log/nginx:/var/log/nginx
- ./conf.d:/etc/nginx/conf.d
- /etc/letsencrypt:/etc/letsencrypt
- /etc/letsencrypt/live/my_domain.com:/usr/local/nginx/ssl/any
networks:
- frps_default # 默认为 service_name + network_name = frps_default

networks:
frps_default:
external: true
  • 这时候,Nginx 配置文件里的 ip 地址就可以直接用 frps 配置里的服务名 frps
# vim ./conf.d/service_a.my_domain.conf
upstream docker-frps {
server frps:3389;
}

server {
listen 80;
listen 443 ssl;

server_name service_a.my_domain.com; #请求域名

include /etc/nginx/conf.d/base.conf;

location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_pass http://docker-frps;

}

# set site favicon
location /favicon.ico {
return 204 ;
}
}

Nginx and favicon.ico - "GET /favicon.ico HTTP/1.1" FAILED

location = /favicon.ico {
return 204;
access_log off;
log_not_found off;
}

最后 frpc 的 docker-compose.yml

# vim frpc/docker-compose.yml
version: '3'
services:
frpc:
restart: unless-stopped
image: snowdreamtech/frpc
container_name: frpc
volumes:
- ./frpc.toml:/etc/frp/frpc.toml
# ports:
# - 7400:7400

因为是由 frpc 访问内网服务,所以它不用写端口,不过有个管理页面,需要的打开。


编程阅读需 4 分钟

因为是 zsh 所以修改 vim source ~/.zshrc

if command -v tmux &> /dev/null && [ -z "$TMUX" ]; then
tmux at -t 0 || tmux new -s 0
fi

一个命令版本

echo -e "\n# Automatically start tmux session\nif command -v tmux &> /dev/null && [ -z \"\$TMUX\" ]; then\n    tmux attach-session -t 0 || tmux new-session -s 0\nfi\n# Automatically start tmux session end\n" >> ~/.zshrc
source ~/.zshrc

再也也不用担心长命令不敢关 terminal 啦~

编程阅读需 1 分钟

Cloudflare Worker 是由 Cloudflare 提供的一种边缘计算平台,用于在全球分布的边缘节点上运行和扩展代码。它允许开发人员将自定义代码部署到 Cloudflare 的网络中,将计算任务尽可能地靠近用户,实现低延迟和高性能的应用程序。

使用 Cloudflare Worker,开发人员可以编写和部署 JavaScript 代码,这些代码在 Cloudflare 的边缘节点上执行。这意味着代码可以在靠近用户的位置运行,而不是在传统的中心化服务器上。这种分布式计算的方式可以提供更快的响应时间和更好的用户体验。

代码如下:

export default {
// async fetch(request, env, ctx) {
// return new Response('Hello World!');
// },


async fetch(request, env, ctx) {
const response = await fetch('https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US')
const data = await response.json()

const image_url = data.images[0].url
const target_url = `https://www.bing.com${image_url}`

const image_response = await fetch(target_url)

const response = new Response(image_response.body, image_response);
// 图片到期时间太长 有8天 设置 Cache-Control 标头
const CACHE_TIME = 12 * 60 * 60; // 缓存时间为 12 小时,单位为秒
response.headers.set('Cache-Control', `max-age=${CACHE_TIME}`);

return response;
}
};
  • 保存后项目会提示有对应的订阅链接
    • 这个链接就不放了,有每日 10w 的使用次数
  • 其实是为了 cloudflare-worker 这盘醋包了 bing-wallpaper 这个饺子。

图片到期时间太长

在 Microsoft Edge 浏览器中,你可以使用开发者工具来查看图片的缓存到期时间。请按照以下步骤进行操作:

  1. 打开 Microsoft Edge 浏览器,并导航到包含你要查看的图的网页。
  2. 在浏览器中,按下 F12 键,或右键点击网页上的任何位置,然后选择 "检查" 或 "检查元素"。这将打开开发者工具窗口。
  3. 在开发者工具窗口中,切换到 "网络" 或 "Network" 选项卡。这将显示所有加载的网络资源列表。
  4. 在资源列表中,找到你要查看缓存到期时间的图片。你可以使用筛选器或直接滚动浏览列表来找到它。
  5. 右键点击图片资源,并选择 "检查" 或 "Inspect"。这将打开 "元素" 或 "Elements" 面板,其中将显示有关该图片的详细信息。
  6. 在 "元素" 或 "Elements" 面板中,查找 "请求标头" 或 "Request Headers" 部分。在该部分中,你将看到 "缓存控制" 或 "Cache-Control" 的信息。它会提供关于图片缓存到期时间的指示。
    • 如果 "缓存控制" 或 "Cache-Control" 的值为 "max-age=xxx",其中 "xxx" 表示以秒为单位的缓存有效期。例如,"max-age=3600" 表示图片缓存将在 3600 秒(1 小时)后过期。
    • 如果 "缓存控制" 或 "Cache-Control" 的值为 "no-cache",表示该图片不会被缓存。
  • 通过查看缓存控制标头,你可以了解图片缓存的到期时间或是否会被缓存。请注意,这仅适用于服务器正确设置了缓存控制标头的情况。如果服务器未提供缓存控制信息,浏览器可能会使用默认的缓存策略。

  • 增加代码解决

    const CACHE_TIME = 12 * 60 * 60; // 缓存时间为 12 小时,单位为秒
const response = new Response(image_response.body, image_response);
// 设置 Cache-Control 标头
response.headers.set('Cache-Control', `max-age=${CACHE_TIME}`);
编程阅读需 3 分钟