proto 通过字段名获取值

很久没有更新博客了,一方面是出去实习比在学校的时候忙,真的很多东西等着我去学,太可怕了,另一方面就是懒 protobuf 真是个好东西,就是在你不知道具体结构的时候想要拿到特定字段的值有点小麻烦,好不容易折腾出来了,写篇博客记录一下 func FindByName(name string, msg protoreflect.Message) (has bool, value protoreflect.Value, isList bool) { if name == "" { return false, *new(protoreflect.Value), false } msgDesc := msg.Descriptor() for i := 0; i < msgDesc.Fields().Len(); i++ { if msgDesc.Fields().Get(i).Kind() == protoreflect.MessageKind { sonMsg := msgDesc.Fields().Get(i) has, value, isList = FindByName(name, msg.Get(sonMsg).Message()) // type mismatch: cannot convert list to message if has { return has, value, isList } } if msgDesc.Fields().Get(i).Name() == protoreflect....

2021-06-11 15:48:00 · 1 min · 173 words · johnpoint

Linux 进程信息格式化

2021 年了,转头看了下自己的服务器面板,发现还是那个半成品的样子…于是在这三天改了下代码,加入了 v2 api 接口,这个接口主要使用 Websocket 进行通信,虽然说服务端的压力其实不是很大,但是使用轮询进行数据的更新不仅会看到一坨一坨的请求,对我的渣渣电脑来说也有些吃力了,不过这篇文章的内容不是这个,改天再开一篇文章记录一下。 进程查看其实是很早之前就想做进面板的功能之一,但是受限于并没有找到现成的 go 第三方或者官方库,所以就放了一放 (结果放了差不多一年),刚好这几天在改面板的代码,索性就顺手把它做了。 进程查看没有库可以调用,就只能通过调用系统命令来进行查看,一般来说我看进程会使用 ps -aux,但是对于面板来说,这里输出的数据有点太多以及有点太乱(太乱指的是输出的数据不是计算机友好型结构),然后看了下网上网友们五花八门的命令,左拼右凑之后,最后成品是用的 ps axc -o pid,user,stat,pcpu,pmem,command --sort -pcpu --no-header | sed 's/\ \+/\ /g' 最终得到的数据是没有表头、连续空格被替换成一个空格的数据,我感觉这就够了,其余的交给前端处理。 前端代码截取如下 let ps = server.Ps.split('\n'); ps.forEach(item = >{ if (item.split(" ").length > 3) { item = item.split(" ") if (item[0] === "") { item = item.slice(1, item.length) } let i = { PID: item[0], User: item[1], State: item[2], Pcpu: item[3], Pmem: item[4], Command: item....

2021-02-02 21:20:00 · 1 min · 79 words · johnpoint

2020 年度简报

2020 年的开头我们并不知道接下来的这一年是那么的艰难,幸好春节前我就已经在某些地方得知了疫情的消息并且准备了一些口罩,减轻了疫情高峰期时口罩的使用压力。 Bilibili 跨年晚会仿佛就发生在昨天,又到了 2020 年的圣诞节,得开始写年度总结了,总感觉这一年啥都没有干就到年末了( ...

2020-12-23 11:11:29 · 1 min · 133 words · johnpoint

NodeMCU 制作桌面天气时钟

其实我眼馋青萍空气检测仪很久了,但是要700+的价格实在是下不了手,于是萌生了自己做一个类似的桌面摆件的想法,一方面是想尝试下制作包含硬件的小玩意,一方面确实是想整一个摆件放在桌面。 ...

2020-12-02 23:00:37 · 1 min · 112 words · johnpoint

使用 Webdav 备份

webdav 服务端 使用 cloudreve 自带 webdav 客户端 cadaver 备份 记录登录信息 .netrc machine WEBDAVURL login USERNAME password PASSWORD 使用脚本 figlet webdav backup echo "==========================================================================" export t=`date +%Y-%m-%d` echo "Backup: " $t printf "集中配置文件 [执行中]" mkdir config cp .ssh/config config ...... printf "\r集中配置文件 [完成] \n" printf "归档配置文件 [执行中]" zip -q backup.zip config -r rm config -rf printf "\r归档配置文件 [完成] \n" ...... printf "\r归档密钥文件 [完成] \n" echo "put backup-"$t".zip" > webdav echo "bye" >> webdav cadaver WEBDAVURL < webdav rm webdav rm backup-$t....

2020-11-07 10:19:57 · 1 min · 84 words · johnpoint

Hackergame 2020 writeups

最终成绩 Sat Nov 7 09:59:22 AM CST 2020 当前分数:1500, 总排名:225 / 2415 binary:0 , general:850 , math:300 , web:350 啊,我真的是太菜了( 只做出了一点点题目 签到 谢邀,利益相关:老签到出题人了。 今年出题组的要求是「来参加我们比赛的同学很多都是初学者,我们的签到题要清晰明确一点,让同学们轻松签到。」 我完全明白了,签到题就是送 flag,送就送,我最会送了.jpg 首先写好题目介绍:「你需要点击下面蓝色的 “打开/下载题目” 按钮,在打开的网页上获取到形如 flag{...} 的 flag,回到本页面,将其完整填写到下面的文本框中,并点击灰色的 “提交” 按钮即可完成本题。」 然后写一个 flag 提取器,选手要多少个 flag,我就给多少个 flag,绿色背景,红色加粗,显眼的位置,标准的格式,这都不叫送,那还有什么叫做送。 点击 「打开/下载题目」 按钮,打开 flag 提取器,获取第一个 flag 吧! 提示:完成题目遇到困难?你可以参考 2018 年签到题题解 与 2019 年签到题题解。 F12 定位到拖动条,将最大值改为 1 然后将条拖到最大就可以得到 flag <input type="range" id="number" name="number" class="form-control" value="0" min="0" max="1" step="0.00001"> 猫咪问答++ 在科大西区的研究生食堂旁边,有块水泥石板盛产肥猫。 每一个晴朗的中午,其上都会有花花白白的猫咪慵懒地晒着太阳。 而许多吃完午饭的同学,也可以趁此良机大肆撸猫。 但是突然从某一天起,水泥石板上多了一只猫首猫身的动物,拦住前来撸猫的同学,用它精心准备好的谜语考验他们。 只有全部答对了才可以撸猫,如果不小心答错了它就会炸毛给你看。 为了让每日撸猫活动恢复正轨,热心的 LUG 协会同学把这些谜题放到了这里。 如果你能答对所有的谜题,就会有 flag 作为奖励。 提示:正如撸猫不必亲自到现场,解出谜题也不需要是科大在校学生。解题遇到困难?你可以参考 2018 年猫咪问答题解。 手动数,数量为 12 搜索到了 wikipedia -> RFC1149 A typical MTU is 256 milligrams....

2020-11-04 00:19:57 · 6 min · 1102 words · johnpoint

Oneplus 8T 到手

来了来了,Android R 他朝我们走来了 刚刚忍不住剁手了香气四溢的 Oneplus 8T,也把我手中的已经伊拉克成色的 Oneplus 6 给以旧换新处理掉了,就例行来说一下 Android 11 以及这个看起来很香的 Oneplus 8T 的体验 ...

2020-10-21 15:56:57 · 1 min · 65 words · johnpoint

编译安装 python 3.9

环境 Ubuntu 20.04.1 LTS focal x86_64 下载 && 解压缩 wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tar.xz 解压xz文件需要软件包 xz-utils tar -Jxvf Python-3.9.0.tar.xz 编译 && 安装 cd Python-3.9.0 ./configure make make install 错误解决方法 No module named zlib 编译步骤中使用 ./configure --with-zlib pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. 安装软件包 libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev libtk8.5 libgdm-dev libdb4o-cil-dev libpcap-dev

2020-10-09 11:02:14 · 1 min · 59 words · johnpoint