在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
这两天生病在家,刚好闲着没事干,准备整个自动推送文章更新。推送方式上,考虑到访问我的网站的用户大多用的是手机,虽然邮件的推送成本极低,但是转化率不高。而且手机短信通知要比邮件方便一些,也有着不错的转化率,所以决定先开发短信推送,邮件推送先搁着。
{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变量的内容不明确,可我觉得原本写的“新文章:标题”挺明确的啊。没办法,只能修改成“新文章更新,标题:标题。”
我在家里有一台服务器,并且向电信申请了公网IP,请求提出后大约一周多就通过了。只可惜家庭宽带的公网IP是动态的,大约每周会变一次,专线有固定的IP,但价格高到吓人(十几万一年)。我就用家里的服务器当个nas顺便开个mc服务器用来和朋友们联机。根本没必要用到专线,于是就将就动态公网用着。可是IP每周变一次,自己修改又不及时又麻烦,于是我选择了一种叫DDNS的技术(参考: 简述DDNS和DNS区别_dns和ddns_gray.zhao的博客-CSDN博客 )。因为我不想买任何第三方的DDNS服务,于是决定自己动手,去网上找了个现成的py脚本: 【精选】阿里云上实现DDNS公网解析_阿里云ddns-CSDN博客 又因为要用到查询IP的接口,所以又自己搭建了一个。
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
接口地址: https://api.maao.cc/ip
返回格式: text/plain
请求方式: GET
{alert type="warning"}
警告:由于个人能力终究还是有限,无法保证API接口100%的可用性。如果您和我一样,使用IP接口来进行DDNS,我强烈建议设置备用IP查询接口。我不对任何由于API不可用造成的损失负责,但会尽力保证API的可用性。
{/alert}
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
请求地址: https://api.maao.cc/ip
返回结果:
{alert type="info"}
此处示例展示的是您当前使用设备的IP地址。由于API接口使用CDN加速,我建议您在接入接口前先使用 IP138 等工具查询自己的IP,并使用 IP归属地查询工具 验证接口返回的IP是否正确。
{/alert}
{dotted startColor="#ff6c6c" endColor="#1989fa"/}
header("Access-Control-Allow-Origin: *"); //允许跨域请求
header('Content-Type: text/plain'); //返回内容类型
$ip = $_SERVER['REMOTE_ADDR']; //获取远程计算机IP
echo $ip; //返回IP
]]>