回首(2019.3)

5/8

本来是准备大学期间一个学年结束后就写一篇总结的,结果被忘的一干二净,记起来这件事的时候大三上学期已经结束了,寒假期间一直没什么时间写,就拖到了现在。时间太久所以记不起之前某个时间点自己具体在做什么了,那就尽可能地去回忆吧。

大二上期

提起大二,瞬间想起了大二体育的选课,印象十分深刻。开始选课之后,先是刷新不出进入选课的按钮,清cookie进入后登录完点击下一步又没反应,最后才用对面寝室同学的电脑,选了仅剩的一门课。
后来有澄清,开始后不能进入选课是学长故意设置的,在等待页面刷新达到一定次数后就会用cookie记录,被记录的人在选课开始五分钟后才能进入。而点击下一步没反应的问题,经私下交流发现只有Chrome浏览器会遇到,其它浏览器都正常。学长回复选课期间他们使用Chrome一直正常,没有任何问题,我是不相信的。

新的学期,先锋网络中心也开始了新一轮的招新,我在招新宣讲会上以QQ音乐为例,讲了一下如何在浏览器中F12查看网络请求并获取音乐真实链接,使用C语言根据歌曲ID进行下载,也有其它小伙伴普及电脑硬件知识,介绍黑苹果相关内容,演示中间人攻击等等,感觉宣讲会十分成功,后来的面试也确实有不少人报名。招新完之后是网络部的部长换届,开始没人主动报名,在学长的再三动员之下,才有人进行自我介绍,最终我和另外两名同学一起担任副部长,不设正部长,之后则是一些日常工作的交接,我也接触到了先锋的两台服务器:老版本的Centos,杂乱的目录,没有文档,自己在apache和nginx的配置文件中寻找哪些目录是正在使用的。感动吗?不敢动。后面还有十佳歌手比赛,用了大约一周做了一个简单的报名页面1,美工部出设计,队友负责前端,我负责后端,主要锻炼的还是团队协作能力。

大二上也有接着大一暑假折腾wine,成功在Linux下使用TIM2和玩炉石传说。放博客挂网站的服务器从阿里云换到了Vultr3,配置是1核1G,25G的SSD和每月1T流量,一个月5刀,支持IPv6,免费快照,阿里云的学生机反正便宜,也还续着。还用Vultr赠送的50G的blockstorage搭建了一个nextcloud私有云盘4,用来备份文件。Linux 桌面体验过awesome WM5和i3 WM6之后回归了KDE的怀抱。数据结构课设需要一个图形化界面,于是尝试使用Qt,写Qt的体验还不错78

大二寒假

暑假没回家,寒假当然要回了。寒假期间在家先跟着A Tour of Go9学了一点Go的基础,然后跟着官网的Writing Web Applications10学习了一下如何用Go写一个简单的Web应用,自己用留言板练手,算是接触了一点Go语言,但现在已经基本忘的差不多了。快开学时在家无聊,看到已经返校的软件同学在做作业,于是要了一份他们的作业要求,选了其中一个“用Java实现FTP的服务端和客户端”的作业,自己试着用C写了一下11

大二下期

刚开学趁着空闲时间比较多,就尝试给自己的手机刷了一下Lineage OS12。手游刺激战场出来后,想和室友一起开黑,然而自己在手机上玩时手特别容易出汗,根本不能玩,于是使用Arch Linux将PhoenixOS13安装到了硬盘上14,在安卓PC上使用鼠标键盘玩游戏,体验也不错。

学期末的数字电子技术课程设计是要用VHDL写在FPGA上跑的程序,看起来挺有意思,于是就自己也买了一块同型号的FPGA,到图书馆借阅相关资料,提前一周开始准备,最终实现了在PC上通过C语言程序将汇编指令转换为二进制操作码(直接字符串替换就行),模拟汇编语言的编译过程,然后使用Windows的API通过串口通信将指令数据发送到FPGA开发板,开发板接收并写入数据到存储器中,最后8位模拟CPU从存储器中取数据,译码,执行指令,并显示结果15。CPU的结构更多的是参考的书本中的内容,自己设计的话两周时间肯定不够,做完课程设计感觉自己对计算机组成原理有了进一步的简单了解。

大二暑假

大二暑假留校,参加多校训练赛,其余的空闲时间自己跟着linuxfromscratch16往U盘中装入了一个系统,遗憾的是没有成功从U盘UEFI启动,从硬盘启动可能会简单一些。使用livego17和flv.js18搭建了一个简单的直播服务器,使用obs推流,深刻体会到了带宽的重要性。除此之外,还发现了死亡细胞19这款游戏,steam和GOG上都有,由于懒得在Arch Linux上开32位仓库装steam,GOG上单独下载游戏即可,我就在和同学一起在GOG上购买并通关了这款游戏。(现在又出了新关卡新难度,之前用的套路也被削了,还没来得及再挑战)

大三上期

应该是因为不喜欢Chrome新出的圆角吧,还有当时Chrome准备默认隐藏地址栏里的www,于是就尝试换用Firefox,然后突然发现密码全在Chrome上保存着,对Chrome的依赖有点严重,就试用了一段时间1Password20。没有苹果全家桶,1Password用着并不是特别舒服,我就又换用了密码管理器keepassxc21,搭配自己的nextcloud也可以手机端自动同步,但是感觉安卓端的自动填充有点问题。

跟着几位学长布置ACM亚洲区域赛沈阳站赛场,学长们负责主要工作,我就打打下手而已。除了最开始遇到的交换机硬件问题,和CodeBlocks在Ubuntu18.04上经常崩溃,别的没什么大问题。教练紧急带来的交换机和推荐的Squid代理服务器帮了很大忙。网络启动安装和批量配置也很顺利,具体过程可以看学长的blog22

看到阿里云新推出了轻量应用服务器,香港区域,1核1G,25G的SSD和每月1T的流量,限峰值带宽30Mbps,就创建了一个实例,vsp2arch23转换成熟悉的arch环境,在上面跑了一个ss和MTProxy24作为备用。

学长在群里放了一个QQ Bot,感觉很有趣,就找了学长写的qq-bot-api25(Golang bindings for the CoolQ HTTP API),想要也写一个bot玩玩,结果没什么好的点子。最终决定用Go试试转发QQ消息到本地,本地也可以进行简单的回复,选了Pidgin26和XMPP协议27,主要过程就是使用netcat工具查看与测试Pidgin的请求,然后在XMPP的文档中查找相关的内容,在程序中对请求做出回应。文档的话核心文档是RFC3920和RFC3921,已由新版的RFC6120和RFC6121代替,翻译可以在Jabber/XMPP中文翻译计划28中找到一部分。当时就是先在中文文档中查找各种请求格式,找不到的话再去英文RFC文档中查找,最后缝缝补补实现了一个demo29,整体毫无架构可言,只有一个七百多行的main.go,丑到自己不好意思放到GitHub上。

大三寒假

寒假回家想着没什么事,于是就去驾校报了名,考完科目一,科目二学到最后来不及考试了,下次回家可能还得从头学一遍。白天去驾校,晚上就打开电脑写写代码,本来想重写在学校时模拟XMPP协议的QQ转发服务器,但试过Pidgin之后觉得限制有点多,QQ群没办法完美转换成XMPP中的聊天室,所以花了一假期,用Qt重新写了一个客户端,通过WebSocket直接与CoolQ HTTP API 插件30通信,可以实现简单的聊天功能。开学之后又花了两周调整了一下结构,增强其可维护性,并重写了其中的一些部件方便实现额外的功能3132,在GitHub上make public之后经学长提醒还是改回了private,但还会继续完善,如果有机会可以自己为其写一个服务端,应该会很有挑战性。

未来


注: