From 4e8adcc4939ab100f4744af10c4b8fcf06ed0c78 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 9 Mar 2023 22:16:28 +0000 Subject: [PATCH] [U] Generate json --- content/generated/friends/friends.json | 2 +- content/generated/metas.json | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/content/generated/friends/friends.json b/content/generated/friends/friends.json index 3f61a6d..49a00b3 100644 --- a/content/generated/friends/friends.json +++ b/content/generated/friends/friends.json @@ -1 +1 @@ -[{"name": "Shu Lin", "twitter": "https://twitter.com/sauricat", "github": "https://github.com/sauricat", "blog": "https://shu-l.in/", "mastodon": "https://m.cmx.im/@sauricat", "avatar": "content/generated/friends/img/Shu Lin-avatar.jpg", "banner": "content/generated/friends/img/Shu Lin-banner.jpg"}, {"name": "\u804a\u804a", "github": "https://github.com/youquzhiji", "avatar": "content/generated/friends/img/\u804a\u804a-avatar.jpg", "banner": "content/generated/friends/img/\u804a\u804a-banner.jpg"}, {"name": "Kevin G", "twitter": "https://twitter.com/KevinGaojx", "github": "https://github.com/gaojunxuan", "blog": "https://terra-incognita.dev/", "avatar": "content/generated/friends/img/Kevin G-avatar.jpg", "banner": "content/generated/friends/img/Kevin G-banner.jpg"}, {"name": "Yuuta", "twitter": "https://twitter.com/NeoTrumeet", "github": "https://github.com/Trumeet", "blog": "https://blog.yuuta.moe/", "mastodon": "https://mastodon.yuuta.moe/@yuuta", "avatar": "content/generated/friends/img/Yuuta-avatar.jpg", "banner": "content/generated/friends/img/Yuuta-banner.jpg"}, {"name": "Patchy", "twitter": "https://twitter.com/PatchouliTDF", "github": "https://github.com/PatchyChan", "blog": "https://loft.mukiyu.moe/", "avatar": "content/generated/friends/img/Patchy-avatar.jpg", "banner": "content/generated/friends/img/Patchy-banner.jpg"}, {"name": "Menci", "twitter": "https://twitter.com/lcMenci", "github": "https://github.com/Menci", "blog": "https://men.ci/", "avatar": "content/generated/friends/img/Menci-avatar.jpg", "banner": "content/generated/friends/img/Menci-banner.jpg"}, {"name": "\u84dd\u82e5\u9ece", "mastodon": "https://mastodon.social/@lanruoli", "twitter": "https://twitter.com/lanruoliOwO", "avatar": "content/generated/friends/img/\u84dd\u82e5\u9ece-avatar.jpg", "banner": "content/generated/friends/img/\u84dd\u82e5\u9ece-banner.jpg"}, {"name": "\u9727\u96e8\u6842\u5b50", "twitter": "https://twitter.com/kirisamelev", "avatar": "content/generated/friends/img/\u9727\u96e8\u6842\u5b50-avatar.jpg", "banner": "content/generated/friends/img/\u9727\u96e8\u6842\u5b50-banner.jpg"}, {"name": "\u8c46\u8150\u7403", "blog": "https://tofuball.moe", "avatar": "content/generated/friends/img/\u8c46\u8150\u7403-avatar.jpg", "banner": "content/generated/friends/img/\u8c46\u8150\u7403-banner.jpg"}, {"name": "Ayu \u751c\u9c7c", "github": "https://github.com/ayuusweetfish", "blog": "https://ayu.land/", "avatar": "content/generated/friends/img/Ayu \u751c\u9c7c-avatar.jpg", "banner": "content/generated/friends/img/Ayu \u751c\u9c7c-banner.jpg"}, {"name": "Billchenchina", "twitter": "https://twitter.com/BillChen2001", "github": "https://github.com/billchenchina", "blog": "https://billchen.bid/", "avatar": "content/generated/friends/img/Billchenchina-avatar.jpg", "banner": "content/generated/friends/img/Billchenchina-banner.jpg"}, {"name": "\u828b\u5934 Leohearts", "twitter": "https://twitter.com/TaroLeohearts", "github": "https://github.com/leohearts", "blog": "https://leohearts.com/", "avatar": "content/generated/friends/img/\u828b\u5934 Leohearts-avatar.jpg", "banner": "content/generated/friends/img/\u828b\u5934 Leohearts-banner.jpg"}, {"name": "Sez", "twitter": "https://twitter.com/fiberate_Sez", "github": "https://github.com/Sezriv", "avatar": "content/generated/friends/img/Sez-avatar.jpg", "banner": "content/generated/friends/img/Sez-banner.jpg"}, {"name": "\u706f\u82b1", "github": "https://github.com/yisuidenghua", "blog": "https://\u8bfa\u827e\u5c14.\u6211\u7231\u4f60/", "avatar": "content/generated/friends/img/\u706f\u82b1-avatar.jpg", "banner": "content/generated/friends/img/\u706f\u82b1-banner.jpg"}, {"name": "\u7720\u6d32", "twitter": "https://twitter.com/usagiByTheShore", "avatar": "content/generated/friends/img/\u7720\u6d32-avatar.jpg", "banner": "content/generated/friends/img/\u7720\u6d32-banner.jpg"}, {"name": "Kiritake Kumi", "twitter": "https://twitter.com/nowkiritakekumi", "github": "https://github.com/KiritakeKumi", "blog": "https://niconiconi.us/", "avatar": "content/generated/friends/img/Kiritake Kumi-avatar.jpg", "banner": "content/generated/friends/img/Kiritake Kumi-banner.jpg"}, {"name": "Saukiya", "twitter": "https://twitter.com/SaukiyaSX", "github": "https://github.com/Saukiya", "avatar": "content/generated/friends/img/Saukiya-avatar.jpg", "banner": "content/generated/friends/img/Saukiya-banner.jpg"}, {"name": "kunihiro", "avatar": "content/generated/friends/img/kunihiro-avatar.jpg", "banner": "content/generated/friends/img/kunihiro-banner.jpg", "github": "https://github.com/Linoleum2609", "blog": "https://kunihi.ro/"}, {"name": "Vanilla", "twitter": "https://twitter.com/osu_Vanilla", "github": "https://github.com/VergeDX", "avatar": "content/generated/friends/img/Vanilla-avatar.jpg", "banner": "content/generated/friends/img/Vanilla-banner.jpg"}, {"name": "\u9ebb\u85af", "twitter": "https://twitter.com/Origamitamaran", "avatar": "content/generated/friends/img/\u9ebb\u85af-avatar.jpg", "banner": "content/generated/friends/img/\u9ebb\u85af-banner.jpg"}, {"name": "\u5b8c\u989c\u6f84", "twitter": "https://twitter.com/zsy123515", "avatar": "content/generated/friends/img/\u5b8c\u989c\u6f84-avatar.jpg", "banner": "content/generated/friends/img/\u5b8c\u989c\u6f84-banner.jpg"}] \ No newline at end of file +[{"name": "Shu Lin", "twitter": "https://twitter.com/sauricat", "github": "https://github.com/sauricat", "blog": "https://shu-l.in/", "mastodon": "https://m.cmx.im/@sauricat", "avatar": "content/generated/friends/img/Shu Lin-avatar.jpg", "banner": "content/generated/friends/img/Shu Lin-banner.jpg"}, {"name": "\u804a\u804a", "twitter": "https://twitter.com/youquzhiji", "github": "https://github.com/youquzhiji", "avatar": "content/generated/friends/img/\u804a\u804a-avatar.jpg", "banner": "content/generated/friends/img/\u804a\u804a-banner.jpg"}, {"name": "Kevin G", "twitter": "https://twitter.com/KevinGaojx", "github": "https://github.com/gaojunxuan", "blog": "https://terra-incognita.dev/", "avatar": "content/generated/friends/img/Kevin G-avatar.jpg", "banner": "content/generated/friends/img/Kevin G-banner.jpg"}, {"name": "Yuuta", "twitter": "https://twitter.com/NeoTrumeet", "github": "https://github.com/Trumeet", "blog": "https://blog.yuuta.moe/", "mastodon": "https://mastodon.yuuta.moe/@yuuta", "avatar": "content/generated/friends/img/Yuuta-avatar.jpg", "banner": "content/generated/friends/img/Yuuta-banner.jpg"}, {"name": "Patchy", "twitter": "https://twitter.com/PatchouliTDF", "github": "https://github.com/PatchyChan", "blog": "https://loft.mukiyu.moe/", "avatar": "content/generated/friends/img/Patchy-avatar.jpg", "banner": "content/generated/friends/img/Patchy-banner.jpg"}, {"name": "Menci", "twitter": "https://twitter.com/lcMenci", "github": "https://github.com/Menci", "blog": "https://men.ci/", "avatar": "content/generated/friends/img/Menci-avatar.jpg", "banner": "content/generated/friends/img/Menci-banner.jpg"}, {"name": "\u84dd\u82e5\u9ece", "mastodon": "https://mastodon.social/@lanruoli", "twitter": "https://twitter.com/lanruoliOwO", "avatar": "content/generated/friends/img/\u84dd\u82e5\u9ece-avatar.jpg", "banner": "content/generated/friends/img/\u84dd\u82e5\u9ece-banner.jpg"}, {"name": "\u9727\u96e8\u6842\u5b50", "twitter": "https://twitter.com/kirisamelev", "avatar": "content/generated/friends/img/\u9727\u96e8\u6842\u5b50-avatar.jpg", "banner": "content/generated/friends/img/\u9727\u96e8\u6842\u5b50-banner.jpg"}, {"name": "\u8c46\u8150\u7403", "blog": "https://tofuball.moe", "avatar": "content/generated/friends/img/\u8c46\u8150\u7403-avatar.jpg", "banner": "content/generated/friends/img/\u8c46\u8150\u7403-banner.jpg"}, {"name": "Ayu \u751c\u9c7c", "github": "https://github.com/ayuusweetfish", "blog": "https://ayu.land/", "avatar": "content/generated/friends/img/Ayu \u751c\u9c7c-avatar.jpg", "banner": "content/generated/friends/img/Ayu \u751c\u9c7c-banner.jpg"}, {"name": "Billchenchina", "twitter": "https://twitter.com/BillChen2001", "github": "https://github.com/billchenchina", "blog": "https://billchen.bid/", "avatar": "content/generated/friends/img/Billchenchina-avatar.jpg", "banner": "content/generated/friends/img/Billchenchina-banner.jpg"}, {"name": "\u828b\u5934 Leohearts", "twitter": "https://twitter.com/TaroLeohearts", "github": "https://github.com/leohearts", "blog": "https://leohearts.com/", "avatar": "content/generated/friends/img/\u828b\u5934 Leohearts-avatar.jpg", "banner": "content/generated/friends/img/\u828b\u5934 Leohearts-banner.jpg"}, {"name": "Sez", "twitter": "https://twitter.com/fiberate_Sez", "github": "https://github.com/Sezriv", "avatar": "content/generated/friends/img/Sez-avatar.jpg", "banner": "content/generated/friends/img/Sez-banner.jpg"}, {"name": "\u706f\u82b1", "github": "https://github.com/yisuidenghua", "blog": "https://\u8bfa\u827e\u5c14.\u6211\u7231\u4f60/", "avatar": "content/generated/friends/img/\u706f\u82b1-avatar.jpg", "banner": "content/generated/friends/img/\u706f\u82b1-banner.jpg"}, {"name": "\u7720\u6d32", "twitter": "https://twitter.com/usagiByTheShore", "avatar": "content/generated/friends/img/\u7720\u6d32-avatar.jpg", "banner": "content/generated/friends/img/\u7720\u6d32-banner.jpg"}, {"name": "Kiritake Kumi", "twitter": "https://twitter.com/nowkiritakekumi", "github": "https://github.com/KiritakeKumi", "blog": "https://niconiconi.us/", "avatar": "content/generated/friends/img/Kiritake Kumi-avatar.jpg", "banner": "content/generated/friends/img/Kiritake Kumi-banner.jpg"}, {"name": "Saukiya", "twitter": "https://twitter.com/SaukiyaSX", "github": "https://github.com/Saukiya", "avatar": "content/generated/friends/img/Saukiya-avatar.jpg", "banner": "content/generated/friends/img/Saukiya-banner.jpg"}, {"name": "kunihiro", "avatar": "content/generated/friends/img/kunihiro-avatar.jpg", "banner": "content/generated/friends/img/kunihiro-banner.jpg", "github": "https://github.com/Linoleum2609", "blog": "https://kunihi.ro/"}, {"name": "Vanilla", "twitter": "https://twitter.com/osu_Vanilla", "github": "https://github.com/VergeDX", "avatar": "content/generated/friends/img/Vanilla-avatar.jpg", "banner": "content/generated/friends/img/Vanilla-banner.jpg"}, {"name": "\u9ebb\u85af", "twitter": "https://twitter.com/Origamitamaran", "avatar": "content/generated/friends/img/\u9ebb\u85af-avatar.jpg", "banner": "content/generated/friends/img/\u9ebb\u85af-banner.jpg"}, {"name": "\u5b8c\u989c\u6f84", "twitter": "https://twitter.com/zsy123515", "avatar": "content/generated/friends/img/\u5b8c\u989c\u6f84-avatar.jpg", "banner": "content/generated/friends/img/\u5b8c\u989c\u6f84-banner.jpg"}] \ No newline at end of file diff --git a/content/generated/metas.json b/content/generated/metas.json index cb7a8c2..c8c8267 100644 --- a/content/generated/metas.json +++ b/content/generated/metas.json @@ -1,10 +1,11 @@ { "tags": [["技术", 1], ["日记", 2], ["测试", 1], ["测试2", 1], ["梦", 1], ["心理", 1], ["影评", 1]], "categories": [["置顶", 1], ["技术", 1], ["日记", 2], ["梦", 1], ["想想想", 1], ["影评", 1]], - "pins": [8], + "pins": [9], "posts": [ - {"id": 8, "title": "部落格索引", "subtitle": "按分类、标签检索", "category": "置顶", "pinned": 1, "file": "content/posts/Index.md", "tags": [], "date": "2023-03-02T06:07:31.597864", "url_name": "Index", "content": "TODO: 欢迎文案\n\n按分类检索:\n\n\n\n按主题检索:\n\n"}, - {"id": 7, "title": "用校园网搭建服务器!", "subtitle": "在宿舍折腾网络的一篇记录w", "tags": ["技术"], "category": "技术", "file": "content/posts/2022-01-30 Router.md", "date": "2022-01-30T00:00:00", "url_name": "2022-01-30-Router", "content": "# 用校园网搭服务器!\n\n欢迎欢迎!我是 UofT 的大一新生,这是我在宿舍折腾网络的一篇记录w\n\n## 1. 搭建 FRP 实现内网穿透\n \n\n\n## 2. OpenWRT 中继学校 WPA-EAP 网络实现远程重启\n\n搭建好内网穿透之后又遇到了新的问题——因为台式机服务器装的黑苹果配置不是很稳定,它有时候会整个屏幕绿掉,必须强制重启才行,应该是 kernel panic 吧。我不在宿舍的时候回宿舍重启又太麻烦了,如果可以远程重启...\n\n想起来之前摸鱼的时候看到向日葵有做过远程重启的设备,所以就去查了下,结果发现就只是一个智能插座,在主板上配置好插电自动开机就好啦。但是这又有一个问题——宿舍里所有的网络,无论是 UofT Wifi 还是 eduroam 还是有线以太网,都需要 WPA/WPA2/WPA3-Enterprise EAP PEAP MSCHAPv2 用户名+密码验证... 可是智能插座只支持简单的 WPA-PSK 密码验证。所以就需要一个可以连上外网、又可以开 WPA-PSK WiFi 的无线路由器了。\n\n刚开始,我想过几个不同的方案:\n\n### a. 用手机连 Wifi 开热点(失败)\n\n之前无意间发现了我的 Mi Mix2S (Android 11 EvolutionX) 可以边连 Wifi 边开热点,不知道是怎样实现的。所以我想,如果用旧的华为 Mate8 这样一边连着学校的 PEAP 一边开热点就可以了。但是开机之后,我发现 Mate8 的原生系统 Android 8 EMUI 8.0 并不支持同时连 Wifi 开热点。我听说用 VPN Hotspot 可以实现无线中继,下载试了下却发现没有 Root 就不能改 SSID 和密码,每次开的 SSID 和密码都是随机的。所以花了超级多精力解锁 BootLoader、刷 Magisk、然后发现 Root 之后也不能改无线中继的 SSID 和密码... 改完之后重开中继的 SSID 还是 DIRECT-{随机}-HUAWEI, 密码还是八位随机字符。不过还是试了下用智能插座连这个无限中继,只能赌无线中继不会重启、不会关机、不会被电源管理杀掉... \n\n结果是,在台式死机之前智能插座就先下线了,回宿舍看了一眼发现手机不知道为什么重启进 Recovery 了。失败失败(\n\n### b. 用手机连数据卡开热点(太贵了)\n\n然后想到如果可以再买一张手机卡只用来开热点就解决了嘛,但是发现这边不像国内那样 ¥10/mo 就能买一张卡,这边最便宜的流量卡要 CA$15/mo,换算出来要 ¥75/mo 了,够买一个路由器了(\n\n### c. 用路由器中继\n\n然后就是现在的解决方案啦,用路由器中继学校的 PEAP。首先要做的是买一个路由器,可是这边新的路由器也真的很贵,亚马逊上最便宜的 TP-Link AC750 要 $35 = ¥175... 所以去二手市场逛了逛,很幸运的看到了附近有人 $10 出路由器,一个 Netis WF2780 和一个小米路由 R4。\n\n首先试了 WF2780,但是它好像没接好 WAN 就完全不能用的样子,SYS 灯一直在闪,网线连上电脑也没办法获取到 IP,手动分配 IP 到 192.168.1.2 也进不去管理页面。可能是坏了吧,也可能这个路由器本来就是这样?不懂,下一个(\n\n然后试了 R4,可是用小米官方的固件,无限桥接模式并不能连上 PEAP 验证的 UofT Wifi 或者 eduroam,有线桥接模式把 WAN 口接上也提示识别错误。所以只能试试 OpenWRT 啦。\n\n### 1. 给小米路由 R4 刷 OpenWRT\n\n这里我跟了 https://www.wyr.me/post/619 这个教程,很轻松地就刷好了!\n\n在电脑上要做的事情:\n\n1. 网线连上路由器,登录管理后台(我是 http://192.168.31.1)\n2. 复制管理后台登录之后 URL 里面的 stok 参数\n3. 执行以下指令,输入路由器的 IP 和刚才复制的 stok\n\n```sh\ngit clone https://github.com/acecilia/OpenWRTInvasion\ncd OpenWRTInvasion\npip3 install -r requirements.txt\npython3 remote_command_execution_vulnerability.py\n```\n\n然后就有 ssh 啦!接下来用了这个固件:https://github.com/ioiotor/mir4-ss,下载 [openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin](https://github.com/ioiotor/mir4-ss/releases/download/V19.07.4/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin) 和 [openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin](https://github.com/ioiotor/mir4-ss/releases/download/V19.07.4/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin)\n\n4. 在电脑上执行以下指令:\n\n```sh\nmkdir temp\ncd temp\nwget https://github.com/ioiotor/mir4-ss/releases/download/V19.07.4/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin\nwget https://github.com/ioiotor/mir4-ss/releases/download/V19.07.4/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin\npython3 -m http.server\n```\n\n5. 登录进 SSH Shell 之后在路由器上执行指令:\n\n```sh\ncd /tmp\nwget http://{电脑 IP 地址}/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin\nwget http://{电脑 IP 地址}/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin\nmtd write openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin kernel1\nmtd write openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin rootfs0\nnvram set flag_try_sys1_failed=1\nnvram commit\nreboot\n```\n\n然后就好啦,重启之后就是 OpenWRT 了(虽然默认没有开 WLAN,所以只能网线连到路由器)\n\n### 2. OpenWRT 连接到 PEAP 网络\n\n登录上管理页面,改完管理密码之后,我试了直接把 wlan0 改成 client mode 去连学校的网,但是发现这里也只支持密码验证的 WPA-PSK 而不支持用户名+密码的 WPA-EAP。然后查了一下发现只要把预装的 wpad-basic 换成完整的 wpa-cli + wpa-supplicant + hostapd 就可以了。但是还有一个问题就是我的路由器现在没有网,所以不能在线安装软件包。我的解决方案是用电脑先连上学校的 WIFI,再把电脑的网线连到路由器的 LAN 口上,然后在电脑上开桥接模式路由器就有网了!\n\n之后,ssh 进路由器,执行以下指令:\n\n```sh\nopkg update\nopkg remove wpad-basic\nopkg install wpa-cli wpa-supplicant hostapd nano\nreboot\n```\n\n等重启好之后,管理页面里面 Wireless Security 那一栏的验证方式里面就有 WPA2-EAP 了!接下来把学校的验证信息填进去,然后保存就连上啦!UofT 的配置如下:\n\n```txt\nEncryption : WPA2-EAP (strong security)\nCipher : auto\nEAP-Method : PEAP\n...\nCertificate Constraaint (Domain) : radius.wireless.utoronto.ca\n...\nAuthentication : EAP-MSCHAPv2\nIdentity : 你的 UTORid\nPassword : 你的 UTORid 密码\n```\n\n接下来把 WIFI 配置一下,让智能插座连上这个 WIFI 就好了!"}, + {"id": 9, "title": "部落格索引", "subtitle": "按分类、标签检索", "category": "置顶", "pinned": 1, "file": "content/posts/Index.md", "tags": [], "date": "2023-03-09T22:16:14.703989", "url_name": "Index", "content": "按分类检索:\n\n\n\n按主题检索:\n\n"}, + {"id": 8, "title": "Snowy World", "subtitle": "一个 telnet 协议的 ASCII 动画", "file": "content/posts/2023-03-09 Telnet Game.md", "tags": [], "date": "2023-03-09T00:00:00", "url_name": "2023-03-09-Telnet-Game", "content": "\n\n写了一个 telnet 协议的 ascii 动画!(花了一整天又没什么用,但是好好玩ww\n\n用指令 `telnet hydev.org` 连接哦。记得用一个好用一点的终端,比如 kitty / iTerm2\n\n
\n \n 用 cool-retro-term 登录 ptt.cc 论坛的 telnet\n
\n\n昨天和鱼塔闲聊,从某紫底绿字网页聊到复古终端又聊到 telnet 论坛。这是我第一次见到 telnet 协议的论坛哇,连进 ptt 和水木论坛转了转,完全被五颜六色的字符画和各种小彩蛋吸引住了 qwq 决定我也写一个简单 ascii 动画放进我的小小角落...\n\n...然后就这样花掉了一整天 🌚\n\n刚开始用 python 两个小时写好了 telnet 监听、雪花、字符画、移动,简简单单地一层一层字符打上去,但是这样会让图层闪来闪去。然后改成了存 framebuffer 2d 矩阵,先把不同图层叠到缓存里再统一渲成一层命令行能懂的控制符,但是 py 矩阵遍历真的好慢好慢,用上 numpy 也依然非常慢,渲染一帧要 42ms。好像这个问题并没有解... 用 numba JIT 把遍历函数编译成二进制也只优化到了 16ms。无奈啊,可能方便的语言就是跑不快,借这个契机开始学 rust 了!\n\n
\n \n Python 渲染日志,一圈需要 45ms\n
\n\nrust 确实好不方便,因为不能有全局变量,用 struct + impl 强行模拟了 OOP 的对象,把全局全都写在 struct Main 里面 🌚。但是有时候又不能当作对象,遇到了比如可变指针借用的问题,把常量和变量分开存解决了,还有生命周期什么的,总之是好多写完了也没太学懂的概念。昨天折腾到凌晨五点 rua 完了,没想到同一个 2d 数组遍历只是用 rust 重写就只占用 0.12ms 了哇,350 倍啊 350 倍!\n(╯’ – ‘)╯︵ ┻━┻\n\n~~就此立 flag,以后新坑绝对不会再碰 python 了~~。明明同样是 O(n * m) 的代码居然会差这么多... 现实中优化算法常量也很重要呢\n\n
\n \n Rust 可变 &self 指针借用的报错\n
\n\n接下来想要把写完的命令行程序接到 telnet 协议上,可是 rust 没有做好的 telnet 服务器库,怎么办呢?先是试着用 tokio 手搓一个协议库,发现没办法读未缓存的原始键盘事件,去 SO 问了。之后尝试调用 c 的 libtelnet 库,跑起来到处报 SIGSEGV 呜呜呜。最后还是直接用 py 的代码开子进程做了一个中继,收到客户端的输入转发给 rust,收到 rust 的输出再转发给客户端... 意外地效果还不错。\n\n写完装进 docker 里面部署上去啦。花了一整天,但是学到了 rust,动画的效果也不错,总之很开心。写着写着有点想用这个框架写一个小游戏... 但是不太会游戏设计呢,再想想。"}, + {"id": 7, "title": "用校园网搭建服务器!", "subtitle": "在宿舍折腾网络的一篇记录w", "tags": ["技术"], "category": "技术", "file": "content/posts/2022-01-30 Router.md", "date": "2022-01-30T00:00:00", "url_name": "2022-01-30-Router", "content": "欢迎欢迎!我是 UofT 的大一新生,这是我在宿舍折腾网络的一篇记录w\n\n## 1. 搭建 FRP 实现内网穿透\n \n\n\n## 2. OpenWRT 中继学校 WPA-EAP 网络实现远程重启\n\n搭建好内网穿透之后又遇到了新的问题——因为台式机服务器装的黑苹果配置不是很稳定,它有时候会整个屏幕绿掉,必须强制重启才行,应该是 kernel panic 吧。我不在宿舍的时候回宿舍重启又太麻烦了,如果可以远程重启...\n\n想起来之前摸鱼的时候看到向日葵有做过远程重启的设备,所以就去查了下,结果发现就只是一个智能插座,在主板上配置好插电自动开机就好啦。但是这又有一个问题——宿舍里所有的网络,无论是 UofT Wifi 还是 eduroam 还是有线以太网,都需要 WPA/WPA2/WPA3-Enterprise EAP PEAP MSCHAPv2 用户名+密码验证... 可是智能插座只支持简单的 WPA-PSK 密码验证。所以就需要一个可以连上外网、又可以开 WPA-PSK WiFi 的无线路由器了。\n\n刚开始,我想过几个不同的方案:\n\n### a. 用手机连 Wifi 开热点(失败)\n\n之前无意间发现了我的 Mi Mix2S (Android 11 EvolutionX) 可以边连 Wifi 边开热点,不知道是怎样实现的。所以我想,如果用旧的华为 Mate8 这样一边连着学校的 PEAP 一边开热点就可以了。但是开机之后,我发现 Mate8 的原生系统 Android 8 EMUI 8.0 并不支持同时连 Wifi 开热点。我听说用 VPN Hotspot 可以实现无线中继,下载试了下却发现没有 Root 就不能改 SSID 和密码,每次开的 SSID 和密码都是随机的。所以花了超级多精力解锁 BootLoader、刷 Magisk、然后发现 Root 之后也不能改无线中继的 SSID 和密码... 改完之后重开中继的 SSID 还是 DIRECT-{随机}-HUAWEI, 密码还是八位随机字符。不过还是试了下用智能插座连这个无限中继,只能赌无线中继不会重启、不会关机、不会被电源管理杀掉... \n\n结果是,在台式死机之前智能插座就先下线了,回宿舍看了一眼发现手机不知道为什么重启进 Recovery 了。失败失败(\n\n### b. 用手机连数据卡开热点(太贵了)\n\n然后想到如果可以再买一张手机卡只用来开热点就解决了嘛,但是发现这边不像国内那样 ¥10/mo 就能买一张卡,这边最便宜的流量卡要 CA$15/mo,换算出来要 ¥75/mo 了,够买一个路由器了(\n\n### c. 用路由器中继\n\n然后就是现在的解决方案啦,用路由器中继学校的 PEAP。首先要做的是买一个路由器,可是这边新的路由器也真的很贵,亚马逊上最便宜的 TP-Link AC750 要 $35 = ¥175... 所以去二手市场逛了逛,很幸运的看到了附近有人 $10 出路由器,一个 Netis WF2780 和一个小米路由 R4。\n\n首先试了 WF2780,但是它好像没接好 WAN 就完全不能用的样子,SYS 灯一直在闪,网线连上电脑也没办法获取到 IP,手动分配 IP 到 192.168.1.2 也进不去管理页面。可能是坏了吧,也可能这个路由器本来就是这样?不懂,下一个(\n\n然后试了 R4,可是用小米官方的固件,无限桥接模式并不能连上 PEAP 验证的 UofT Wifi 或者 eduroam,有线桥接模式把 WAN 口接上也提示识别错误。所以只能试试 OpenWRT 啦。\n\n### 1. 给小米路由 R4 刷 OpenWRT\n\n这里我跟了 https://www.wyr.me/post/619 这个教程,很轻松地就刷好了!\n\n在电脑上要做的事情:\n\n1. 网线连上路由器,登录管理后台(我是 http://192.168.31.1)\n2. 复制管理后台登录之后 URL 里面的 stok 参数\n3. 执行以下指令,输入路由器的 IP 和刚才复制的 stok\n\n```sh\ngit clone https://github.com/acecilia/OpenWRTInvasion\ncd OpenWRTInvasion\npip3 install -r requirements.txt\npython3 remote_command_execution_vulnerability.py\n```\n\n然后就有 ssh 啦!接下来用了这个固件:https://github.com/ioiotor/mir4-ss,下载 [openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin](https://github.com/ioiotor/mir4-ss/releases/download/V19.07.4/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin) 和 [openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin](https://github.com/ioiotor/mir4-ss/releases/download/V19.07.4/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin)\n\n4. 在电脑上执行以下指令:\n\n```sh\nmkdir temp\ncd temp\nwget https://github.com/ioiotor/mir4-ss/releases/download/V19.07.4/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin\nwget https://github.com/ioiotor/mir4-ss/releases/download/V19.07.4/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin\npython3 -m http.server\n```\n\n5. 登录进 SSH Shell 之后在路由器上执行指令:\n\n```sh\ncd /tmp\nwget http://{电脑 IP 地址}/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin\nwget http://{电脑 IP 地址}/openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin\nmtd write openwrt-ramips-mt7621-xiaomi_mir4-squashfs-kernel1.bin kernel1\nmtd write openwrt-ramips-mt7621-xiaomi_mir4-squashfs-rootfs0.bin rootfs0\nnvram set flag_try_sys1_failed=1\nnvram commit\nreboot\n```\n\n然后就好啦,重启之后就是 OpenWRT 了(虽然默认没有开 WLAN,所以只能网线连到路由器)\n\n### 2. OpenWRT 连接到 PEAP 网络\n\n登录上管理页面,改完管理密码之后,我试了直接把 wlan0 改成 client mode 去连学校的网,但是发现这里也只支持密码验证的 WPA-PSK 而不支持用户名+密码的 WPA-EAP。然后查了一下发现只要把预装的 wpad-basic 换成完整的 wpa-cli + wpa-supplicant + hostapd 就可以了。但是还有一个问题就是我的路由器现在没有网,所以不能在线安装软件包。我的解决方案是用电脑先连上学校的 WIFI,再把电脑的网线连到路由器的 LAN 口上,然后在电脑上开桥接模式路由器就有网了!\n\n之后,ssh 进路由器,执行以下指令:\n\n```sh\nopkg update\nopkg remove wpad-basic\nopkg install wpa-cli wpa-supplicant hostapd nano\nreboot\n```\n\n等重启好之后,管理页面里面 Wireless Security 那一栏的验证方式里面就有 WPA2-EAP 了!接下来把学校的验证信息填进去,然后保存就连上啦!UofT 的配置如下:\n\n```txt\nEncryption : WPA2-EAP (strong security)\nCipher : auto\nEAP-Method : PEAP\n...\nCertificate Constraaint (Domain) : radius.wireless.utoronto.ca\n...\nAuthentication : EAP-MSCHAPv2\nIdentity : 你的 UTORid\nPassword : 你的 UTORid 密码\n```\n\n接下来把 WIFI 配置一下,让智能插座连上这个 WIFI 就好了!"}, {"id": 6, "title": "日记 - Royal Ontario Museum", "tags": ["日记"], "category": "日记", "file": "content/posts/2021-12-30 日记.md", "date": "2021-12-30T00:00:00", "url_name": "2021-12-30-日记", "content": "今天和聊聊去逛了 Royal Ontario Museum,是我这两年第一次逛博物馆。这个博物馆真的好大,从十点开馆逛到五点半闭馆只看完了不到三层,又或许是因为我们看得比较认真,每件感兴趣文物、标本旁边的介绍都略读了下。晚上腿好酸,从来没有站过这么久。\n\n在这里我也体会到了和聊聊知识量上的差距有多么恐怖,简直是肉身维基了…看到中国韩国的文物,聊聊看到材料和风格就猜到了文物的制作朝代、年份、位置,留下我在旁边偷偷查各个朝代都在哪些年。给我讲了好多,比如释迦牟尼虽然有十大弟子,摆在旁边的通常是阿难和大迦叶;比如在化学合成颜料之前,制作颜料通常需要找到特定颜色的自然材料,甚至有用木乃伊尸体磨成的棕色颜料绘出的名画;又比如华昇最早在中国发明的活字印刷并没有欧洲古腾堡的印刷术便利实用。生物知识也是,好多次被聊聊吐槽我到底翘了多少节生物课…多亏聊聊我今天刚知道海豚也是鲸目、鲸要升到水面呼吸、翼龙并不是鸟…更丢人的就省略了(x\n\n我们之间五年的年龄差真的好可怕,也许这是我永远没办法赶上的。这几天还发现学计算机的聊聊懂的心理知识可能比心理专业的我还多,汉语英语日语法语都比我厉害,玩游戏也好厉害…聊聊这么优秀的真的让我好自卑。不过也没关系,我也有绝对自信的领域,我也有聊聊没有的知识…吧。\n\n不管怎样,今天学到了好多!希望我能记住。不过以前或许学过这些,但是我长短期记忆都真的好差…短期比如我经常会走进一个房间就忘了进来做什么;长期比如之前母上给我看小学去一个沙漠旅游的照片,但是我完全不记得去过那里,看着照片也只想起了好像有这回事,没办法唤起情节记忆。所以其实写日记还有另一个目的——希望写下这些文字的过程能让这段记忆深深刻在记忆中。\n\n晚上我们去吃了烤肉,在餐厅拿号之后要等一个小时才有位置。等消息的时候又去逛了一次 Game Stop,我终于下定决心入手了一直想要买的 NS!是 Wii 之后我的第二个任天堂主机!(虽然说快 2022 了还原价买 2017 的主机听起来很蠢,但是能借聊聊的卡带一起联机就值了ww)聊聊还给我买了马里奥奥德赛的卡带!本来还以为自己不是很爱玩游戏的,结果凌晨醒来开箱之后就一下子沉迷玩了四个小时。\n\n烤肉很好吃!今生第一次吃烤肉,上生肉自己动手烤也是好神奇的体验。然后发现,比起照顾自己我们都更喜欢照顾对方的样子,会看到聊聊烤完把肉肉夹给我,我烤完再把肉肉夹给她ww\n\n记得今天睡觉之前和书聊天,书说像我之前那样太在意别人不在意自己也不太好,对此我回复说聊聊会在意我的。这样互相照顾好开心!"}, {"id": 5, "title": "日记 - 和聊聊相遇", "tags": ["日记"], "category": "日记", "file": "content/posts/2021-12-28 日记.md", "date": "2021-12-28T00:00:00", "url_name": "2021-12-28-日记", "content": "突然有一种认真把经历的事情记录下来的冲动,那就从今天开始吧w\n\n今天去和聊聊看了西区故事,是一个罗密欧与朱丽叶为原型的歌舞剧。故事的男女主在敌对的帮派,模糊的归属感让他们可以独立思考、走出对帮派的无脑跟随,也是这个共同点使它们一次相遇便相爱。当然和罗密欧与朱丽叶一样,结局无比沉痛。好久没有看过情绪这么沉重又细腻的故事了,上一个这样的故事或许是利兹与青鸟,或许是朝花夕誓,又或许是凝冰剑斩的某部视觉小说。这些故事真的好美——是期望和绝望的华尔兹,甜蜜中穿插着刺痛…\n\n昨天 K(前任)和我说了好多话,ta在上一段感情里和我一样是依恋的那一方,同样喜欢着一个也许不是那么喜欢自己的人。「你不要我我就没有别的东西了」——原来ta也有过把一个人看作自己的一切的经历。只是那个人更狠,直接把ta拉黑删除…所以ta讨厌浪漫、讨厌甜腻的话语、以及像ta前任对待ta一样地对待我,也许都是出于自我保护吧——不想再因为浪漫受伤,也不想让我走过同样的经历。\n\n这样看来,也许我永远也不会长大呢。和前前任子兰经历过一次这样痛苦的分别之后,我依然期待着浪漫,遇到 K 依然为ta付出了我的全部,对下一个喜欢的人也一定不会变。\n\nK 的聊天记录里ta和前任分开的时候朋友和ta说:“我太现实了,你看到的是之后的美好结局,我看到的是当你真正知道那个结局没法实现的时候你有多伤心。我想很可能是错的,但是我没法否定这个结果。”也许是这件事让 K 在亲密关系里变得现实,我知道ta父母有意见、我们能力差很远、目标也很不同,现在意识到我们只能分开也真的很伤心 。但这难道不是个悖论嘛?因为有可能失败就不去尝试的话,就把失败从可能变成了必然。我更喜欢知道一个愿望很难实现仍然付出全部去追求的理想主义。\n\n又或者,说不定我在享受浪漫的痛苦呢?\n\n(留坑)\n\n看完电影和聊聊去逛优衣库,和她一起挑了点春天的女装。她给我挑了一顶很合适的帽子!还好大方地帮我结帐了…聊聊真的对我太好了,以后一定要回报给她ww\n\n在优衣库那里还遇到了一位好像是跨男的亚裔路人,好心地走上来问咱是不是跨。虽然在这边第一次偶遇跨性别亚裔还是好新奇,但是即使是被跨鉴跨也真的好受打击... 不过之后ta问我们是不是一对,看我们像恋人又不是的样子就疯狂 ship 我们,还给了好多祝福什么的。然后!挥手道别之后聊聊顺势用西区故事里面超可爱的台词和我告白了!!以下是我今天疯狂想记下来的事情展开ww\n\n(和路人挥手道别之后) \n:所以我们是一对嘛? \n:是吧(捂脸) \n:「quiero estar contigo para siempre」 \n(然后牵住我的手) \n\n(哇啊啊啊啊啊真是太棒了!!!谢谢你,聊聊!还有不知名的英雄路人!我的心要跳出去了ww)\n\n这边优衣库店员也超级好心,聊聊虽然那天的打扮不是很过,但是带着裙子去试衣间店员也什么都没问,加拿大真好。聊聊买了两件很合适的毛衣、好厚的黑色半身裙、打底裤、还有给我买的帽子w\n\n接下来去吃了饭,因为到处都排很长队或者没开,所以就去了一家没吃过的越南河粉店,边聊边吃了好久。可惜聊聊似乎不是很喜欢吃碳水,更喜欢吃肉肉,所以把肉肉夹给她了!决定了下次吃烤肉w"}, {"id": 4, "title": "一个测试文稿", "subtitle": "你好,世界", "tags": ["测试", "测试2"], "file": "content/posts/2021-12-28 Test Post.md", "date": "2021-12-28T00:00:00", "url_name": "2021-12-28-Test-Post", "content": "Testing content 🌏\n\n你到底有多无聊(??"},