普通视图

发现新文章,点击刷新页面。
昨天以前嘀咕

利用 Github Actions 备份数据库

作者 冰剑
2024年12月4日 16:46

数据无价,做好备份至关重要!用宝塔面板时,数据库自动备份到 OSS,轻松省事。现在换用 Docker 后,只能手动备份,有点麻烦,要是能自动化就好了。

上周末想到利用 Github Actions 实现自动备份,因为不太熟悉脚本,折腾了两天,好歹也是折腾出了结果。原理还是挺简单的,通过 Github Actions 定时执行任务,远程连接到数据库并转储程文件,将文件通过 Telegram Bot 发送至指定群组。当然,除了这个额外还加了一个发送至支持 S3 协议的云存储服务。其实还能扩展更多,比如 FTP、WebDAV 等等。

准备

Telegram

创建机器人

点击BotFather,按照提示创建机器人,并获得机器人的 Token。

创建频道

这里使用 Telegram Desktop 版为例,创建频道并把刚刚的机器人添加为频道管理员。

获取频道 ID

点击Get Chat ID机器人并且添加,点击下方Channel按钮,选择刚刚创建的频道,即可看到频道 ID。

注意:前面的减号也是它的一部分。

S3 存储

这里使用七牛云的存储服务,其他的自行尝试,比如赛博菩萨的R2。

  1. 点击七牛云注册并实名账号;
  2. 点击空间管理创建一个备份文件的存储空间,并记住空间名称存储区域
  3. 点击S3服务域名,记住与你的存储区域对应的域名;
  4. 点击密钥管理,获得AccessKey、SecretKey。

配置

创建仓库

点击New Repository创建一个仓库,用于存放备份脚本,建议使用私密仓库。当然,你也可以使用你原本已有的仓库,怎么样都行,总之,要有个仓库。

创建 secrets

点击New repository secret,依次添加下面的必填密钥。

密钥名称是否必填默认值说明
DB_BACKUP_MYSQL_IP 数据库的IP
DB_BACKUP_MYSQL_PORT3306数据库的端口
DB_BACKUP_MYSQL_USERNAME 数据库的用户名,建议只读用户
DB_BACKUP_MYSQL_PASSWORD 数据库的密码,建议只读用户
DB_BACKUP_MYSQL_DATABASE 数据库的名称
DB_BACKUP_TELEGRAM_CHAT_ID Telegram 频道 ID
DB_BACKUP_TELEGRAM_BOT_TOKEN Telegram 机器人 Token
DB_BACKUP_S3_ACCESS_KEY S3 存储服务的 AccessKey
DB_BACKUP_S3_SECRET_KEY S3 存储服务的 SecretKey
DB_BACKUP_S3_HOST_BASE S3 存储服务的域名
DB_BACKUP_S3_HOST_BUCKET S3 存储服务的域名
DB_BACKUP_S3_BUCKET_NAME S3 存储空间的名称
DB_BACKUP_S3_PREFIX_PATH S3 存储空间下的路径
DB_BACKUP_S3_DAYS30S3 存储空间数据保留天数
DB_BACKUP_S3_USE_HTTPStrueS3 是否使用 HTTPS
DB_BACKUP_S3_SIGNATURE_V2falseS3 是否使用签名 V2

创建 workflow

在仓库中选择Actions->New workflow->Set up a workflow yourself,自定义一个文件名,然后粘贴下面的 YAML 脚本。

name: Backup Blog Database

on:
  workflow_dispatch:
  schedule:
    - cron: '18 3 * * *'  # 定时备份频率

jobs:
  backup:
    runs-on: ubuntu-latest
    steps:
      - name: Set environment variables
        run: |
          echo "FILENAME=backup-blog-mysql-$(TZ=Asia/Shanghai date +"%Y%m%d%H%M%S").sql.gz" >> $GITHUB_ENV
          echo "CAPTION=#博客 $(TZ=Asia/Shanghai date -d "now" +%Y-%m-%d\ %H:%M:%S)" >> $GITHUB_ENV
      - name: Install mysql-client
        run: sudo apt-get install mysql-client -y
      - name: Check mysqldump version
        run: mysqldump --version
      - name: Dump database
        run: |
          mysqldump -h ${{ secrets.DB_BACKUP_MYSQL_IP }} -P ${{ secrets.DB_BACKUP_MYSQL_PORT || 3306 }} -u${{ secrets.DB_BACKUP_MYSQL_USERNAME }} -p${{ secrets.DB_BACKUP_MYSQL_PASSWORD }} ${{ secrets.DB_BACKUP_MYSQL_DATABASE }} | gzip > ${{ env.FILENAME }}
      - name: Upload backup to telegram
        run: |
          curl -F document=@"${{ env.FILENAME }}" "https://api.telegram.org/bot${{ secrets.DB_BACKUP_TELEGRAM_BOT_TOKEN }}/sendDocument" --form 'chat_id="${{ secrets.DB_BACKUP_TELEGRAM_CHAT_ID }}"' --form 'caption="${{ env.CAPTION }}"'
      - name: Install s3cmd
        run: sudo apt-get install s3cmd -y
      - name: Check s3cmd version
        run: s3cmd --version
      - name: Configure s3cmd
        run: |
          cat << EOF > ~/.s3cfg
          [default]
          access_key = ${{ secrets.DB_BACKUP_S3_ACCESS_KEY }}
          secret_key = ${{ secrets.DB_BACKUP_S3_SECRET_KEY }}
          host_base = ${{ secrets.DB_BACKUP_S3_HOST_BASE }}
          host_bucket = ${{ secrets.DB_BACKUP_S3_HOST_BUCKET }}
          use_https = ${{ secrets.DB_BACKUP_S3_USE_HTTPS || true}}
          signature_v2 = ${{ secrets.DB_BACKUP_S3_SIGNATURE_V2 || false}}
          EOF
      - name: Upload backup to s3
        run: |
          s3cmd put ${{ env.FILENAME }} s3://${{ secrets.DB_BACKUP_S3_BUCKET_NAME }}/${{ secrets.DB_BACKUP_S3_PREFIX_PATH }}/
      - name: Remove old backup from s3
        run: |
          s3cmd sync s3://${{ secrets.DB_BACKUP_S3_BUCKET_NAME }}/${{ secrets.DB_BACKUP_S3_PREFIX_PATH }}/ ./ --delete-removed
          find . -type f -mtime +${{ secrets.DB_BACKUP_S3_DAYS || 30}} -print0 | xargs -0 -I {} basename {} | xargs -I {} s3cmd del s3://${{ secrets.DB_BACKUP_S3_BUCKET_NAME }}/${{ secrets.DB_BACKUP_S3_PREFIX_PATH }}/{}

注意:

  1. 如果只想使用 Telegram 或者 S3 备份,那么可以分别删除掉对应步骤即可;
  2. 定时执行的时间,脚本中是每天凌晨三点十八分(问就是因为我女儿是三月十八日出生的)执行,这个时间是 Github 机房时区的时间。

无问题后点击右上角Commit changes...,提交到代码仓库。

测试

来到仓库的Actions页面,点击左侧Backup Blog Database,再点击右侧的Run workflow下拉按钮,保存默认的参数,点击Run workflow,即可开始执行任务。

Telegram 和 S3 存储空间中如果能够看到备份文件,则表示成功。

补上了这几年的双11

作者 冰剑
2024年11月13日 23:10

其实有好几年没有双11认认真真的买过东西了,本以为今年也不例外,但架不住还有政府补贴啊。

笔记本

事情的起因就是笔记本,我之前用的笔记本是六年前买的小米笔记本Pro 15.6寸,其实并没有什么大问题,勉强还能撑个两年。但好奇的看了看笔记本的价格,政府补贴加公司补贴,自己支出其实也没多少。

起初是考虑的是同事推荐的惠普战X,看中的是它的内存最大可以扩展到64G,各种配置也不错。但是,因为我第一台笔记本也是惠普,当年深受惠普的闪屏门的迫害,最终还是放弃了。又考虑小米的笔记本,毕竟之前的本子给我的印象是挺不错的,但小米只有红米的游戏本,所以也放弃选择。选来选去,选择了ThinkBook 16+

笔记本原价6999,政府补贴20%,也就是1399,最终支付5599,然后公司两年报销3600,相当于自己只出了2000。然后为了一步到位,又升级了 32GB×2 内存条、加装 1T SSD 硬盘。为了少背一个充电器,也换上了多口充电头,我也就想不明白,那么多年的发展,联想的原装充电头怎么还是那么大一块,极其不方便。升级的东西,1700左右,然后把原装的 16GB×2 内存条和电源卖了,回血600,之前的本子还没卖,打算卖个1400左右。整体来说,不算上公司两年内的补助,差不多就政府补助后的价格,至于卖掉的东西就用来升级了配置。

  • 型号:ThinkBook 16+ 2024
  • 屏幕:16 英寸 2.5K 屏
  • 处理器:Intel 酷睿 Ultra7 155H 16核22线程 4.8GHz
  • 显卡:Intel 锐炫Arc 核显
  • 内存16GB×2 32GB×2 DDR5 5600
  • 硬盘:1T + 1T SSD
  • 接口:USB3.2 Gen2、USB3.2 Gen1×2、USB 2.0(隐藏式)、雷电4、HDMI 2.1、耳麦口、RJ45网口、SD卡、TGX显卡扩展坞

ThinkBook 16+ 2024 U7

选择它是因为除了有双内存、双硬盘插槽外,它的接口也挺丰富的,TGX倒感觉是个亮点,要玩大型游戏的话,可以外接显卡,虽然我不玩游戏。还有那个隐藏式的 USB 2.0接口,键鼠如果需要插 USB 连接器的话,突出来看着很不舒服,把它放在隐藏式USB中,就避免了这个问题。对于这个本子唯一不满意的地方就是全键盘,其实小数字键盘区对我来说真没什么卵用,根本用不上。

购买链接:ThinkPad联想笔记本电脑ThinkBook 16+ 2024 AI全能本 英特尔酷睿Ultra7 155H 16英寸 32G 1T 2.5K 120Hz

英睿达 32GB×2 DDR5 5600

我不喜欢电脑中安装一些开发环境,比如数据库、缓存服务等。早些年电脑中安装毒瘤数据库 Oralce,装上容易,卸载贼特么的麻烦,关键是还卸不干净。于是,这些环境能都装在虚拟机里,然后作为 Docker 容器运行,不用的时候也不会存在驻留服务。升级到 64G 之后,开两三个虚拟机,分别 8G 也不心疼,再也没有内存焦虑了。

购买链接:Crucial英睿达 64GB(32GB×2)套装 DDR5 5600频率 笔记本内存条 美光(原镁光)原厂颗粒

致态 Ti600 1TB SSD

对于盘符的分区,一直都是比较喜欢归类的,C盘系统盘500G、D盘应用盘500G、E盘数据盘1T。C就不说了,就是系统所在盘;D盘是安装一些软件,如浏览器、开发工具等等;E盘是数据,比如所有软件安装后,我都会把缓存路径改到E盘,一些项目源码、学习资料、游戏也都在这里。

购买链接:致态(ZhiTai)长江存储 1TB SSD固态硬盘 NVMe M.2接口 Ti600系列

绿联 140W 氮化镓充电器

之前的笔记本是Type-C充电线,一个充电头笔记本和手机都可以轮着用。再后来,笔记本、手机的电池健康度逐渐降低,轮着用勉强可以,但是一旦忘记了,那么其中一个设备必然扛不住,所以买了个多口的充电头。同时可以给笔记本、手机进行供电,当然,小功率的其他设备、如风扇、手环,也能同时供电,去客户现场办公一个头子就足够了。

购买链接:绿联140W氮化镓充电器Type-C多口PD快充头+240W双C快充数据线

NAS

笔记本是饭碗的话,那么 NAS 就是我的玩具了。其实最早接触这类本地存储应该是小米路由器R1D的时候,当时这款路由器内置 1T 的硬盘,可以离线下载、存储照片,不过也仅仅如此,不像现在 NAS 可玩性那么高。早几年就想买,无奈囊中羞涩,而且基本是群晖一家独大,所以忍住没买。这次还是因为政府补贴,而且新势力 NAS 的崛起,各种评价也都挺不错,都说绿联的是买硬件送软件,于是下手了。

  • 型号:绿联 DXP4800 Plus
  • 处理器:Intel 奔腾金牌8505 4.4GHz
  • eMMC:128GB SSD
  • 内存:8G DDR5,最大可扩容至 64G
  • 硬盘:SATA×4、M.2×2,最大容量 96T,原装无盘 12T×2、512GB SSD×2
  • 接口:Type-C Gen2、USB 3.2 Gen2、USB 3.2 Gen1、USB 2.0×2、HDMI、网口2.5GbE、网口10GbE、SD 3.0
  • 存储模式:RAID 0、RAID 1、RAID 5、RAID 6、RAID 10、Basi、CJOB

绿联 DXP4800 Plus 8G

购买之前在绿联的UGOS Pro体验版中感受了一下软件,UI很舒服,各种操作说明也是简单明了,上手轻松。虽然没用过群晖、威联通,从网上的图来看,相比之下,UGOS Pro还是好很多。不过它内置的应用偏少,为了凑数,把什么帮助中心也算作应用放上去。

体验过后,最终在绿联的DXP2800DXP4800DXP4800P中纠结了很久。DXP2800是双盘位,只能组 RAID 0和1,如果想组 5、6 那就没办法,还不如加 200 多两个盘位,4800 比 2800 也就多两个盘位。但是吧,既然都加了 200 ,为什么不多加点上个DXP4800 PLUS,处理器有升级,内存也能扩展更大。纠结的过程中后两个的无盘版都没货了,被迫选择DXP2800。不过第二天天助我也,虽然没货,但是是采购中,能下单,于是立马下单DXP4800 Plus后,退掉了DXP2800。下单后,我发现还能更便宜一点,PLUS价格、政府补贴就是标准价格,然后我又凑单买了个3000多的东西,用上了5000-400优惠券,整体下来比开始少了100多。

购买链接:绿联(UGREEN)私有云DXP4800 Plus 8G内存四盘位NAS网络存储

SAMSUNG 970 EVO Pus

之前的小米笔记本为了扩容硬盘,买了个型号为SAMSUNG 970 EVO Pus的 500G SSD 硬盘(我看了京东的记录,明明是买的 870 EVO,怎么成了 970???),卸下来之后可以作为 NAS 的 SSD 缓存盘。读和写要分开不同的盘,所以还需要一个 SSD 的盘,相同型号的盘已经停产了,于是去海鲜市场找找。运气真的不错,找到一个相同月份生产的,到手后就可以分别作为读写缓存盘使用。

希捷酷狼Pro 12T×2

作为 NAS 存储的核心,机械硬盘少不了,在京东看了下硬盘的价格,深吸一口气,贼特么的贵,远超出我的预算。希捷酷狼系列一个4T的盘,就要700多,组个 RAID 5,就是 2000+ 出去了。去拼多多看了看,全新的价格都差不多,虽然比京东便宜一点,但也便宜不到哪去。但是,多多很多店铺卖酷狼Pro系列,12T也才700出头,第一感觉就是骗人的。看评论都说盘没问题,是正品,官网也能查到,质保期到2027年至2029年不等,但是这些店买的是不能联保的,只能走店保,并且承诺店保三年,只换不修。这些盘肯定都是翻新盘,多多一贯的作风,保真不保新,我也问了多多官网客服,说店铺质保三年,但如果期间跑路了怎么办。多多的答复是放心购买,如果商家不处理,平台会负责售后。鉴于多多宇宙第一的售后风格,我选择相信。这也是我第一次在多多买那么贵物品,还是一次买两个,希望不要翻车

其他

家庭安全

某天老婆发消息给我说:“他们学校培训消防知识,买点消防器材吧!”,然后配着一张购买意愿调查表,防烟面罩、灭火毯、烟感器、灭火器,大概费用近3000元。我立马一个电话过去,告诉她别买,要买网上买,这种培训套路很多的。培训的消防知识可以听听,挺有用的,但是消防用品千万别买。这些穿着消防支付到处培训卖器材的,都只是普通的销售而已,不过是能说会道,和消防员扯不上任何关系,唯一有关系的就是消防器材。很多人都容易被忽悠购买器材,他们的器材基本都是溢价5-10倍卖出,而且一口一个网上的都是假的或者容易买到假的,又或者说自己是消防队员,要相信他们。总之,消防知识听听就好,讲的都是对的,买东西,算了吧。

购买链接:小米天然气卫士小米烟感卫士

其他的其他

各种其他乱七八糟的也买了一些,什么雨衣、电动车尾箱、纯牛奶等等,感觉这次双11把这几年没参加的都一次性给补上了。

莫名的限我额度?硬杠到底

作者 冰剑
2024年10月18日 22:20

我从小生活在湖南岳阳,这是一座三线城市,还在我读大学的时候,父母已经在小区对面给我买好了以后的婚房。但是计划赶不上变化,毕业后我就去了深圳拧螺丝,在深圳结识了现在的伴侣,婚后在武汉定居。而父母给我准备的房子,一直没能等到我给它装修的那一天,于是在五月份的时卖给别人了。

收款被冻结

在深圳拧螺丝时的工资卡是招商银行的,也一直使用至今,作为日常用卡,自然是这张卡来收取卖房的资金。收到后的第一时间,我就打算转入我老婆用于理财的银行卡,但是转不了,因为资金被冻结了。冻结了,我特么的一个电话就打给招行客服,她们也说不出一个所以然来,就是说是系统操作的,不是她们认为操作的。我说我着急用钱,救命钱,要做手术的,她们也无能为力,建议我先找别人借钱。我去他妈的,其实我也不着急用,就是不爽,发泄完之后就不了了之,三天后资金就被解冻了,也没有提醒。

莫名被限额

上个月月底,我需要支付一笔5W的费用,支付的时候提示我超当日限额,我用招行APP查询后发现我的每日限额是1W6,我这是招行的I类卡,给我限额1W6。APP下方还有我要调额,进去一看,提示已是最高。1W6,已是最高,呵呵哒。

第一次调额度

电话到招行客服,让我在APP中自行调整,我说调不了,已经是最高,最后告诉我只能去柜台进行调整。行吧,正好公司附近有一家招行网点,中午过去调整下额度。然后网点服务人员告诉我需要提供房产证明或者他行信用卡,我疑惑的问到,这是什么逻辑?她回答我说她们也没办法,这是银行的规定。因为我着急要支付出去,所以拿出中信银行的信用卡作为调额证明。我中信银行信用卡额度是6W9,按照她说的可以按照近三倍的额度调整,给我调整到了15W。因为我支付出去了,额度也调整了,这个事情告一段落,没有过多的纠结。

第二次调额度

这个月国庆回来后,我还有一笔35W的费用需要支付,目前的额度是不能手机上转账的,我也准备好了去上次的网点柜台进行转账。但是,我忘记带身份证了,打电话给招行客服,咨询没带身份证能不能转账,答案是不能。我又问,能不能给我把额度提高,让说我的额度是89W,可以自己调整。于是我打开招行APP,看到还是15W的额度,客服说最好让我咨询下附近的柜台,说不定柜台可以操作。

第一轮

下午我打电话到上次的网点柜台,她们的答复是看到的也是89W额度,应该是可以自己调整的。于是我又和他们说,我自己调整不了,既然她们能看到我的限额,要求她们帮我调,她们说需要提供房产证明或者信用卡。一下子我的火就大起来了,决定杠到底,我说除了身份证其他的都没带,我下午需要立即转账。网点柜台把皮球提给开户网点,说建议我打电话去开户网点,开户网点的权限大一些,就说我在外地,没办法回去,着急要做大额支付。然后我就稀里糊涂的被她忽悠到成与开户网点battle,开户网点在深圳,找到她们的电话,开始battle。

第二轮

开户网点的柜台客服同样是要求提供房产证明或者信用卡额度,我说我不在深圳,她说可以拍照给她。然后我说我要求提高支付额度,提供房产证明或者信用卡才能提升,这个目的是什么?假设我没有房产或者不使用信用卡,我的额度是不是就被你们封死了。对方答复说解决不了,给我升级到主管处理。

第三轮

这一轮的主管并没有什么卵用,我发出同样的疑问,她解答不了。并且还质问她提升限额需要提供这些证明的法律依据或者是实施条款,很显然,她们都提供不了。顶多是提能够提供银行内部的一些要求,但是这些要求并不能作为依据,而且发出这些要求的肯定不是执法部门。同样的套路,她说会向领导反馈。

第四轮

主管plus出场,同样的话术重复了一遍后,她同样的不能给我答案,于是我最终提出我的要求:将我的限额提升到40W,除了身份证我不会提供任何其他证明,并且我不在深圳,只能提供电子证照,如果今天不能给我解决,我将会向你们总行投诉,总行不能解决,我将继续向12363进行投诉。主管plus说,会转达我的要求,她将会和领导进行沟通,一小时内给我答复。

第五轮

半小时后,还是主管plus,她说已经向主管plus max进行了反馈,按照我卡内的额度,在不提供证明的情况下,最多给我提高到30W。我拒绝了这个解决方案,坚持调整到40W,并且不提供任何证明。她说还是要去沟通,同样一小时内给我答复。

第六轮

十几分钟后,主管plus回电说主管plus max同意给我提升到40W,但是会在第三天后,给我调回至30W限额。我回答道,目前的问题已经解决了,但是长久的问题并没有解决。当前的诉求并没有结束,如果三天后你们给我调回到了30W,我将会继续进行投诉。对方表示会再去申请协调,并且说会在六点左右帮我调整,调整后立即生效,

结束

在当天六点半左右,我在没有提供任何证明的情况下将额度提升到了40W。事情办完的第三天,主管plus又打电话来了,告诉我说我的额度不会回调至30W,目前已经给我固定在了40W。

所以要说什么好呢,我知道限额的目的是为了反诈骗、反洗钱,我作为中国公民也完全理解和支持。但是,悄咪咪冻结我资金的时候那么干脆利落,我要求解除的时候却求助无门。限制额度的时候也没有任何通知就偷偷摸摸的降低了限额,在我需要提升额度的时候却要我提供莫名其妙的证明。银行要能够解释清楚倒也罢了,关键是从客服到主管,没有一个人能说出个所以然来,我个人认为这纯粹是为了推卸责任而提升办事门槛而已。

国庆三日游

作者 冰剑
2024年10月8日 18:56

十月一日的时候老婆吐槽说暑假也没带她俩出去逛逛。国庆期间更是不想出去,堵车、人海都是难题,但是老婆都这样么说了,那就别想那么多,出去再说。

大女儿喜欢三国文化,也曾答应带她去看看三国中那些耳熟能详的地点,之前去过赤壁古战场,这次就带她去荆州、襄阳看看。花了几个小时做攻略、做路线,最终决定下来一个三天两晚的线路游玩线路,但是实际执行的时候,多出来一天。

D1 武汉-荆州

为了避开出发高峰,五点钟就起来了,洗漱、收拾行李、把小孩叫起来等等弄完,出发已经是六点多了。她们可以在车上休息,但是晚出发10分钟,到达目的地可能就会晚20分钟。除了路上开车墨迹的人,基本都是畅通无阻,200多公里,九点左右到达目的地荆州博物馆。

荆州博物馆

荆州博物馆主要展示楚国文化,镇馆之宝西汉古尸让其声名鹊起。本来没打算让两个小孩看古尸,主要是害怕她们做噩梦,但我还是低估小孩子的好奇心,整个博物馆的展品来说,她们在古尸的地方是停留时间最长的。哪怕是喊她们去看别的展品,也跑回来继续看古尸。

事后查资料才知道这具古尸研究价值挺高的,它是迄今为止保存年代最久远、最完好的西汉男尸。它来自2100多年前的西汉,名字叫做“遂”,爵位为五大夫。出土的时候外形基本完整,皮肤、肌肉等软组织富有弹,血管清晰、内脏器官齐全,彷佛是刚刚入土一般。

关帝庙

博物馆浏览结束后,直接去了酒店,酒店就在古城内,去其他的景点还是挺方便的,步行十几分钟来到关帝庙。关帝庙始建于明洪武二十九年(1396年),清朝时期重修过两次,据史料记载,庙宇所在地曾是关羽守荆州时的府邸故基。这里地方不大,十来分钟都不到就逛完了,不过屁大点的地方还要收取门票,这事情不知道关二爷是否知晓。事后和老婆说,以后旅游景点有寺庙的地方,除非免费,否则不去,毕竟自己也不是信徒,没必要花钱凑热闹。

对于拜关羽,只是在港片中看到的居多,特别是古惑仔。本以为拜关羽只是黑社会成员敬重关羽的忠义,没想到关羽却是实实在在的道教神祇。最早是在唐朝,但当时关羽作为武神受到官方祭祀的时间极为短暂,进入宋代以后才开始有越来越多的祭拜者。

荆州古城

古城内共享电动车还挺多的,和老婆一人扫一辆车,带着小孩出发去古城墙。本以为这里可以逛吃逛吃,但是并没有啥好吃的,也没有什么好玩的,着实无聊。

D2 荆州-襄阳

楚王车马阵

“北有秦皇兵马俑,南有楚王车马阵。”楚王车马阵是这几天让我最为震撼的景点,该景点是一处考古遗址公园,是周朝楚王的陵园。根据楚王的世袭表进行计算,应该是楚昭王或楚惠王这个时期,这位楚王的陪葬车马也是要掉脑袋的规格。天子驾六、诸侯驾五,意思就是皇帝级别才能用六匹马拉车,而诸侯只能用五匹马。在车马陪葬品中,挖掘出来的天子架六马车有3辆,作为臣子诸侯,用顶配的架六马车,到底是天子的恩赐还是有其他的小心思呢?

  • 我在荆州,我爱祖国
  • 楚王主冢
  • 楚王车马阵
  • 楚王陪葬墓
  • 陪葬车马
  • 谷纹玉璧
  • 龙形玉佩
  • 错金戈𨱔

另外就是2000多年前对的玉器,做工精良超出我的想象,总感觉不像那个时期的产物。

盛世唐城

车马阵游览完,直接驱车赶到襄阳,在酒店休息了一个多小时,四点多才出发前往盛世唐城。本以为这地方不大,两三个小时就逛完了,结果逛到八点多,才逛了一半不到,主要是里面时不时的遇到表演,看一场表演20多分钟就过去了,再加上提前占位等待表演的时间,才导致根本逛不完。

盛世唐城是一个影视基地,电影《妖猫传》,电视剧《画江湖之不良人》、《梦华录》、《庆余年第二季》等作品都有在这里取景。《庆余年第二季》中三皇子被母亲揍的场景,在实地一眼就认出来了,拿出手机找到那一集,场景果然一模一样。

  • 盛世唐城
  • 承天之门
  • 遥望东市

D3 襄阳

古隆中

襄阳古隆中是这几天最坑的一个景点,攻略说过去古隆中玩还要爬山啊,有考虑过我一个胖子感受吗?爬上去就一个阁楼,这阁楼还有9层,上去后拍拍照坐着滑道就下来了。其他的经典给我的感觉就是各种忽悠,什么三国文化村寨,就几个雕像;六角井,不知道什么时候建的一口水井;躬耕田,就是国道边上常见的稻田;老龙洞,好歹也要有个洞吧?...反正各种不满意,一个景区常见的喊泉,编个故事说张飞喊过,然后老龙洞有水流出来。坑人,贼特么坑人。

  • 山顶腾龙阁

距离古隆中100多公里外的南阳,还有一个卧龙岗。这两个景点的官方都宣称自己这里是诸葛亮躬耕陇亩、刘备三顾茅庐地方。其实这个争论并不是现代才有的,早在清朝时期就已经开始了,至于谁才是正统,各有各的说法,不过明面上来说,还是襄阳盛胜一筹。

D4 襄阳-武汉

本来计划着古隆中游玩结束后直接回武汉,看下时间已经是三点,再看看路况,好家伙,原本不到四个小时的路程变成了五个多小时。于是直接导航到当地的万达广场饱饱的吃了一顿,然后附近找了一家酒店入住,第二天大早吃完早餐打道回府。

  • 安陆服务区

路况还不错,经过随州的时因为车祸堵了十来分钟。让小孩用手机拍摄走应急车道的车,为什么用手机呢?因为行车记录仪太渣渣了,看清车牌很吃力,手机+行车记录仪,妥妥的清楚。当天下午花了一个多小时,投诉了五十多辆车,全部受理,爽!

总结这几天,一共花费3000多点,没有超过预算,下次有机会继续。

外卖打包费的维权

作者 冰剑
2024年6月22日 19:18

苦逼的打工人,没带饭的时候就只能点外卖,秋冬天还好,可以去公司附近的商业街觅食,但现在天气炎热,恨不得一步路都不想多走。据说,我国每天外卖订单量高达2000万单,如此庞大的市场,难免会滋生一些不法的行为。

其中,打包费就成了某些商家非法获利的途径。并非说收取打包费违法,而是商家在每样商品都收取打包费的情况下,却没有提供相应的包装。说白了,就是收了你的钱,却没有提供应有的服务。

根据2013年10月25日第十二届全国人民代表大会常务委员会第五次会议第二次修正的《中华人民共和国消费者权益保护法》中,有如下规定。

第七章第五十五条规定
经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或者接受服务的费用的三倍;增加赔偿的金额不足五百元的,为五百元。法律另有规定的,依照其规定。

第七章第五十六条规定
经营者有下列情形之一,除承担相应的民事责任外,其他有关法律、法规对处罚机关和处罚方式有规定的,依照法律、法规的规定执行;法律、法规未作规定的,由工商行政管理部门或者其他有关行政部门责令改正,可以根据情节单处或者并处警告、没收违法所得、处以违法所得一倍以上十倍以下的罚款,没有违法所得的,处以五十万元以下的罚款;情节严重的,责令停业整顿、吊销营业执照:
(六)对商品或者服务作虚假或者引人误解的宣传的;
经营者有前款规定情形的,除依照法律、法规规定予以处罚外,处罚机关应当记入信用档案,向社会公布。

事件一

半个月前,我在美团直播中买了一份干锅排骨的消费券。进入店家开始点餐,除了一份干锅排骨外,我又额外点了一份热狗和一小瓶七喜。由于提前购买了消费券,最终这单外卖只花了3.51元。

商品价格(元)打包费(元)
干锅排骨43.81.0
七喜0.011.0
热狗0.90.6

外卖到手后,我发现只有两个包装盒,一个装着米饭,另一个装着菜品,当然,有一瓶300毫升的七喜。吃完后联系商家,说明问题,要求退我1.6元的打包费。

商家“好心”地告诉我,这其实是一种套路,怎么可能1分钱让我买饮料。我当然知道这是套路,并且也明确告诉他,这样的做法是违法的。但他却坚持己见,让我去找平台介入,如果平台支持我,就全额退款。我一听,顿时来了劲,立马联系了美团客服。结果可想而知,平台确认商家存在问题。然后商家开始耍赖,只愿意退回多收取的打包费。

找平台进行投诉,商家可能觉得我是个难缠的主,便向我道歉,表示愿意退款。我要求全额退款,他却说只能退还多收取的部分,否则就要亏损好几单。最后,我同意了他的方案,事情也就此告一段落。

当天下午,美团客服来电询问情况,我反馈了这个问题,并表示这并非个例,平台上大部分商家都存在类似问题,怀疑是美团和饿了么平台故意纵容。客服表示会进行整改。但半个多月过去了,我再次打开这家店铺,发现一切照旧,没有任何改变。

事件二

最近还有一次,我点了一份麻辣香锅外卖,最终支付了24.35元,其中打包费2.5元。除了套餐本身包含的1.0元打包费是正常收费外,另外1.5元都是无中生有的。最奇葩的是“微辣”这个必选项,选择口味居然还要额外收费1.98元,虽然明码标价,但我还是难以接受。更过分的是,一个口味竟然还要收取1.0元打包费,真是让人匪夷所思!

商品价格(元)打包费(元)
套餐23.891.0
菌菇豆腐3.80.1
排骨面3.50.2
小油条2.880.2
微辣1.981.0

找商家

吃完后,我立即联系商家,开门见山地指出他们多收取了打包费,要求退还多收取的1.5元。商家却辩称打包费不是他们收取的,而是平台收取的,而且其他商家都是这么操作的。我对此感到十分纳闷,平台又没有提供打包服务,凭什么收取打包费?而且其他商家这样做,也不代表这种行为是合理合法的。

找美团在线客服

我联系上美团客服,并将与商家的聊天记录发给他,要求按照消法规定,赔偿多收取服务费的三倍费用,共计4.5元。但客服表示,在他的职责权限范围内,只能退还多收取的1.5元费用。我表示无法接受,要求他向上级客服反馈。客服答应帮我反馈,并备注我要求赔偿三倍费用的诉求,也就是73.05元。

美团高级客服找我

当天下午,高级客服联系了我,在我打断她一连串的客服术语后,她才询问我的诉求。我表示要求按照购买价格的三倍进行赔偿。她计算了一下,得到73.05元的赔偿金额后,脱口而出“好家伙”。听到这句话,我反而有些不自信了,难道应该按照最低标准500元来赔偿?之后,她表示自己没有权限处理这么高的赔偿金额,需要反馈给更高级的客服。

听到这里,我顿时火冒三丈,质问他们到底有什么权限?每次都说没有权限处理,只会搬出一堆客服术语。最后,我告诉她,可以再向上级客服反馈,但这是最后一次机会。如果还是无法处理,我将按照消保法的最低标准500元进行索赔,必要时还会向当地市场监督管理局进行举报。

不出所料,对方又搬出了一堆客服术语,最后表示不希望我向第三方平台投诉,会尽快反馈给更高级的客服进行处理。

美团高级客服Plus找我

两天后,高级客服Plus才联系我,表示已经尝试和商家沟通,但商家态度强硬,拒绝配合处理。平台已经通知相关监管部门介入,并表示可以先退回我多收取的1.5元。我当然不同意,坚持要求73.05元的赔偿。对方表示会再次与商家沟通,并承诺在晚上九点前给我答复。

晚上九点前,对方果然来电了,但结果还是一样,商家拒绝配合。平台表示可以申请退回我的购买全款24.35元。我依然不同意,我的目的是要让商家认识到错误并进行赔偿,并让客服转告商家,如果继续拒绝配合,我将向当地市场监督管理局进行举报。客服表示会再次与商家沟通并转达我的意思,并承诺在第二天下午六点前给我答复。

这位高级客服Plus确实守时,下午五点半左右来电。他表示,商家一整天都没有接听电话,平台已经通知监管部门进行线下沟通处理,并再次提出由平台赔付我全款24.35元。我一开始不太愿意接受,毕竟我的目的是让商家认识到错误,而现在的情况是商家不仅没有意识到错误,还拒绝沟通。按照我之前的说法,下一步就应该向市场监督管理局进行举报了。但说实话,我还真没举报过,也怕麻烦,所以和客服拉扯了几句后,还是同意了平台的赔付方案。

最后

我相信,以后肯定还会遇到类似的问题,这已经成了外卖平台的潜规则,平台和商家都难辞其咎。但如果再次遇到这种情况,我肯定还会继续维权。

“苕”萝卜快跑

作者 冰剑
2024年6月18日 22:00

从 2022 年起,萝卜快跑已进入武汉经开区,目前已覆盖全城。行驶中偶尔会看到萝卜快跑的无人驾驶汽车,柠檬姐妹惊呼不已。她们对无人驾驶汽车颇感兴趣,我便向她们简要讲解了大致的原理。以至于以后看到路上有无人驾驶汽车,她们都会喊着有萝卜。我也答应带她们体验一回。

武汉本地人对萝卜快跑的印象褒贬不一,本地方言称为“苕萝卜”,“苕”的意思是“傻”。最常见的吐槽是,在上下班高峰期,萝卜快跑在车流中犹豫不前,导致堵车,交警也束手无策。

至于“苕”的程度,亲自体验便知。与其说带她们体验,不如说自己也想尝试一番。上上周末,我带着她们前往某商场,体验了一把未来出行的感觉。刚上车时觉得新鲜,但之后便觉得乏味,柠檬姐妹倒是对车上的平板爱不释手。整个体验下来,我并没有感受到有什么优势,反而存在不少的缺点,确实称得上“苕”。

费用

我体验了两次,分别是去程和回程,起点终点相同,但价格差异较大。去程原价60.61元,优惠后9.69元;回程原价102.08元,优惠后12.66元。造成价格差异的主要原因是路程不同,由此引出绕路问题。

  • 去程费用
  • 回程费用

绕路

选择的路线比较奇葩,既不是我常走的线路,也不是滴滴、高德打车推荐的线路,而且没有多余的路线供你选择。等候车辆时,我眼睁睁的看着它从对面的马路驶过,然后向前行驶了两条马路,再掉头返回。

安全

首先是刹车,对于汽车、电动车的突然变道或车道内调整,萝卜快跑特别敏感,曾急刹两次,导致姐姐和妹妹分别撞到额头。

安全提醒方面,去商场时,上车后点击“出发”按钮即可出发,但未系安全带时没有提醒。回程时,上车后迟迟没有反应,也没有出现按钮,半分钟后接到电话,提醒我们未系安全带。对于同样的平台,来回的安全提醒标准不一致,实在想不明白提醒的标准是什么。

我和姐姐系上安全带后,妹妹因年龄较小,安全带容易勒到脖子,感到不舒服,因此拒绝系安全带,我只能将她抱在身上。这时,客服又询问我中间位置是不是没有系安全带,但那里并没有人,而是放置了行李,可能是压力感应造成的。我将行李放在下方后,车辆才得以正常启动。

行驶途中,再次接到电话,询问是否有儿童未系安全带。我解释了原因后,对方却说叫车前有提示不建议儿童乘车,而我并没有看到提示。后来我才发现,确实关闭了一个长篇大论的提醒,类似于注册时的《XXXX 注册协议》,一般情况下,一百人中都不一定有一个人去看。

智障

由于绕路以及程序执行的限制,萝卜快跑经常做出礼让行为,傻傻的停在路中间不动,导致原本不到20分钟的车程延长至40多分钟。

下车时,更离谱的事情发生了。车辆已抵达目的地,我准备下车,却发现安全带无法解开。我尝试了十几秒,不管如何用力都解不开。于是,我点击平板上的“SOS 求助”,很快便接通了电话。我说明情况后,对方让我尝试将安全带拉到最长,然后钻出来。我心想,这特么不是为难我胖虎吗?不过,我也只能照做。

后来客服分析,能观察到萝卜后方有一辆出租车停在路边,可能造成了一定的影响。如果真是如此,那就有些令人担忧了,因为程序可以控制安全带的开启。如果有BUG,那会是一个灾难。希望这只是普通的机械故障。

总结

体验一下就可以了,真的要替代部分公共出行,还早得很。

畅想一下未来,如果路上的车辆都支持无人驾驶,汽车的加速、减速、变道等操作都交给车载 AI,再由 AI 对接城市大脑,各种操作做出提前协调,那么将不会出现堵车。

最后回想一下英国科幻作家道格拉斯·亚当斯的科技三定律:

  • 任何在我出生时,已经有的科技,都是世界本来秩序的一部分。
  • 任何在我15-35岁之间诞生的科技,都是改变世界的革命性产物。
  • 任何在我35岁之后诞生的科技,都是违反自然规律要遭天谴的。

我还是个孩子啊

作者 冰剑
2024年4月18日 15:03

我还是个孩子

“积木”,男孩子无法拒绝的一款玩具。虽然已经是两位小公举的父亲,但我内心还是一个孩子啊。几个月前入手了森宝积木流浪地球系列中的掠夺者无人机门框机器人,拼成后作为摆件爱不释手。

  • 掠夺者无人机
  • 门框机器人

随后又入了大号的CN171运兵车,还送了四个小的积木,分别是CN171-11箱式运载车CN373斗式运载车CN171运兵车CN171工程车

  • CN171运兵车
  • CN171-11箱式运载车
  • CN373斗式运载车

前段时间深圳举办了玩具展,我在又在抖音刷到很多积木的直播,喊得那叫一个热血沸腾啊。不能让他们白喊是不,于是又入手了星涯优品的赛博朋克版保时捷。为了让车动起来,还买了一套动力组积木。

这是第一次拼那么多、那么大的积木,前前后后断断续续一共拼了四五天。柠檬姐妹有时候也会帮忙提前把下一步甚至下面两三步需要的零件给找出来。总之,我们一起拼完了这个跑车积木,挺有成就感的。

  • 组装成功(还未贴纸)
  • 六缸发动机

面向死亡备份

继续之前日志中提到的面向死亡编程,花了一些时间写了几个程序,把内容备份到Github,然后自动发布。

sequenceDiagram
autonumber
participant github as Github Action
participant docker as Docker Images
participant bk as 博客主机
participant upyun as 又拍云
participant pages as Pages Server
loop 博客数据抓取
  github ->> docker: 定时调用镜像
  docker -->> bk: 连接数据库
  bk -->> github: 抓取数据并保存
  github ->> pages: 生成静态资源推送
end
loop 图床数据抓取
  github ->> docker: 定时调用镜像
  docker -->> upyun: 连接图床
  upyun -->> github: 抓取图床到本地
  github ->> pages: Git Commit
end

大致流程如上,利用Github Action定时调用镜像服务,可以把日志、评论、链接、碎语数据和图床图片都采集到Github的仓库中进行保存,博客数据利用Hexo程序生成静态化页面,自动发布到Github PagesVercelCloudflare PagesNetlify Sites,当然,如果愿意的话,还可以更多。而图床的话就利用jsDelivr来进行外链,只要GithubjsDelivr不倒闭,能让我们一直白嫖,那就会一直存在。

快递得寸进尺

我们小区算是比较大的一个小区,常住人口20000左右,大部分都是业主,少有租客。小区两个菜鸟驿站,一个在北边,一个在中部,分别是两个快递老板瓜分,比如韵达、中通在北边拿,极兔、申通、圆通在中部拿。我的收件地址一直都是写的家里的地址,从来没有给我送上门过,当然,我也理解这几年的快递包裹剧增,不送就不送呗,对于不送上门这件事,我也只是保留我投诉的权力。

上个月,在中部的菜鸟边上多出来一个圆通妈妈的驿站,好家伙,我要拿快递,本来跑两个地方就够恼火的了,现在又多出来一个。不过好在它在中部菜鸟的边上,顺路的事,我也就忍了。

过了几天又出现一件事情,我彻底的爆了,如果不是在淘宝买的东西,放在圆通妈妈,在菜鸟驿站的APP根本就看不到取件码。我过去要求圆通妈妈解决这个事情,要求在菜鸟驿站中看到圆通妈妈的所有取件码。他们说可以关注公众号,有快递了会推送消息。

我去你妈的,我拿个快递跑三个地方,还要先在不同的地方看有没有快递?其实之前中部的菜鸟就出现过这个问题,我的快递件在菜鸟APP看不到,他们说要关注其他的公众号,我拒绝了,后来又出现一次,还是让我关注,我直接菜鸟客服举报,过了两天,中部菜鸟就老实了,公众号的二维码就撕掉了。所以这次我也不可能再去额外多关注一个公众号。最后提出我的诉求,要么能够在菜鸟APP看到圆通的取件码,要么把东西放在中部菜鸟驿站。他们表示这两个都不同意,圆通的只能放在自己的驿站。

因为我一直留的就是家里的地址,于是举报他们没有按照要求配送到指定地点,圆通客服说24小时给出答复。第二天,涉事驿站的老板联系到我说让我给出手机号,后面我的件都不入库,给我送上门。我给出我和老婆的手机号,给出我家地址,以后圆通的就直接送上门。我家门口有可视门铃,所以也不怕会丢件什么的。

他们快递、驿站老板之间的利益怎么弄和我没关系,我也不关心,我的诉求就是方便的取件,我可以给你方便,不按法律法规要求送上门,但是也请不要蹬鼻子上脸。一旦过头了,我不介意按照法律法规的要求来。

玩文字游戏?维权

作者 冰剑
2024年3月23日 10:57

起因

之前分享过几次通过合理合法渠道维权的经历,比如阿里云不给开发票对方全责玩失联。这次是因为在京东名为医安泰大药房旗舰店的第三方店铺购买药品,商品标题中描述是28片/盒。标价比市场价低了一些,之前买过近效期的低价药,于是问过客服,客服发过来这批货的生产日期截图,是去年的,临过期还有两年。可能是薄利多销吧,所以买了5盒装的。

  • 商品标题写着28片/盒
  • 标题之间还有特殊符号

维权

几天后拆开快递,发现都是7片/盒的规格,于是第一时间问客服,客服截图给我说,我买的就是7片/盒的规格。仔细看图,各种误导人的符号,于是就吐槽说他们在玩文字游戏,扯了几句后客服说给我退 40% 的费用。我大概计算了一下我之前购买的均价,回复客服说:“按照我之前购买的均价,基本是1.0-1.4之间,取中间价格,按照1.2一片,我要求退我 65% 的费用”。客服拒绝,这是我意料之中的事情,我回复说好的。

然后打电话给京东客服,让他们查看我和第三方客服的聊天记录,京东客服说我的诉求是不是要卖家退 65%?我说开始是的,现在不是,我要求仅退款不退货。客服说他这边处理不了,给我升级处理,48小时内回复。

第二天上午,京东客服给我回电,说商家确实有误导,对于我仅退款的诉求,可能有些麻烦。但是我是京东优质客户,京东来赔付所有费用给我。我同意了这个解决办法,毕竟我的诉求就是把钱要回来,当天下午钱就已经到账。

硬刚到底

本以为事情就结束了,但是在写这篇日志的时候,我又好奇的去看了下这家店铺的评价。首先,店铺整体评价是3.0,具体到每个商品,给差评的基本都是说卖家欺诈,标题规格与发货规格不一致,看得越多,代入感越强。有仅吐槽的、有怨自己没看清的、有选择投诉的。

看完这些评价,我打开京东,找到这个交易纠纷订单,重新开启维权。我要求京东关闭这家店铺,把买家的评价截图、商品标题的文字游戏都截图提交,还有店铺的营业执照名称与店铺名称不一致,我也不知道是否违规,一并提交。

第二天,给我解决方案的京东客服又给我致电,问我是不是还有什么问题没解决,看到我又把交易纠纷的订单给打开了。然后我继续表达我的诉求说:要求关闭这家店铺,他们属于惯犯,我提供的各种截图证据应该可以看出来,全部都是文字游戏,买家的评价无一不是吐槽说被骗了。店铺评价3.0分,个人认为不是它的评价是3.0分,而是默认好评的有3.0分而已。有的买家选择息事宁人,有的买家评论中破口大骂,我不知道我是第几个维权的,但我希望我是最后一个维权的人,我希望京东能关闭这家店铺。

京东客服答复我说他也很气愤,根据京东的规则,有同事会去调查情况,并会让他们先进行整改,如果不配合,才会对停止与他们的合作。

迟来的整改

事情发生有两个多月了,期间我也有事没事的去看一下内容有没有变。可能是中间有个春节吧,京东这边方面的效率还是挺低下的,直到上上周,我才看到店铺的商品名称、规格名称等信息才是正常信息。

虽然没达到最终目的,但也算是解决了不少的问题吧。

  • 商品标题写着7片/盒
  • 内页直接几盒

这家网店的实体药店在深圳龙华区(具体位置可以去京东店铺查看药品经营许可证的注册地址),网店都能玩一些心术不正的事情,不难保证实体店会怎么去坑人,耗子尾汁。

十七年

作者 冰剑
2024年2月5日 11:41

冻雨

活了三十多年,第一次听说冻雨天气。前几天的天气APP中出现冻雨一词,非常的好奇,还在群里分享了这个新发现。本以为只是天气冷、温度低,下的雨很冷而已。经过两天的冻雨落地成冰,我才意识冻雨还是与普通的降雨有很大的区别的。

冻雨(英语:Freezing rain)是0℃以下的过冷雨滴落于地面时,迅速凝结为冰的一种特殊降水现象。冻雨通常发生于地面温度0℃以下的天气情况,特别是在初冬和初春时节。在航空例行天气报告(METAR)中,冻雨现象的代码是“FZRA”。维基百科

搜索后才知道,其实早在2008年我就经历过一次,只不过那一次事件有个更加响亮的名字:2008雪灾。那年我在长沙读书,头一天坐车回到岳阳,第二天就看到白茫茫的一片,紧接着就传来在校的同学回不去了,封路了。之后我就很少见到我爸,因为他是抢险人员之一。

面向死亡

面向死亡编程,这是在@蜗牛看到的一个词,自从我母亲走了之后,也是我经常思考的问题。明天和意外,没人知道哪一个会先来,我会想着,如果我意外死去,家里我负责的大小事情老婆会弄吗?我的数字资产怎么办?我银行卡的钱老婆操办起来会不会各种困难?我死去之后是不是就完全从这个世界消失了?

人走了之后,家人会清理你所有的遗物,会发现一些他们可能不知道的事情。我也有想过,对于数字资产我会记录在小本子上,写清楚如何操作能够得到。也会把银行卡密码记录着,尽量减少死后带来的麻烦。

十七年

上个月底收到一封定期邮件,提醒我博客已经十七年了。想想当初这个博客建立成功的时候,真的是激动又兴奋。从那个时候起,时不时的就会写出自己的日常生活、技术折腾等,当然,还有现在已经删完的转载内容。

在这十七年里,更新的频率越来越低,但它一直都是我生活的一部分。它记录了我的成长、经历与变化,也记录着老朋友们在评论区的欢乐。经历过日更、周更、月更、年更,我会遇到写日志的瓶颈,因为觉得自己的生活并没有什么特别的。但每当想起还有个记录着我生活的博客,我就会觉得这个小小的博客真的它存在的价值。

结合面向死亡编程,计划会利用 Github Action 定期读数据库,将日志、评论静态化,只要 Github 不灭,那么我就会一直存在。

过年

没几天就要过年了,今天下班后就开始放假。今年是去老婆那边过年,其实对我来说在哪过年都一样,没多大区别,不管在哪,都回不到以前的过年的氛围了,更多的只是担心老爸。

想想小时候,过年就代表着有新衣服、有压岁钱、有烟花。能见到许久未见兄弟姐妹,带着他们一起炸泥巴、炸水塘。现在呢,衣服能穿就行、压岁钱只是为了回礼、禁止燃放烟花。而我们也都有了自己的子女,看着他们玩耍,就想到自己小时候。

Google AI,让 Typecho 也尝尝

作者 冰剑
2024年2月2日 18:07

2022年底,ChatGPT 推出后,就像病毒一样四处传播,AI 对话再也不是智障一般的体验,脑洞大开的博友们也尝试着把 AI 应用到博客中来。第一次看到对 AI 对日志的评论是在@蜗牛的博客中,觉得挺有意思的,但当时找不到能够白嫖的 AI,于是放弃了。

  • 部分效果展示

前几天看到一篇教程,在CloudFlare上配置下可以解决长城之外的内容,于是就可以开始折腾 Google AI 了。

使用说明

插件会利用到 Typecho 程序中的自定义字段,会创建一个名为gemini_comment的字段来保存评论内容,强迫症患者不建议使用。

激活后需要修改主题,在需要展示的地方加入<?php $gemini = Gemini_Plugin::comment($this); ?>代码,成功的话变量中就是评论内容。

下面给出当前主题的代码片段:

<?php $gemini = Gemini_Plugin::comment($this); ?>
<?php if ($gemini) : ?>
  <div class="comment-ai">
      <div class="comment-ai-header flex">
        <div class="comment-ai-left">
          <div class="comment-ai-icon"></div>
        </div>
        <div class="comment-ai-right">
          由 Google AI Gemini Pro 生成
        </div>
      </div>
      <div class="comment-ai-content comment-item-content">
        <?php echo $gemini; ?>
      </div>
  </div>
<?php endif; ?>
  • 后台设置

特别说明下,API KEY需要前往Google AI StudioGemini进行申请。但是,Gemini 服务仅开放部分地区,中国地区仅台湾省开放,建议使用漂亮国节点去申请。

另外,如果你的服务器在可用地区范围内,那么使用默认的接口地址即可,非可用地区,需要设置自定义接口地址,这里提供一个免翻的地址gemini.baipiao.io,替换掉generativelanguage.googleapis.com即可。毕竟不是自己的域名,可以的话最好是利用 CloudFlare 来搭建一个。

注意事项

  • 部分操作需要科学上网,建议使用漂亮国节点;
  • 没有AI评论的日志,首次进入会较慢,具体等待时间与服务器的网络或超时时间有关;
  • 整个博客初始化,不用刻意去把每篇日志进行请求,这个可以交给搜索引擎的蜘蛛爬虫,基本一天左右就可以被爬完;
  • 进入日志编辑页面,找到gemini_comment自定义字段,可以进行编辑或者删除,删除后加载页面会重新生成。

下载地址

大女儿的一些事

作者 冰剑
2024年1月14日 23:08

阅读习惯

在老婆长期地努力下,大女儿渐渐地也有了一些阅读习惯。睡前、泡脚时,甚至一个人玩觉得无聊的时候,她都会抱着从图书馆借来的书,认真地阅读。

自从给她推荐郑渊洁的《魔方大厦》开始,对郑渊洁的书籍爱得不得了。《鲁西西传》、《皮皮鲁传》、《舒克与贝塔》等等,看完一本又一本,还开始主动寻找郑渊洁的其他童话作品。

因为她才二年级,给她借来的书籍基本都是带拼音、带图画的,或者是漫画类型,对她养成阅读习惯很有帮助。而在上次一起去图书馆的时候,她发现了另外一本《魔方大厦》,她问我这本书为什么那么厚,那么多字。我回答道,这里面讲的也是魔方大厦的故事,只不过比你之前看的描述得更加丰富、更加精彩。本以为她只是问问,但她却和我说想租这一本。我再三和她确认到,这本书文字很多,没有拼音更没有太多的图画,看起来可能很枯燥。她说没事,我可以尝试着看下,字我也大部分都认识,不需要拼音。

于是,她又开始尝试阅读纯文字的书籍。只不过效果确实不怎么样,没有图画、没有拼音,对她来说还是有些吃力的。好在是她的阅读习惯逐渐地养成了,纯文字的阅读是迟早的事。

跆拳道

2020年的暑假,小区商铺的跆拳道道馆举办活动,医生、护士、教师、军人的子女可以免费学习20节课。老婆正好是教师,自然而然地给大女儿白嫖了这次机会。道馆虽然让我们白嫖了20节课,但也让我们付出了更多。是的,从那以后,大女儿就一直在学习跆拳道。

从白带到白黄带过程中,兴趣非常之大。但从白黄带跳级到黄绿带后,出现了很多人遇到的问题,哭闹着不肯去学,问她为什么,她说太累了、教练太凶了(被骂哭过一次)。每到要上跆拳道课的时候就开始哭闹,一副被打都不愿意去的表情。我自己怀疑过,强制让她坚持不喜欢跆拳道是不是错了。原来一周两节课,变得只有每周一节课,甚至一周都不去,这种状态持续了两三个月,期间还错过了一次计划内的考级。我最后还是和她做了一个约定,和她说:“如果你真的不想学,你要自己去和教练说,并且要教练退学费。”她说:“不敢”。我回答道:“那是你的问题。”在我的引导下,她还是主动去和教练说了,最终的解决办法是,教练同意退学费,但是有个要求,就是要打赢教练。我和教练的计谋得逞,一直到现在,她都再也没说过不想去训练的事。

昨天,她又一次地参加了考级,70分通过,90分跳级,对于她通过考级是绝对没问题的,跳级才是她的目标。而她的努力也没有白费,94.5分顺利地让她跳级成功,升级到了绿蓝带。宣布结果的那一刻,她回头望着我,眼睛里都是玩具的模样(答应她跳级成功买玩具)。

最初的目的就是想让她锻炼身体、增强抵抗力,而现在的目的就是防止她以后在校被霸凌、在外能保护自己,也让她能够知道对一件事情的坚持,是多么有意义、有成就感的一件事。

唐诗宋词

在中国,每个人出生后的两三年,少不了被灌输一些并不理解的诗词,我家两位宝贝也是这样。去年七八月份在电影院观看了《长安三万里》,对立面提到的长安、诗词都挺感兴趣的。我和小女儿也趁着大女儿的热度,一起把我小时候背不出来的《将进酒》给记住了。几周前她开始哼哼歌曲,询问下才知道她在唱《将进酒》,是一位诗人(不记得名字了)唱的,于是我找出由凤凰传奇唱的《将进酒》,听后她立马上头,第二天让我把将进酒打印出来,她要和几位同学在六一儿童节演唱这首歌,可是这才一月份啊。

趁热打铁,在《经典咏流传》的节目中找出了一些它们熟悉的诗词,换一个角度来让他们欣赏它们学过的诗词,也许会有意想不到的效果。

将 Typecho 迁移至 Docker

作者 冰剑
2023年10月31日 12:06

之前一直用的是宝塔面板来管理服务器,很多傻瓜化的一键操作,确实省心省事。但是这东西,用起来虽然方便,但是使用频率极低,一年半载下来,用不到几次。如果不关注相关的行业资讯,出了漏洞都不见得能够立即知道,发现的时候说不定为时已晚。

趁着这段时间不忙,可以重装一下服务器,改成 Docker 容器化部署应用。

Docker 容器

这个可以参考菜鸟教程,不同的操作系统(如CentOSUbuntuDebain等)安装也都差不多,跟着教程一步一步的走。

Nginx

建议先去 Docker Hub 中找到最新的 Nginx 版本,如nginx:1.25

Nginx 稍微麻烦一点,首先需要启动一个 Nginx,让其在容器内部生成配置文件。然后将配置文件复制出来,再关闭删除。

# 运行不带参数的 nginx
docker run --name nginx -d nginx:1.25
# 讲 nginx 容器内的配置文件复制到执行目录
docker cp nginx:/etc/nginx/nginx.conf /usr/local/docker/nginx
# 停止 nginx 容器
docker stop nginx
# 删除 nginx 容器
docker rm nginx

配置文件复制出来后,再执行带配置参数的运行命令。

docker run --name nginx --restart=always -p 80:80 -p 443:443 \
-v /etc/localtime:/etc/localtime \
-v /usr/local/docker/nginx/blog:/www \
-v /usr/local/docker/nginx/html:/usr/share/nginx/html \
-v /usr/local/docker/nginx/ssl:/etc/nginx/ssl \
-v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/docker/nginx/logs:/var/log/nginx \
-d nginx:1.25
  • --name容器名称(下面不在复述)
  • --restart=always开机自启动,失败的一直尝试重启(下面不在复述)
  • -p 80:80 -p 443:443映射 80 和 443 端口(下面不在复述)
  • -v /etc/localtime:/etc/localtime与宿主机时间同步(下面不在复述)
  • -v /usr/local/docker/nginx/blog:/www存放博客的路径
  • -v /usr/local/docker/nginx/html:/usr/share/nginx/html存放其他资源的路径,没有可以去掉
  • -v /usr/local/docker/nginx/ssl:/etc/nginx/sslSSL证书文件路径
  • -v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.confNginx配置文件
  • -v /usr/local/docker/nginx/logs:/var/log/nginx日志文件,不需要可以去掉

PHP

建议先去 Docker Hub 中找到最新的 PHP 版本,如php:7.4-fpm

docker run --name php-fpm --restart=always -p 9000:9000 -v /etc/localtime:/etc/localtime -v /usr/local/docker/nginx/www:/www -d php:7.4-fpm
  • -v /usr/local/docker/nginx/blog:/www与 Nginx 的配置路径要一致

由于 Typecho 需要用到pdo_mysql的扩展,所需需要在容器中安装上扩展。

# 进入容器内部
docker exec -it php-fpm /bin/bash
# 安装 pdo_mysql 扩展
docker-php-ext-install pdo_mysql
# 安装 pcntl 扩展,因为我的 Say 插件需要用到 pcntl_fork 函数
docker-php-ext-install pcntl
# 查看是否安装成功
php -m
# 退出容器
exit

MySQL

建议先去 Docker Hub 中找到最新的 MySQL 版本,如mysql:5.7

docker run --name mysql --restart=always -p 3306:3306 -v /etc/localtime:/etc/localtime -v /usr/local/docker/mysql/conf:/etc/mysql/conf.d -v /usr/local/docker/mysql/logs:/var/log -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
  • -v /usr/local/docker/mysql/data:/var/lib/mysql数据存储路径
  • -e MYSQL_ROOT_PASSWORD=password记得修改 ROOT 密码

Bridge 网络

现在三个容器都是相互独立的,我们需要把它们组合在一个网络中。

# 创建一个自定义的 Bridge 网络
docker network create typecho
# 将容器加入到新建的网络
docker network connect typecho nginx
docker network connect typecho php-fpm
docker network connect typecho mysql
# 查看网络情况
docker network inspect typecho

可以看到新建的网络中,三个容器都分别获得了新的IP,在同一个网络中,容器相互之间可以用容器名称来调用服务,如mysql

修改配置

Nginx

打开/usr/local/docker/nginx/conf/nginx.conf,将下面的配置粘贴至 http 内。

server {    
    listen 443 ssl;
    server_name digu.plus www.digu.plus;
    
    ssl_certificate /etc/nginx/ssl/digu.plus_bundle.crt; # SSL 证书
    ssl_certificate_key /etc/nginx/ssl/digu.plus.key; # SSL 证书
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        root   /www;
        index  index.html index.htm index.php;
        include /www/nginx.htaccess; # typecho 的伪静态
    }

    location ~ \.php$ {
        fastcgi_pass   php-fpm:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www$fastcgi_script_name;
        include        fastcgi_params;
    }
}

server {
    listen 80;
    server_name digu.plus www.digu.plus;
    rewrite ^ https://$http_host$request_uri; # 强制使用 https 访问
}

MySQL

mysql 的容器创建好了,再来创建数据库。

# 进入 mysql 容器
docker exec -it mysql /bin/bash
# 登录 mysql
mysql -uroot -p
# 输入 root 密码
# 创建数据库
create database typecho

Typecho

将typecho的相关文件放入/usr/local/docker/nginx/blog,因为我是迁移,所以直接修改config.inc.php配置。如果是全新安装,这访问http://xxxx.com/install.php

// config db
$db = new \Typecho\Db('Pdo_Mysql', 'typecho_');
$db->addServer(array (
  'host' => 'mysql',
  'port' => 3306,
  'user' => 'root',
  'password' => 'password',
  'charset' => 'utf8mb4',
  'database' => 'typecho',
  'engine' => 'InnoDB',
), \Typecho\Db::READ | \Typecho\Db::WRITE);
\Typecho\Db::set($db);
  • 'host' => 'mysql'因为都在同一个网络,所以只需要写容器名称即可

结束

# 重启三个重启
docker restart nginx mysql php-pfm

Typecho 迁移至 Docker,至此迁移完成。

熊孩子?熊家长?

作者 冰剑
2023年8月18日 19:23

前段时间,家里丢东西了。也不算家里,是放在门口收集好的纸箱,不见了。

事情是这样的,大概九点钟,一家人从外面回来。半小时后,老婆说门口的纸箱怎么不见了,让我查一下是谁拿的。通过可视化门铃查看到是两个初中生样子的小孩拿走的,就在我们进门后的几分钟。然后我联系楼管,让他们帮忙查一下这两个小孩的情况。

第二天,楼管发消息给我说查到了监控。他们是坐电梯到楼顶,然后大概一个小时之后才出现在楼栋大厅的监控中,出去的时候,手中没有任何东西。

下午,楼管打电话给我说,他们找到对方小孩的家里了,是隔壁楼栋的。小孩说纸箱是易燃物,我们占用了消防通道,所以把纸箱都拿走了。他们这个出发点确实不错,只是做法不对。后面小孩也和我电话沟通了,我对他的出发点表示点赞,但是做法不对,他也给我道了歉。

本以为事情就这样结束了,结果楼栋业主群里面好几家都在说门口纸箱不见了。其中有家跟我大宝是同学,我私发消息给他们监控还有楼管的聊天记录,他们说放纸箱的婴儿推车也不见了。

这事情就有些蹊跷了,整个事情捋一下:

  • 20:56 我们回家;
  • 21:04 两名小孩从1楼坐电梯到34楼(我家30楼);
  • 21:09 两名小孩出现在监控中,并且带有手电筒,拿走了门口的纸箱,还翻了我的鞋架;
  • 21:11 两名小孩再次出现在监控中,又拿走了剩余的纸箱;
  • 21:53 出现在一楼大厅监控,手上没有任何东西。

有几个疑点:

  1. 带着手电筒,是不是专门来做这件事情的;
  2. 直接到楼顶,一小时后出现在一楼,这是没做电梯,直接扫楼下来的,是否刻意避开摄像头;
  3. 出门没看到纸箱,纸箱去哪了,是否刻意避开摄像头;

带着这些疑问,我又联系到了楼管。几天后楼管联系我说,她找了几次对方家长,对方家长拒绝沟通,也不让小孩沟通。

如果小孩真的是为了纸箱易燃、占用消防通道的原因拿走,出发点真的是好的。但是纸箱去哪了?邻居家的婴儿推车去哪了?这到底是他们计划好的,把东西藏起来了还是丢了,这都没个说法,细思极恐的事情。

后来楼管和我说,对方多次拒绝沟通,说让我们报警处理。我想想就算了,对我来说,纸箱没多大损失。只是那些纸箱是小孩自己收集拿来卖的,我们辛苦打包好放门口,有些可惜。这种事情可大可小,往小了说,他们维护消防通道的通畅,只是做法不对;往大了说,他们这是属于盗窃,带着手电筒,做电梯到顶楼,扫楼下来,纸箱不见了,刻意避开摄像头,有计划有目的的行动。

本来想着找家长问清楚事情的缘由,说清楚行为的对错,就没事了。既然家长对他们这种有计划有目的的行动不在意,那我在意干啥呢。

等着社会教育他们吧。

开车路上真危险

作者 冰剑
2023年5月21日 16:58

换工作后很少开车,也就是周末出去玩的时候开一开。平时上下班都骑小电驴,不是我说,真香啊。看着他们堵车,而我畅通无阻,舒坦。

昨天出去玩,开车路上遇到两件事,一件事刮蹭事故,另一件是恶意别车。路上傻逼真的太多了,怒路也不少,虽然开车的人多少有些怒路,但是有些行为不克制住,后面不堪设想。

隧道合流处刮蹭

在某隧道入口处,车辆较多,在排队等候,车道右侧也有明显的注意合流标志,我在辅道提前打开转向灯,等待并入主道。等候排队的队伍开始走动,我等待主道上的前车前进后,开始并入主道,后方的肇事车也没有提速紧跟车辆不让我插入的情况,于是我放心的并入。并入快完成后,对方车辆右前方与我的右后方发生刮蹭。

事故行车记录

遇到过几次事故,经验也丰富了,马上打开双闪,停靠在路边。对方是个女司机,双方查看损伤后,我和她说:“我个人主观认为是你的责任,你认不认同这个责任,如果不认同,我们就报警让交警处理。”“这个我认同。”“那你看是报保险还是私了?”“那我们私了吧”然后她打电话给保险公司的人,了解价格情况。这个时候隧道的管理员进来了,让我们拍照之后赶紧走。于是和她互加微信之后,各自离开了。这个时候麻烦的事情逐渐开始。

离开后大概半个小时,发消息给我说她问了保险公司,说是我变道全责,不同意私了,让交警来定责。我说没问题,明天有空,明天就去报警处理。这时我以为交警大队周末会有人值班受理,后来了解到,他们只有周一到周五工作时间才会受理。这特么就麻烦了。首先工作日受理,是个麻烦事,其次离我家还特别远。

微信上各种跟他说,我认定对方全责,最次我能接受对方主责。各种给她找相关的法律法规,证明我不是信口开河瞎说的,可是她油盐不进,一口认定找交警。虽然她要求交警定责的行为是她的权力,但是耗费工作日请假的时间处理这个事情,真的是麻烦啊。如果一开始就说要求交警定责,那么没任何问题,等着交警来处理就行,离开现场事后去处理,各种麻烦。我真的是谢了那位保险公司的狗东西了。

从相关法律法规来说,我真不觉得我有啥责任。而且我该做的都做到了,提前打开转向灯、缓慢行驶、不穿插等候车辆、等候交替通行。相关法律法规如下,也都发给她看了,她既然认定让交警定责,那就让交警定责吧,最后那个罚款我一定要提出要求。

相关法规

根据2004年5月1日施行的《中华人民共和国道路交通安全法》中第四章第二节第四十五条规定:

机动车遇有前方车辆停车排队等候或者缓慢行驶时,不得借道超车或者占用对面车道,不得穿插等候的车辆。

在车道减少的路段、路口,或者在没有交通信号灯、交通标志、交通标线或者交通警察指挥的交叉路口遇到停车排队等候或者缓慢行驶时,机动车应当依次交替通行

根据2017年10月7日修订的《中华人民共和国道路交通安全法实施条例》中第四章第二节第五十三条规定:

机动车遇有前方交叉路口交通阻塞时,应当依次停在路口以外等候,不得进入路口。

机动车在遇有前方机动车停车排队等候或者缓慢行驶时,应当依次排队,不得从前方车辆两侧穿插或者超越行驶,不得在人行横道、网状线区域内停车等候。

机动车在车道减少的路口、路段,遇有前方机动车停车排队等候或者缓慢行驶的,应当每车道一辆依次交替驶入车道减少后的路口、路段。

根据武汉市交管局2017年9月12日发布的湖北省实施《中华人民共和国道路交通安全法》办法中第八章第六十九条规定:

机动车驾驶人驾驶机动车有下列行为之一的,处警告或者100元罚款

(三)违反依次交替通行规定的

恶意别车

上面的事情是去的路上,这件事是回来的路上。单车道行驶中,两辆车插进来,前车技术不行,让第一辆车插入了他的前面,第二辆车想插入我的前面。我一贯的原则,想加塞进来,打灯是最基本的尊重,打了灯之后,看我的心情选择让或者不让。大部分情况下我会选择让的,除非让我觉得对方开车墨迹。我正常行驶,路权在我,压根不怕发生碰撞,毕竟经历过两三次了。

恶意别车

这个时候他开始了表演,连续三次急加速吓我,我就正常直行,紧跟前车。他见没办法加塞进来,就往前面去了。本来我以为这个加塞的事情就这样结束,好家伙,他在前面路边等着我。他开着窗户,我以为他要开始打嘴炮,谁知道等我的车路过他边上的时候,他突然变道过来,这个时候我就明白了,抖音上常见的恶意别车被我碰到了。这是个好机会,我加速行驶,他又变了回去,在我前面左右来回变道。我切换到运动模式(动力强劲一些),准备变道完成后直线加速,我老婆说让我慢点,前面的车有毛病。我想着车上还有老婆和孩子,于是又切换回舒适模式(动力比较缓和),正常行驶,并且拿起手机拨打110报警。我万万没想到的是,110也有占线的时候。事后连续拨打了两次,都是占线,直到第三次的时候才有人接听,而且态度不咋地。

言归正传,后面我变道对方也跟着变了两三次,一直到一个人行道出,他的速度加上急刹,把行人都吓一跳。在这之后,他就停止了别车行为。因为是单车道,我也只能跟在他后面行驶,一直到小区门口才发现,居然一个小区的,掉价啊。

举报

举报也是个麻烦事,武汉交警公众号中,并没有恶意别车的选项,上传的视频也仅仅只能上传60M。现在的摄像头,高清一点的动不动就是100+M,之前上传举报不文明行为的时候,视频真的是各种剪辑压缩,最后被打回说看不清车牌号。

线上不行,就只能线下,跑到路段负责的某中队,进去后有个交警告诉我说这个事情应该交通大队负责,让我去交通大队,他们只负责现场事故的处理。然后我打电话去交通大队咨询,对方告诉我应该这个中队负责,皮球踢来踢去的。

最后运气好,门卫碰到个领导出来,把我的事情反馈了一下。领导先看了记录仪视频,看完后说:“视频不长,不过确实是属于恶意别车,这个事情也确实不应该我们来处理,但是为了让你少跑,你可以把视频给我们,我们来帮你反馈。”然后我就进入中队把视频给了对接的交警,这个事情就告一段落,等着后面交警再联系我。

吐槽

还没学车的时候,我爸就告诉我,以后开车在路上,走自己的路,不要影响他人,我一直记得这句话。2015年拿到驾照后,就一直没碰过车,家里虽然有车,但那是我爸的车,自己开没信心,总怕磕了碰了。一直到2021年自己买车后,才开始正式开车,一直到现在,虽然真正的驾龄才两年半,但是也开了差不多快5W公里了。

开车也都是一直谨记走自己的路,不影响他人这句话,到目前为止,不算隧道这个事情,一共发生过4次事故。除了第一次是刚开车一个月不到,自己技术问题,在小区内对方乱停车,碰到我这个新手司机,最后没通过交警,沟通后各修各的。其他三次都是对方加塞,全责(刚刚才发现,去年有次代位追偿的事故是5月20日,昨天也是5月20日,真TM见鬼了)。个人认为,虽然我有些怒路,但是也算守规矩了。

后续

隧道的事故,各修各的,工作日请假去处理实在不想去,吃哑巴亏吧。

恶意别车,第二天交警中队就有人联系我,说人找到了。说当时他谈婚论嫁没谈拢,心情不好,真扯机霸淡。最后就是罚款,没扣分。

就这样吧。

Umami 升级至 V2

作者 冰剑
2023年5月6日 21:41

摸鱼时发现 Umami 早在三周前发布了 v2 版本,于是乎赶紧跟上。

更新数据库结构

因为 v1 和 v2 的数据库结构不同,所以需要对 v1 的数据库进行更新,具体操作如下:

备份数据库

这个不必多说,数据是无价的,对数据库动刀前,请一定一定一定记得备份数据库、备份数据库、备份数据。

升级数据库

git clone https://github.com/umami-software/migrate-v1-v2.git
cd migrate-v1-v2
yarn install
yarn build

migrate-v1-v2根目录下创建.env文件,内容如下:

# {connection url}替换为环境变量中的值
DATABASE_URL={connection url}

最后运行yarn start,看到如下内容表示正常结束。

更新 V2 代码

Umami Releases中获得最新的发布版代码,提交至你的仓库中,等待 Vercel 自动部署即可。

更新代码时,请删除目录中所有文件(不含.git),然后再粘贴 V2 的代码。

更换脚本

如果你使用的是默认脚本umami.js,则需要改为script.js,如果是自定义的,则需要把.js去掉。

变化

主要发现三个变化:

  1. UI变了,全屏铺开,并且中文字体看着比 V1 舒服太多太多,不知道是不是心理作用,感觉速度也略微快一些;
  2. 位置更加详细,V1 展示用户来源,仅仅只是再国家或地区这一级,而在 V2 中,可以展示省、市层级;
  3. 网页标题,以前只能看到网页URL,必须要打开网页才知道内容,现在可以直接显示标题。

最后,开始享受船新的版本吧!

阿里云不给个人账户开企业发票

作者 冰剑
2023年3月28日 16:07

记录与阿里云因不给个人账户开企业发票杠上的一件事。

事情起因

3月17日,因为项目开发需要,与公司沟通后,我买了阿里云最便宜的一款轻量应用服务器,60块/月,购买时使用的是自己实名认证过的阿里云个人账户。

临近月底,财务在群里催大家有报销的赶紧提交。想着还有个服务器要报销,于是登录阿里云,打算开出我那60元的发票。点进发票页面,发票抬头只有孤零零的“个人”选项,常见的企业却没看到,还以为是页面报错,刷了几次,还是那样。

寻求解决方案

在寻找解决问题方案的时候找到了如下的常见问题和动态公告,可以解释我的遭遇。

个人的类型为什么只能开具“个人”抬头?
如果您在阿里云账号认证为个人认证,消费系个人行为,没有公司财务入账或报销的需求,开票抬头只能为 “个人”。via

个人实名认证账号开票系统优化通知
阿里云将于2023年2月1日进行开票系统升级,届时默认仅支持开具与账号实名认证主体一致的发票,如您仍需开具企业发票,您可在开票前至账号中心完成企业实名认证升级后申请。给您带来的不便,敬请谅解,感谢您的支持!via

虽然看到相关说明了,但是认为这并不合理,于是发起工单咨询为什么不给个人开企业发票,是否可以特殊处理,得到的答复就是我上面找的信息。客服说只能企业账户并且通过认证的才能开企业发票,还告诉我:“根据《中华人民共和国发票管理办法》第二十二条规定任何单位和个人不得有下列虚开发票行为:(一)为他人、为自己开具与实际经营业务情况不符的发票;(二)让他人为自己开具与实际经营业务情况不符的发票。

看到这里我就火气来了,回复到:“管理办法中描述的两点,我违反了哪一点?另外我个人账户购买资源用于企业业务,是否违法?我个人账户购买后要求开具企业发票,是否违法?购买服务器的时候并没有任何提示说个人账户购买不能用作企业相关用途,是否有责任?”

也许是自知理亏,也许是不屑于我和互怼,让我留下联系方式,值班经理24小时内会联系我。

效率还是挺快,下午就联系我了,同样的话术又重复说了一次。这个值班经理也只会机械性的说只有企业账号才能够开具企业发票,建议我把个人账号升级为企业账号。我还举例说,你出差去酒店住宿,是否需要用企业银行卡刷卡支付才能够买发票?然后他还是机械性的回复,这种人不知道怎么当上值班经理的。

于是做最后的询问,是否不给我个人开具企业发票,得到的答复肯定的。

阿里云投诉

首先第一步是阿里云内部投诉,投诉响应就比较慢了,第二天才给我回复,可能是阿里云的投诉太多了吧。

阿里云给我的反馈就是建议升级企业账户,这点我拒绝。我也不想继续下去了,就直接问:“这是我的个人账号,不属于企业,我也不愿意升级为企业账号,在我不升级企业账户的情况下,阿里云是否不给我开企业发票?”“是的,先生。”“如果我提供与企业的关系证明和用途证明呢?”“还是不行的,先生。”“好的,谢谢,再见。”

因为有录音,最后面说的废话就是为了得到清晰且肯定的答复,证明阿里云不给我开企业发票。

税务局投诉

我屁民的身份他们爱理不理,只能找税务局投诉。投诉的方式有如下两种:

  1. 互联网投诉:应开具而未开具发票等税收违法行为检举(快捷通道)
  2. 电话投诉:(区号)12366,区号是公司注册所在地,如阿里云在杭州,那么就是0571-12366

杭州在信息化方面做的真的是不错,一个政务咨询电话,给人体验的感觉像是民企的那种客服,热情、专业。和客服小姐姐简单描述事情经过后,提供给他投诉企业的全名即可。我心想就这么简单?然后继续询问我有订单编号需不需要?小姐姐说有也可以。很快,投诉受理就结束。

阿里云受理

三小时不到,阿里云的人联系我了。说看到了我之前的工单诉求,可以走特殊通道帮我处理,但是需要我提供在职证明和企业授权书,上传到新的工单中,企业授权书按照他们的模板给企业盖章。当时我正在LOL团战😓,也没有细问,随口就答应下来。

事后查看工单,仔细看了下有些坑人,准备的资料一共有四份:在职证明、企业授权书、身份证(亲笔签名)、公司营业执照(加盖公章)。前两者还能理解,在职证明可以证明我与企业的关系,企业授权书可以证明企业授权于我购买服务。后两者就想不明白了,我就是为了开个发票,需要这些?

带着疑问,回复工单,要求他们说明身份证和营业执照的用途。他们的答复是“为了增强证明双方的身份的确定性”,意思就是这玩意只是为了增强证明,并不是必须的。我也懒得和他们继续扯,公司的财务和行政也给力,立马就提供了相关证明给我。

四份资料提交后,一天后才得到回复,回复内容让我又一次火气上升。居然还让我在企业授权书上签个名,我立马回怼,表示这是不必要的证明,而且原件丢了,没法提供。好吧,虽然原件还在,但是我就是不愿意提供。

过了一会,电话联系我说审核已经通过了,预计下午可以打印。所以说身份证、营业执照完全就是多余了,就是为了为难你。

完结

又过了两个小时,电话告诉我说已经处理好了,让我登录阿里云进行打印,有效期到4月1日。最终,在我的努力下,成功的拿到了发票。

另外阿里云的这种行为真的是令人恶心,美其名曰“阿里云会根据实际交易情况开具真实、合法、有效的发票”,首先你就抛开了实际交易情况,个人账户购买服务用于企业,也不是很常见的事情吗?特别是一些临时性的实验需求,个人购买太常见了。这种说法完全就是霸王条款,遇到较真的给处理,遇到怕麻烦的,阿里云这体量偷税漏税,那是一笔巨款啊。

这次虽然金额不多,但是维护了自身权益。

第一台电动自行车玩具小牛B2 Plus

作者 冰剑
2023年3月5日 16:12

之前的工作比较远,早起一点避开早高峰,开车40多分钟就可以到。最近换了一份新工作,离家近,8公里左右,开车50多分钟。对,就是堵,不是一般的赌,再一个就是办公楼的停车场不是免费的,所以只能放弃开车。考虑到还需要送小孩去幼儿园,于是搞一辆电动车就提上了日程。

在电动车普及的国内,我骑电动车的次数一只手就可以数的清。不看不知道,一看就懵逼,电动车真的是五花八门,要了解必坑的点也挺多的。品牌、电池、续航、售后等等,都需要了解。

海选

做了几天的攻略,了解到传统品牌:雅迪、爱玛、台铃等,互联网品牌:小牛、九号。首先,传统电动车肯定 Pass 掉,最终筛选下来了几款车型。

小牛B2动力版小牛F2智能版九号F90九号F60雅迪DM6
价格43994099474942994399
理论续航里程80KM90KM90KM85KM/
电池类型锂电池锂电池锂电池锂电池锂电池
电机金宇星/虹润/定制无刷电机定制无刷电机TTFAR
最高时速25KM/h25KM/h25KM/h25KM/h25KM/h
最大功率400W400W400W400W400W
电压48v48v48v48v48v
电容24Ah24Ah25Ah20Ah24Ah
充电时间<7h<7h<9.5h<8.5h<8h
制动系统前碟后鼓前碟后鼓前碟后鼓前碟后鼓前碟后鼓

决赛

雅迪DM6是因为做攻略的时候,看到过几次推荐DM6的,开始也是有些心动。但深入了解后,大家重点吐槽的地方就是售后问题,DM6是线上售卖的型号,线下门店不对它提供售后服务。有人去附近门店进行售后,说着这个是电商型号,不是他们这里买的,自己也太忙,让他们去其他地方。所以一旦出现了售后的问题,附近基本是没有门店可以去的,所以Pass。

九号F90和F60,是最早关注的型号,各方面口碑啥的也都不错,但是它旗下的配件,卖的那叫一个贵啊,而且在武汉地区提车还需要+300块,对比小牛来说,综合下来贵了很多,所以也Pass。

剩下的小牛,B2和F2,F2是21年的产品,B2是22年下半年出来的,本着买新不买旧的原则,选择了B2。事实上去门店试驾的时候,也没有体验出两者的区别,只是外观上来说B2也比较符合我的胃口,所以就是它了,小牛B2。其实线下还有一个版本,叫做B2 PLUS,它与B2的区别就是,普通版是短座位,PLUS的是长作为,价格相差100,最终以4499拿下我的第一台电动自行车玩具B2 PLUS。

小牛B2 PLUS

骑了100多公里,整体感受还行吧,毕竟之前也没骑过,没有什么可以对比的。

动力

骑行模式有两种,一个是运动模式,一个是长续航模式。店家的解释是说两者区别就是动力的输出的响应速度不通,不过再怎么样,也不能超过新国标的最高限速。魔高一尺,道高一丈,通过软解,最高限速可以达到45km/h,通过高德地图多次实测,也都可以达到这个速度。解除限速后,长续航最高25km/h,运动模式最高45km/h。

运动模式提速不太明显,个人感觉是很缓慢,绿灯起步的时候,同时启动,别人的车慢慢的拉开差距,而我的则会在几秒后慢慢的把差距缩短,由此可以看出动力输出挺一般的。

续航

官方宣称满电可以跑80km,我一直没有充满过,基本上还剩20%-30%的时候就充电4小时,大概可以道80%-90%,估算续航应该在60km左右。毕竟续航还和路况、驾驶人体重等因素有关,续航的总体满意度还行吧。

避震

没有对比过其他的电动车,个人感觉避震也挺一般,甚至隐约有些不如我的那自行车的前叉避震。

灯光

没有远光灯,近光灯的角度还行,亮度就一言难尽,车速慢近光灯没问题,如果车速跑起来,肯定是需要远光灯的。只有后转向灯,没有前转向灯,对于对向车道有车的情况,变道还是要注意安全,毕竟没有灯光提示。还有就是,打开转向灯,没有声音提示,有时候不确定是否关闭,还必须要看屏幕才能知道,很影响驾驶安全。如果能像汽车一样,打开转向灯就有鸣响提醒,那就好多了。

刹车

刹车感觉还行,前碟后鼓,45km/h的测速,估算5米的样子可以刹停。购车后才听到前碟有蹭碟的情况,门店老板说是正常情况,新车需要磨合,我也不知道是不是这样。至少这个情况在自行车总来说是有问题的,需要调整刹车片与碟片的距离。

总结

整体来说还算满意,如果能够更加优秀一点就好,不过一分钱一分货,5000不到买这个车,够了,反正我现在挺喜欢的。

另外备份一下小牛电动B2电动自行车 TDR57Z/TDR58Z 使用说明书奶牛快传

小柠柠是演技派

作者 冰剑
2023年2月27日 21:44

这段时间小柠柠总喜欢和我睡觉,枕着我的手,听我给她编故事。准备睡的时候她一直在被窝里动来动去的,我问她怎么了,她说身上痒。然后我就拿来身体乳,给她前胸后背都涂抹上。涂抹好之后,身体乳放好,刚躺下盖好被子,她又说小腿痒。然后又起床去拿身体乳,把她脚给涂抹上,想着干脆把手也涂抹上,因为有些够不着左手臂,稍微扯了下手腕,听到骨头响了一声,我也没在意。左手涂抹完后,准备涂抹右手,她半天不伸出来,然后就突然哭了起来。

问她怎么了也一直哭,完全不说话,看见她右手捂着左手腕,我才想到,会不会是刚才骨头响了,弄到她了。问了她以后,她缓慢的点头,表示是弄到手了。我心想不应该啊,我力道很轻的,应该不会弄到吧。我先看一下,怎么也都不让我碰左手,只能先把他哄睡。过了十来分钟,她慢慢的睡着了,我把手从她脑袋下慢慢的抽出来。再缓慢的去动一动她的左手腕,上下的动了一下,她睡着的脸立马就变成了哭脸。这下我就真的有些慌了,看来是真的弄到手了,这么碰一下都有反应。

把她哄睡后,又准备把被子掀开,再看看是什么情况。刚把被子掀开一个角,她就感受到了,开始哭了起来。好不容易再次哄睡,我拿出手机开始搜索,“骨折”这个词汇进入我的眼中,我开始也想到了,这么敏感,会不会是真的骨折了。于是我去把老婆喊醒,说了一下情况,准备带她去医院看看,免不了被她埋怨一番。

自己穿好衣服,老婆也穿好衣服,小柠柠衣服肯定是不能好好穿了,只能穿着一半,然后弄个毯子包着她。给她把衣服半穿好之后,老婆伸出手,手腕转了一圈,问小柠柠会不会做这个动作。小柠柠毫不犹豫的用那只“骨折”的手做出来,我不敢相信,走过去让她再来一次。看到她又顺利的做出来,我的心总算放下来了,这家伙一直都是在演啊。

还好只是虚惊一场。

碎语 - 基于Typecho的微博客插件

作者 冰剑
2023年2月20日 21:26

微博客是轻量化的博客,一句话的博客。饭否、嘀咕、腾讯微博、Twitter 都用过,唯独没用过新浪微博,当时就觉得它娱乐性太重了,不喜欢。微信朋友圈,圈子又不太对,很多事情都不方便发出。博客的内容又太长,自己太懒,一个月保证一篇就足够了,所以微博客最适合我。于是,自己动手,丰衣足食,折腾了一个基于 Typecho 的微博客插件碎语,效果请查看我的碎语页面

基本功能都已经完成,可以基于微信&企业微信发送文本、图片、位置、语音消息,后台还可以根据消息合并规则对消息进行合并,合并后可以形成图文、图集以及语音、位置的描述消息。

总的来说,自己够用,暂时不会有太大更新,有兴趣的自行折腾吧。

后台示图

撰写碎语

碎语管理

准备工作

说是准备工作,其实很多东西可有可无,如果全部都有,则是完全体,用起来体验也是最佳的。

  • 【必须】又拍云:用于存储图片、语音附件;申请地址
  • TinyPNG:用于有损压缩图片,基本不损失画质和感官;申请地址
  • 高德地图:用于支持地理位置分享;申请地址
  • 【推荐】企业微信:用于支持多种消息类型的发布渠道,自行创建企业和应用;申请地址

注意事项

  • 因为使用的是contents表存储数据,所以日志ID连续强迫症者请勿使用;
  • PHP环境需要支持pcntl_fork函数,不支持的话会出现图片多次发送的情况;
  • 附件(图片、语音)仅支持又拍云存储,不支持本地存储;
  • 使用语音消息会产生一定费用,如果每天发10条语音,每条语音一分钟,一个月的费用大概是1.14元,具体请查看又拍云云处理价格

下载地址

内含 Typecho插件、Chrome 插件和主题模板示例,其中主题模板示例大家可以参考模板的使用,在当前使用的主题下创建say.php文件,插件则会自动匹配主题文件。

蓝奏云 - 密码:4e3z

消息渠道

渠道文本图文图片图集语音视频链接
后台✔️
微信&企业微信✔️✔️✔️✔️

✔️:支持、❌:不支持、❕:可合并

消息合并规则

多条同类型或不同类型的消息合并到时间最早的一条消息。

  • 允许一条 text 与一条及以上 image 合并,类型改为 textpic;
  • 允许一条 textpic 与一条及以上 image 合并,类型改为 textpic;
  • 允许一条 text 与一条 location 合并,类型改为 location;
  • 允许一条 text 与一条 voice 合并,类型改为 voice;
  • 允许一条 text 与一条 music 合并,类型改为 music;
  • 允许多条 image 合并,类型为 image;

TODO

  • [x] 消息标签
  • [ ] 消息评论
  • [ ] 消息独立页面

更新记录

v1.1.0

  • 代码重构,使用原生数据表contents,不单独创建数据表;
  • 支持消息带有标签;
  • 增加支持网易云音乐链接;
  • 支持 Chrome 插件;

v1.0.0

  • 支持多种消息类型:文本消息text、图片消息image、图文消息textpic、语音消息voice、位置消息location
  • 支持三种消息状态(公开、私密、隐藏);
  • 支持管理后台发送文本消息;
  • 支持企业微信发送文本消息、图片消息、语音消息、位置消息;
  • 支持后台合并消息(具体查看消息合并规则
  • 支持又拍云存储图片、语音资源;
  • 支持 TinyPNG 压缩图片后进行存储;
❌
❌