MoreRSS

site iconbooop修改

支援西部的大学生,前端。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

booop的 RSS 预览

记房屋自来水管漏水

2025-07-28 20:30:00

昨天晚上四点钟的时候心血来潮,把家里的地扫了一遍,这几周来回往返没有时间打扫屋子,打扫出来了一大团灰,都相互成团。打算接桶水再拖一遍地,就在我把卧室的地脱完去涮拖布的时候,进卫生间看见坑里黑了一块。我蹲下一看坑里正有水不断慢慢的往上返,当即我就给房东发过去视频,同时把水阀关上了。

坑的由来

卫生间这个坑是今年二月中旬的时候留下的,当时我在上班,看到了群里有人问六楼西侧跑了两三天的水,当时我还在想不管是东侧还是西侧都是有人住的,如果是我家,按理来说我不会感觉不出来,就在我思考的时候社区来电话说是我家跑水了,让我百思不得其解。当即跟领导请了假打车回去,到了五楼进去一看卫生间浴霸那正在往下滴水,卫生间门口也都有泡过干了的痕迹,我当时就联系了房东,上楼把供暖管道关了。

直到第二天测漏的工人来把卫生间门口刨开了才发现整个水泥里面已经湿透了,自从处理完以后,房东找了两个师傅做防水,一个做不了,另一个房东嫌太贵,遂让我对付对付,这个洞倒也不影响我日常生活和洗澡,我也就没有管它。

漏水后续

给房东打完电话后,我又给物业打电话。现在的物业至少我接触过的就没有特别能做事的。晚上六点多物业两个老大爷来了,我跟他俩说了一边情况,俩人让我把自来水管打开看看情况,我刚出门打开自来水阀的时候房东来了,同时卫生间坑里的水又开始流起来了,甚至比最开始发现的时候还要快。结果两个物业大爷看完断定就是自来水管漏了以后收拾工具就走了。房东问他们不修的时候,两个老大爷轻飘飘留下一句“我们不管,你们自己找人修吧”后就走了。最后房东找到了当初二月份给修地暖的师傅第二天过来侧漏来。当晚因为没水,我也只好暂住在朋友家,同时给我的领导打电话请了个假。

今天白天侧漏的过来连测、刨带换件弄了一上午,终于修好了,他们和房东都走以后我又开始收拾屋子,修完后的屋子乱到不能再乱了,自己又收拾了一个小时。

不幸中的万幸

幸运的是正是因为没有填上上次的坑,昨天晚上五点的时候才发现它漏水了,如果当初找到了师傅并做好防水重新铺上估计又要漏很久才会发现。介于我月末到期就不续租了,如果到了那个时候发现就很被动,修完以后我得重新收拾,等到过几天房租到期后又得再收拾一遍,想想就很折磨人。不过测完以后漏水的位置离之前修的地暖管道比较近,没怎么太影响我日常生活,只是将卫生间门口的地板起了五六块。现在上厕所先走地板,再走水泥地,最后进卫生间的瓷砖地,也是蛮有意思的。

思考

一方面,通过这次自来水管漏水事情发生以后,我感觉有些物业真的只是收钱,其他事情具体很少能够真帮你干,女房东昨天听闻这件事以后对于物业也是很气愤,直言打算以后除了垃圾清理费,其他的钱不会再交了。这个物业清理楼道也只能说是聊胜于无吧。

另一方面,一个房子涉及到上下水的建材质量真的很重要,这个东西图便宜的代价就是埋下了一个定时炸弹,这个东西最先入场,质量好坏决定了房子的期限,只要埋到了地下抹上水泥,它就永远定死了(除非再次装修),你不知道什么时候在哪块它自己悄无声息的慢慢滴漏,等你发现的时候已经为时已晚。

今天师傅工作的时候听闻,说是可以买一个房屋险,其中包括这种漏水问题可以进行理赔,跟我和房东说了几个其他小区业主出现这种情况申请理赔给赔付了多少钱,说是一年才200块钱,但是具体没有搜索过,等有时间看一看,如果合适的话可以给自己的房子保一个。

鼻炎的痛苦

2025-07-24 16:08:00

症状持续加重

记不清从什么时候,鼻子有时开始变得不通气,但当时也并没有在意,到后来逐步发展成不通气且经常流鼻涕,再到后来不光有上述的情况甚至还一度打喷嚏、眼睛痒、头胀等情况。

起初一直怀疑是对猫毛、粉尘过敏。但也没有考虑去医院做个过敏原测试,在外地上学的时候可能一个月才会有一次,但是回家以后可能就隔两三天一次,每次鼻炎都需要睡一觉第二天才能有所好转。

直到我开始上班,在外地工作鼻炎也是时有时无,有时边流鼻涕边打喷嚏,喷嚏还会连着打好几个,严重影响日常生活。

就诊与检测结果

直到六月初,我才去医院挂号,打算测一下过敏原。也正是这次挂号才了解并知道“变态反应科”这个科室,当天去也是很巧,到了医院已经是下午,进门后跟医生口述了我这段情况,打算要测一下过敏原,其他患者想要测过敏原都已经排到了半个月后,我去的时候原本下午有一个小孩要做过敏原检测,但因家里有时给往后延期了,这个空位让我占上了。

缴完相关费用以后,回到科室后医生从冰箱里拿出了三盒药剂,我数了一下总共四十个瓶子,一瓶一小滴挨个滴在我胳膊上,随后用一次性点刺针依次在我胳膊上点刺。四十个药剂四十个小刀口,都扎完以后静候了半个小时,最后医生过来对着表给我画了一些过敏原。

医生说我主要是对霉菌、蒿粉和螨虫过敏,当然还有零星的一些花粉。医生让我出门多戴口罩,在家尽量勤通风避免有潮湿的地方。

吃药和后续打算

虽然做了过敏原测试,但是日常生活中还是没办法完全避免这些过敏原,前几天我又犯鼻炎了,甚至还更严重了一些。之前鼻炎的时候吃氯雷他定稍微还有点效果,除了药效有点慢,随着鼻炎有点严重以后,开始换成了地氯雷他定,这个药效要比氯雷他定稍微快一些,但是上次吃完之后并没有感觉有所缓解。一直拖到了晚上睡觉,第二天早起的时候还是稍微有点鼻炎的症状。但到了上午也就没有任何不适了。

我的朋友之前也有鼻炎,但是前一段时间去外地治疗了三回,目前听他说好像有点效果,现在基本也没有很严重的时候。他推荐我去看一看,但目前来看是没有时间和机会去了,等后续有时间可以抽出来再去看看吧。

独立开发者的热情消耗与现实困境

2025-07-16 18:10:00

本人算不上是一个完整的独立开发者,毕竟不是全职,而且技术也并不能达到独立开发者所需要的高度,但还是认为可以算是一个独立开发者。

跳不出的循环

自己从接触编程到如今,少说也有7年了。在这段时间里,陆陆续续创建并编写过几个小型的个人项目。但是因为个人的一些思维,总是感觉之前编写的是一堆冗余且不清爽的代码。因而经常陷入“创建—否定—删除—重建”的循环。

这也就导致了现在自己的 GitHub 上,虽然零星有几个存储库,但也都是好久没有更新的代码了。

项目初期

以我个人的角度来看,当大部分独立开发者在脑海里有一个独特的新想法时,总是会把预期设置的很好,“这个想法很不错、这个功能一定很实用,开发出来后一定会爆火……”所有的项目开始都会经历这个阶段,以至于每个项目开始都是动力满满,“创建存储库、创建工程,安装相关依赖,开始配置相关代码……”这个兴奋的状态通常会持续一段时间(可能不超过两周),随着时间的积累慢慢这种兴奋的状态也就消耗殆尽了。

项目中期

到了这时通常会有几种情况:一种是主体开发出来了,另一种是只开发出了基础功能,还有一种就是放弃躺平了。

对于第一种主体开发出来了,这种时候通常会选择进行推广,这个时候噩梦又开始了,有的开发者又会开始纠结,在什么平台推广,应该怎么推广,推广的效果不好怎么办。索性就开始问 AI,让 AI 给出意见和建议。按照 AI 给出的内容到对应平台发表针对不同群体、不同用户的不同推广文案,渴望能够得到流量和回应。但往往结果也是不温不火,零星的有几个访问量,过几天后访问量归零。

另一种开发出来了基础功能,但认为用户体验并不好,有些功能还存在各种各样的问题,就会继续透支自己的兴趣去完善、去优化相关功能。当榨干最后一丝兴奋状态后,这个项目大概率就会烂尾了。
反观最后一种直接放弃躺平,它还能值得一些,毕竟提早放弃也给自己节省出了更多的时间,虽然也可能会浪费在其他地方上。

无论项目完成程度如何,大部分开发者最终都面临着同一个难题——项目如何走出内圈,实现真正的触达与传播。

根本问题

在很多时候,大部分的独立开发者构思出的想法都不会去验证可行性,都会在脑中构思出最有利的一面,从而忽视它的实际情况。一个产品不光需要开发,更重要的是在于可持续运营,如果不会或者不运营,它势必只会困于自己的围墙内,外人了解不到也体验不到产品的核心功能。

对于开发一款产品,不仅要做好前期的调研和可行性分析,了解并判断用户的具体痛处和希望的功能,同时也要在开发中时刻保持与用户的沟通,用最小可行性功能去验证用户的期望与回应,通过用户的反馈与意见建议驱动开发产品的动力与热度,从而让产品能够继续开发与运营。

独立开发的价值不仅在于技术实现,更在于能否真正解决问题、连接用户、持续运营。这才是让产品从想法走向现实的关键一步。

使用 Docker Compose 管理容器服务

2025-07-13 17:00:00

在早期,我通过 docker run 命令手动运行容器,这在服务数量较少时尚可应付。但随着了解并使用的容器增多,手动创建变得低效且混乱。同时,先前发布过一次 Docker 常用服务相关代码,评论区也推荐我使用 Docker Compose。因此,我逐步迁移到使用 Docker Compose 进行容器编排,统一管理后端数据库、前端代理、开发应用与运维服务。

本文整理并展示了我当前服务器上运行的主要容器配置,包括 nginx、mysql、wordpress、vaultwarden 等服务。相关配置需要配合 .env 文件变量,下面的内容部分细节只针对我的服务器调试,如果需要可能需根据你的服务器自行调整。如果你有优化或者更好的建议也可以在下面评论中与我进行沟通交流。

docker-compose.yml

# 定义两个自定义网络,实现服务间的隔离
networks:
  backend:
    driver: bridge  # 后端服务间通信网络
  frontend:
    driver: bridge  # 前端服务与外部通信网络

services:
  nginx:
    image: nginx
    container_name: nginx
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ${ROOT_PATH}/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ${ROOT_PATH}/nginx/conf.d:/etc/nginx/conf.d
      - ${ROOT_PATH}/nginx/ssl:/etc/nginx/ssl
      - ${ROOT_PATH}/nginx/html:/usr/share/nginx/html
      - ${ROOT_PATH}/nginx/log:/var/log/nginx
    environment:
      - TZ=Asia/Shanghai
    labels:
      # Nginx 配合 acme.sh 自动加载证书,支持热更新。
      - sh.acme.autoload.domain=${CAME_SH_AUTOLOAD_DOMAIN}
    networks:
      - frontend
      - backend
    healthcheck:
      test: ["CMD-SHELL", "nginx -t || exit 1"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 10s

  mysql:
    image: mysql
    container_name: mysql
    restart: always
    expose:
      - "3306"
    volumes:
      - ${ROOT_PATH}/mysql/conf.d:/etc/mysql/conf.d
      - ${ROOT_PATH}/mysql/data:/var/lib/mysql
      - ${ROOT_PATH}/mysql/log:/var/log/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - TZ=Asia/Shanghai
    command:
      - --lower_case_table_names=1
      - --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    networks:
      - backend
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:latest
    container_name: redis
    restart: always
    expose:
      - "6379"
    volumes:
      - ${ROOT_PATH}/redis/data:/data
      - ${ROOT_PATH}/redis/redis.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    networks:
      - backend
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 3s
      retries: 3
  
  wordpress:
    image: wordpress:latest
    container_name: wordpress
    restart: always
    expose:
      - "80"
    volumes:
      - ${ROOT_PATH}/wordpress:/var/www/html
    environment:
      - WORDPRESS_DB_NAME=${WORDPRESS_DB_NAME}
      - WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST}
      - WORDPRESS_DB_USER=${WORDPRESS_DB_USER}
      - WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD}
    networks:
      - backend
    healthcheck:
      test: ["CMD-SHELL", "curl -s -o /dev/null -w '%{http_code}' http://localhost/wp-login.php | grep -qE '2[0-9]{2}|3[0-9]{2}|403|404' || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 180s
    depends_on:
      mysql:
        condition: service_healthy
  
  phpmyadmin:
    image: phpmyadmin
    container_name: phpmyadmin
    restart: always
    expose:
      - "80"
    environment:
      - PMA_HOST=mysql
      - PMA_PORT=3306
      - TZ=Asia/Shanghai
    networks:
      - backend
    healthcheck:
      test: ["CMD", "curl", "-fsSL", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s
    depends_on:
      mysql:
        condition: service_healthy

  vaultwarden:
    image: vaultwarden/server
    container_name: vaultwarden
    restart: always
    expose:
    - "80"
    volumes:
    - ${ROOT_PATH}/vaultwarden:/data
    environment:
    - DATABASE_URL=mysql://${VAULTWARDEN_DATABASE_USER}:${VAULTWARDEN_DATABASE_PASSWORD}@mysql/vaultwarden
    - ADMIN_TOKEN=${VAULTWARDEN_ADMIN_TOKEN}
    - RUST_BACKTRACE=1
    networks:
      - backend
    healthcheck:
      test: ["CMD", "curl", "-fsSL", "http://localhost"]
      interval: 30s
      timeout: 15s
      retries: 3
      start_period: 30s
    depends_on:
      mysql:
        condition: service_healthy

  acme.sh:
    image: neilpang/acme.sh
    container_name: acme.sh
    restart: always
    volumes:
      - ${ROOT_PATH}/acme.sh:/acme.sh
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - DP_Id=${CAME_SH_DNSPOD_ID}
      - DP_Key=${CAME_SH_DNSPOD_KEY}
      - DEPLOY_DOCKER_CONTAINER_LABEL=sh.acme.autoload.domain=${CAME_SH_AUTOLOAD_DOMAIN}
      - DEPLOY_DOCKER_CONTAINER_KEY_FILE="/etc/nginx/ssl/${CAME_SH_AUTOLOAD_DOMAIN}/${CAME_SH_AUTOLOAD_DOMAIN}.key"
      - DEPLOY_DOCKER_CONTAINER_CERT_FILE="/etc/nginx/ssl/${CAME_SH_AUTOLOAD_DOMAIN}/${CAME_SH_AUTOLOAD_DOMAIN}.cer"
      - DEPLOY_DOCKER_CONTAINER_CA_FILE="/etc/nginx/ssl/${CAME_SH_AUTOLOAD_DOMAIN}/ca.cer"
      - DEPLOY_DOCKER_CONTAINER_FULLCHAIN_FILE="/etc/nginx/ssl/${CAME_SH_AUTOLOAD_DOMAIN}/fullchain.cer"
      - DEPLOY_DOCKER_CONTAINER_RELOAD_CMD="docker compose exec nginx nginx -s reload"
    command: daemon
    networks:
      - backend

  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Asia/Shanghai
    command:
      - --cleanup=true
    networks:
      - backend
  
  minecraft:
    image: itzg/minecraft-server
    container_name: minecraft-server
    restart: always
    tty: true
    stdin_open: true
    ports:
      - "25565:25565"
    environment:
      - EULA=TRUE
      - MAX_PLAYERS=8
      - TZ=Asia/Shanghai
      - DIFFICULTY=2
      - ENABLE_COMMAND_BLOCK=true
    volumes:
      - ${ROOT_PATH}/minecraft:/data
    networks:
      - backend

  beszel:
    image: henrygd/beszel:latest
    container_name: beszel
    restart: always
    expose:
      - "8090"
    volumes:
      - ${ROOT_PATH}/beszel:/beszel_data
    healthcheck:
      test: ['CMD', '/beszel', 'health', '--url', 'http://localhost:8090']
      start_period: 5s
      interval: 120s
    networks:
      - frontend
  
  beszel-agent:
    image: henrygd/beszel-agent:latest
    container_name: beszel-agent
    restart: always
    network_mode: host
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    healthcheck:
      test: ['CMD', '/agent', 'health']
      start_period: 5s
      interval: 120s
    environment:
      PORT: 45876
      KEY: '<公钥>'

自定义网络:

backend 用于内部服务通信(MySQL、Redis、WordPress、Vaultwarden 等)

frontend 用于暴露 Nginx、监控等对外服务

.env 文件

# 项目根路径映射(用于挂载)
ROOT_PATH=/home/halon/apps

# 域名配置
# 替换为你的网站域名
CAME_SH_AUTOLOAD_DOMAIN="example.com"

# ACME DNSPod 证书自动签发
CAME_SH_DNSPOD_ID="DNSPod ID"
CAME_SH_DNSPOD_KEY="DNSPod Key"

# MySQL 配置
MYSQL_ROOT_PASSWORD="MySQL root 密码"

# WordPress 数据库
WORDPRESS_DB_NAME=WordPress 数据库名称
WORDPRESS_DB_HOST=WordPress 数据库主机名称
WORDPRESS_DB_USER=WordPress 数据库用户名
WORDPRESS_DB_PASSWORD=WordPress 数据库密码

# Vaultwarden 配置
VAULTWARDEN_DATABASE_USER="Vaultwarden 数据库用户名"
VAULTWARDEN_DATABASE_PASSWORD="Vaultwarden 数据库密码"
VAULTWARDEN_ADMIN_TOKEN='Vaultwarden Admin Token'

上述两个文件需要放置在一起,以供执行 Docker Compose 时能够寻找到相对应的变量。

WordPress 显示链接功能

2023-11-08 15:11:00

自 WordPress 3.5 版本以后,默认隐藏了“链接”的功能,如果我们需要添加友情链接,可以借助插件或者修改代码的方式进行操作。

但如果你希望使用系统默认“链接”管理功能,但又不打算安装额外插件,可以通过添加一行代码的方式手动启用。

启用方法

将以下代码添加至当前主题的 functions.php 文件中(建议添加至文件末尾):

add_filter('pre_option_link_manager_enabled', '__return_true');

保存并更新文件后,WordPress 管理后台左侧菜单将会显示 “链接” 项目,即可开始管理和添加友情链接。

这个方法适用于任何支持自定义 functions.php 的主题且不依赖插件,适合追求轻量纯净的个人博客用户。

电信光猫 TEWA-708G 获取超级密码教程

2023-08-27 15:19:00

注意:这是一篇发表于2023年的文章,相关信息可能已更新,本文章仅供技术参考,部分操作方式可能有所改动,请读者自行甄别。

我使用的是电信光猫 TEWA-708G,超级用户的密码已经不再是固定的了,是随机生成的,所以需要一些操作才能够获取到超级密码。

这个教程不能保证适用所有型号为 TEWA-708G 的光猫,因为通过搜索有些同型号的光猫使用的是 sessionKey 进行查找,有些则是以 set1_sessionKey_*** 进行查找,我的设备使用的是 set1_sessionKey_***,所以做一个记录:

使用普通用户登录

用户名和密码在光猫的背面,登录地址:192.168.1.1:8080,用户名一般为 useradmin,并在光猫 USB 接口中插好 U 盘。

进入“设备管理页面”

点击“管理”—“设备管理”或访问:http://192.168.1.1:8080/MD_Device_user.html
一定要确认进入设备管理界面,这个界面连 USB 都给屏蔽了。

查找 set1_sessionKey_***

按 F12 或在页面点右键→检查,然后在里面搜索 set1_sessionKey_,你会找到一个 set1_sessionKey_*** 之类的结果,把 *** 记下来。

构造命令并执行

切换到 Console 窗口,在输入框中输入如下内容:location.assign("/usbbackup.cmd?action=backupeble&set1_sessionKey=set1_sessionKey_***") 然后回车。

备份配置

页面打开后,右键备份配置,点击“检查”,删除 disable 字段,此时可以看到按钮已从禁用状态转为可点击状态,现在可以点击“备份配置”正常备份了,点击之后页面会全白,那是正常的。

得到备份文件

U 盘上会生成一个名为 e8_Config_Backup 的文件夹,其下的 ctce8_TEWA-708G.cfg 就是路由器配置文件。

解密文件

如果用记事本打开 ctce8_TEWA-708G.cfg,会是一堆乱码。要使用 xor(点击跳转 或者 router pass view 打开配置文件,搜索 TeleComAccount 字段 ,下面的 Password 内即为超级密码。

关闭启用周期上报

进入 Web 后台管理界面后,切换到“网络”—“远程管理”选项卡,清除勾选“启用周期上报”项,这样就彻底阻止了电信对光猫的远程控制功能。

以上就是电信光猫 TEWA-708G 获取超级密码的整个教程,但不保证这个教程适用于这个光猫型号的所有设备,所以,如果按照上述操作发现无法获取超级密码则需要搜索其他获取方案。