在2024年的夏天,因为中考后的假期太闲,我又算是个比较爱睡觉(小睡)的人,所以基本上每天都处在睡着->醒来->睡着->醒来的循环中。有时候朋友们会找我帮忙,大部分都是发信息留言,很多时候我回复得不太及时。而直接打电话又显得有些唐突(实际上我觉得在大部分情况下打电话才是最好的沟通方式),所以我就抱着写着玩的心态 写了一个能让各位知道我睡没睡着的网页,分享给了我的朋友们,并且做成视频发在了B站上。
令我意想不到的是,这个项目受到了极大的关注,B站视频收获了近 8 万播放,博客文章的阅读量达到了 1.4 万次。但是在每天反复的操作中,我逐渐体会到了最初的项目存在的问题:使用原来的更新状态的方式并没有想象中的那么方便,由于我比较懒,上学后基本没再更新过状态。
我心里其实一直有个想法是将家里的智能家居的状态也分享出来,大家可以更全面地「视奸」我。我希望使用虚拟的智能家居设备作为开关来更新睡眠的状态,于是我决定开启一个全新的项目。写了近一个月,项目基本完工了。
网址: https://maao.cc/project-sleepy/
现在还在测试阶段,新项目的信息更加全面,包含了我家中所有智能家居的状态,例如灯的开关、音响播放的内容、环境光的明暗和温湿度等,以及我电脑上正在运行的程序。上个项目获得广泛关注之后,有人说看我就像看电子宠物,这回算是真彻底变成电子宠物了。
这个项目不仅能让朋友们更方便地知道如何联系我好,还能让大家一起监督我大晚上有没有开着灯熬夜。(当然我还是觉得打电话好)
Project Sleepy 也是我做过的最认真的开源项目,开源在 GitHub: https://github.com/maoawa/project-sleepy
这个项目的扩展 Sleepy Helper 也开源在 GitHub: https://github.com/maoawa/sleepy-helper
(可能打不开,打不开不用管)
我真的有非常用心的写各种配置和说明文档,并且让希望复刻这个项目的人方便修改。
目前功能已经基本完善了,我也想不到还能再添加什么。如果各位有什么建议或者意见,亦或者是发现了神秘小bug,欢迎留言或者联系我喵!
顺祝新年快乐!(虽然有点晚)
]]>{dotted startColor="#ff6c6c" endColor="#1989fa"/}
首先登入 AWS 控制台,打开希望启用 IPv6 的实例,转到实例绑定的 VPC
展开 VPC 的 Actions (操作) 菜单,点击 Edit CIDRs (编辑CIDR)
点击 IPv6 CIDRs 中的 Add new IPv6 CIDR (添加新的IPv6 CIDR),在弹出的选项卡中选择 Amazon-provided IPv6 CIDR block (由Amazon提供的IPv6 CIDR块),然后点击 Select CIDR (选择CIDR)
这样,VPC 就有了一个由 Amazon 提供的 IPv6 CIDR 块,如图
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
VPC 有了 IPv6 CIDR 块后,我们还要给 Subnet (子网) 分配 CIDR。回到希望启用 IPv6 的实例的控制台,转到实例绑定的 Subnet (子网)
展开 Subnet 的 Actions (操作) 菜单,点击 Edit IPv6 CIDRs (编辑IPv6 CIDR)
在 Subnet CIDR block (子网CIDR块) 中,点击 Add IPv6 CIDR (添加IPv6 CIDR)
点击Save (保存),这样 Subnet 就有了 CIDR 块
随后,需要给实例分配 IPv6 地址。再次回到希望启用 IPv6 的实例的控制台,展开实例的 Actions (操作) 菜单,展开 Networking (网络),点击 Manage IP addresses (管理IP地址)
展开网络适配器,如图
点击 IPv6 addresses (IPv6 地址) 中的 Assign new IP address (分配新IP地址)。可以选择自己指定一个 IPv6 地址,指定的地址需要在 Subnet 分配到的 IPv6 CIDR 中,也可以让 AWS 来 Auto-assign (自动分配)。随后点击页面底部的 Save (保存)
弹出选项卡二次确认,提示将会分配一个新的 IP 地址,这正是我们想要的。点击 Confirm (确认)
随后就会自动跳转回到实例的控制台,我们已经可以在这里看到实例已经被分配到了一个 IPv6 地址
最后一步是在路由表中新增一条规则,允许 EC2 正常通过 IPv6 与广域网通讯。转到 VPC 控制台,打开左侧的 Route tables (路由表),选中与之前的 VPC 关联的 Route tables,展开 Actions (操作) 菜单,点击 Edit routes (编辑路由)
点击 Add route (添加路由),Destination (目的地) 中键入 ::/0
(全部IPv6),Target (目标) 选择 Internet Gateway (互联网网关),在 Target 的输入框中输入互联网网关的 ID (以 igw-
开头,一般点击输入框,列出的列表中的就是),然后点击网页右下方的 Save changes (确认更改)
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
至此,我们就已经成功为 EC2 服务器分配了一个可用的 IPv6 地址。值得注意的是,分配IPv6 地址后可能需要更新一下安全组策略,确保需要的 IPv6 入站流量被允许通过。现在可以试试连接至 EC2,测试 IPv6 的连通性。
执行 curl -6 my.ip-addr.is
后,返回如下结果
CONGRATULATIONS! 现在这台 EC2 就已经能使用 IPv6 网络了,这篇教程至此圆满结束。
之前提到的 my.ip-addr.is 是我的好朋友 zkn 提供的一个服务,可以通过 curl 请求这个地址来获取自己机器当前的公网 IP 地址,具体用法如下:
curl my.ip-addr.is # 获取默认的 IP 协议版本的信息
curl -4 my.ip-addr.is # 仅获取 IPv4 信息
curl -6 my.ip-addr.is # 仅获取 IPv6 信息
ip-addr.is 是一个非常实用的工具站,可以查询自己的 IP 地址、IP 地址信息、域名与 ASN 的 WHOIS 信息、查询 rDNS 解析,国家顶级域名列表。网站界面干净简洁无广告,域名简单直接,便于记忆,使用方便,现在在我心里已经取代 DNSCHECKER,成为了我的首选工具。
<!DOCTYPE html>
<html>
<head>
<title>maao.cc</title>
<script>
var userLang = navigator.language || navigator.userLanguage;
if (userLang === 'zh-CN') {
window.location.href = '/cn';
} else {
window.location.href = '/global';
}
</script>
</head>
</html>
这样,访问首页就会自动判断,将用户引导至合适的语言。当用户的语言是 zh-CN
(简体中文)时,就自动跳转到https://maao.cc/cn 是其他语言时,就跳转到https://maao.cc/global
当然,如果识别出错或者只是想看看另一种语言的页面的话,我也做了一个区域选择器(Region Selector 有点模仿任天堂官网那意思): https://maao.cc/regionselector 因为一般来说大部分简体中文访问者不会打开这个页面,所以在这里我是把英文放在第一个。
同时,我也将常联系站(maao.cc)的境外流量接入了上一篇文章提到的Amazon CloudFront(详见 本站的境外网络访问优化记录 - 毛毛的梦 ),现在全球连接速度都嘎嘎快
IPv6(Internet Protocol Version 6),也被称为IPng(IP Next Generation),也就是下一代IP协议。
IPv6是当前主流IP协议IPv4的升级版本。(来自 知乎 )
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
经过一段时间的努力,现在已经成功让以下网站支持IPv4&IPv6和IPv6-Only网络访问:
- www.maodream.com | 检测
- paimon.org.cn | 检测
- api.maao.cc | 检测
- maao.cc | 检测
- mao.maao.cc | 检测
以下网站可以检查自己网络是否支持IPv6:
- test-ipv6.com
- testipv6.cn
- ipw.cn
贵阳市中考有一项是英语听力口语能力测试,总分30,计入中考分数。为了做好考试的准备,我们每周末都有一次练习,是手机上的软件,叫“ E听说中学 ”(科大讯飞的,七八岁的时候很喜欢的一家公司)
这个练习软件好是好,可是用手机的话必须时刻挂在前台,在电脑上用模拟器low了些,刚好最近对WSA子系统有些感兴趣,加上我电脑的系统是Windows11,干脆就趁这个机会尝试来配置一下Android子系统。
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
{alert type="info"}
以下步骤参考知乎用户“塞尔达斗恶龙”的文章:Windows 11 安卓子系统安装教程
https://zhuanlan.zhihu.com/p/637883437
{/alert}
打开微软商店解析工具: https://store.rg-adguard.net 输入 https://www.microsoft.com/store/productid/9p3395vx91nr
,在右侧下拉框中选择“Slow”,随后点击“✔”
解析出来后,拉到页面最底部,点击最新的后缀名为“.msixbundle”的文件,下载。因为是用的微软的服务器,下载速度算比较快。
下载完成后,在开始菜单中搜索“Powershell”,点击“以管理员身份运行”
打开后,执行 Add-AppxPackage <文件路径>
(例如 Add-AppxPackage "C:\Users\WinMEMZqwq\Downloads\MicrosoftCorporationII.WindowsSubsystemForAndroid_2310.40000.2.0_neutral_~_8wekyb3d8bbwe.Msixbundle"
) 开始安装WSA子系统
部署完成后,我尝试直接打开apk文件,但是并没有程序关联,WSA又是UWP程序,没法手动选择。 于是又回到塞尔达斗恶龙大佬的教程,才得知原来想在子系统中安装程序没有那么容易,需要用到adb工具。不过好在我有过一些Android开发的工具,有一些adb的经验,而且adb安装其实很简单,一句命令就能搞定。 写到一半发现,其实可以直接把安装包放进共享文件夹里,没必要像原教程里用ADB那么麻烦
首先打开“适用于 Android™ 的 Windows 子系统”
点击侧边栏中的“高级设置”,展开“实验性功能”,启用“共享用户文件夹”(如果你担心共享整个用户文件夹会影响宿主机中的数据安全,可以像我一样点击“更改文件夹”,并为子系统专门设置一个共享文件文件夹)
接下来,返回侧边栏中的“系统”,点击“文件”右侧的超链接图标。
此时Android子系统将会启动,耐心等待启动完成后(大约半分钟),会进入子系统中的“文件”应用(浓浓的AOSP风,熟悉的Google文件极客)
与Windows宿主机的共享文件夹就在根目录下的“Windows”文件夹中,打开文件夹,直接点击安装包安装即可。
安装完成后,就能在Windows宿主机的开始菜单中看到刚安装的程序了,直接打开,因为子系统刚才已经启动,所以再打开其他应用速度很快。
可以看到,子系统中的程序以窗口的形式独立存在,使用起来的感受就像原生Windows应用一样。
输入账号密码登录后,就能和在手机上一样参加练习了。
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
{alert type="warning"}
重要提醒:
联想Y7000P 2018款原装硬盘大概率为三星PM981(如下图)
由于苹果在生产Mac系列产品时没有采用三星的PM981(a)系列硬盘,所以苹果没有在macOS中提供对这类硬盘的支持,无法识别这类硬盘,强行在这类硬盘上安装macOS可能会导致安装卡在剩余14/12分钟。
当然,世上无难事,只怕有心人。针对这个问题,网上也有许多现成的解决办法,例如 PM981/PM981a安装黑苹果——第八版_pm981a补丁-CSDN博客 。不过这些方法还是一些偏方,不如直接把原装硬盘换掉,反正现在M.2固态的价格已经比几年前便宜很多了。
请在安装前确认自己设备的硬盘型号,具体方法可以去互联网上搜索: 必应 / 百度
{/alert}
EFI采用OpenCore
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
- 无法使用隔空投送
- 无法使用蓝牙
- 在macOS 14上无法驱动Wi-Fi
{cloud title="蓝奏云" type="lz" url="https://wwas.lanzouj.com/b03l3ehla" password="114514"/}
{cloud title="百度网盘" type="bd" url="https://pan.baidu.com/s/1jDxf3WrWZEf3iws46wfhXg?pwd=1145" password="1145"/}
]]>这两天生病在家,刚好闲着没事干,准备整个自动推送文章更新。推送方式上,考虑到访问我的网站的用户大多用的是手机,虽然邮件的推送成本极低,但是转化率不高。而且手机短信通知要比邮件方便一些,也有着不错的转化率,所以决定先开发短信推送,邮件推送先搁着。
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
现在的想法是用阿里云的短信发送接口。前端写一个页面,输入接收推送的手机号,发送验证码申请提交到后端,通过某种加密方式鉴权,鉴权通过后后端请求阿里云API发送短信。前端再输入收到的验证码,验证通过后把手机号写入数据库。
验证码短信的内容想好了,是:
{alert type="info"}
【毛毛的梦】验证码:6位验证码。您正在申请订阅文章更新通知。
{/alert}
等到每次文章一更新,就去阿里云发短信给数据库里所有的手机号。消息内容目前定下来是:
{alert type="info"}
【毛毛的梦】新文章更新,标题:标题。链接:链接
{/alert}
现在只是新建了个计划,开发也处于新建文件夹阶段,给自己定的完成时间是三周以内,慢慢写吧。
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
模板全部审核通过了,就等着开发了
目前进展:Python后端接口已完成
通知消息模板人工咨询工单回复了,说建议我在申请备注中提供一个完整的不带变量的模版示例,我只能说...瞎吗...
修改过后的验证码消息模板过了,但是通知消息模板还是没过,审核意见是什么“根据您提供的链接https://www.maodream.com/archives/,核实功能内容太少,无法判断实际内容
我的archives目录下是文章,我只是用这个链接合成一下,他不会把archives当做一个实际页面了吧...
验证码消息模板也没过,本来想用“您正在申请订阅「毛毛的梦」文章更新通知。”的,但是阿里云提示不能使用特殊符号,只能作罢。说实话有点小可惜,我觉得「直角引号」还挺好看的。
也想吐槽一下阿里云,为什么不直接禁止输入特殊符号,还要靠人工审核才提示,有点浪费时间...
短信通知的消息模板没通过审核,阿里云说是title变量的内容不明确,可我觉得原本写的“新文章:标题”挺明确的啊。没办法,只能修改成“新文章更新,标题:标题。”
新网站刚建起来,总要写点什么。一个网站的第一篇文章不需要有多惊艳,一件小事也可以作为成功的开头。刚好我家中的Ubuntu Server服务器内核该升级了,就简单记录一次内核升级操作吧。
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
电脑系统环境:Windows 11
服务器系统环境:Ubuntu Server 22.04.3 LTS
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
{alert type="warning"}
警告:内核更新操作具有一定风险,建议您在执行操作前备份好重要数据
{/alert}
开始之前推荐一个小众SSH软件: URLSSH 我个人觉得还算不错,有Mac和Windows版,界面很简洁。这家公司还有一个产品叫做URLOS,应该和宝塔面板差不多,我两年前就买过,有机会出个评测。
登录到服务器,查看内核版本。
查看内核版本有两种方法,最简单的一种是在刚登录SSH时的信息中查看:
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-87-generic x86_64)
加粗部分即为内核版本
或者在SSH中执行 uname -r
maomao@mao-server-gz:~$ uname -r
5.15.0-87-generic
加粗部分即为内核版本
执行 sudo apt update
更新软件包列表
执行 sudo apt install linux-image
在输出结果中找到最新版本匹配的内核,如 linux-image-6.2.0-35-generic
执行 sudo apt install linux-image-6.2.0-35-generic
输入Y继续
执行 sudo reboot
重启服务器,并等待服务器重启完成
重启完成后,重新登录SSH,执行 uname -r
查看新的内核版本
至此,升级操作完成。