因为我们软件学院是一年三学期制,所以第二学期马上就要结束了,硕士阶段大多数课程也都上完了,几乎每门课都有课设,全部从0开始的话,工作量也太大了,再加上第一学期基本上在实习,第二学期忙着做科研,所以留给每门课写课程设计的时间并不多,因此很多项目其实都是用的本科时做的一些比赛或项目作为原型(甚至成品),但尽管这样,还是有花了很多时间和精力,也学到了很多新的技术。
这里对这两学期来做的一些比较有趣的课程设计做一个简单的汇总,因为我比较擅长数据可视化和做视频,所以这里会附上很多大作业的演示视频。
DataMining ——基于熟人社交网络的文本与图像数据挖掘
这门课我蛮喜欢的,所以花了很多时间来写大作业。作业的原型是本科时写的一个QQ空间爬虫,我以此为基础爬取了50位好友(都经过他们同意的)的QQ空间动态,总计14462条说说的内容和相关的信息(包括评论、点赞、图片等等),希望能找出“什么样的动态能吸引好友的关注”,我们分析了文字的关键字、情绪、内容分类以及图片中的物体、摄影技巧等元素,但是很遗憾,由于技术有限和时间有限,最终能得出的有效信息并不多。比较有趣的发现是对QQ空间好友的聚类,QQ空间中可以获取好友以及共同好友的数量、共同加的群的名称,通过对这些数据进行聚类,可以发现自己的好友大致可以分为哪几类。
最终的作业是由组里的队员按照CVPR的latex模版编写的,当时基本上就只有一天时间编写最终的论文,所以写得比较仓促。下面是中文摘要和博客地址:
中文摘要:与微博、知乎、贴吧等公众的网络社区不同的是,朋友圈、QQ空间等网络社区是以相互熟识的朋友、亲戚、同学等为基础建立起来的,因此,我们称这类社区为“熟人社交网络”(与之相对的,称为陌生人社交网络)。在熟人社交网络中,由于用户之间除了线上的交流之外,往往还有线下的更为直接的接触,这使得熟人社交网络与陌生人社交网络中的交流方式变得不同。随着互联网的飞速发展,普通用户越来越需要在熟人社交网络中树立一个良好的印象,通过发送“动态”来引起好友们的关注。本文以QQ空间中采集得到的真实数据为基础,使用热度来衡量每一条动态的受欢迎程度,从而对熟人社交网络中如何产生更受欢迎的动态进行了建模和分析,并提出了一种基于用户在熟人社交网络中发表的文本、图像等数据构建用户画像的方法。
博客及原文地址: Text and Image Data Mining Based on Acquaintance Social Network
云计算——校园招聘调查
云计算写了很多次小作业,这是第一次。作业的原型是大四时写的一系列爬虫,爬了69所高校招聘网站的招聘信息,找出哪些企业会到哪些学校招聘,详细的数据分析结果在这里。这门课我们主要是用spark对这些数据重写了一下分析,并利用websocket实时推送数据到前端,动态展示了2017年一年中不同类别高校平均每一天展开的校园招聘数量,从视频中可以直观的发现不同高校在招聘规模上的差距,以及一年中春招和秋招的规模大小。
云计算——QQ好友成长史
当时好像是记错了交作业的时间,发现的时候离deadline只有一天了,作业要求是使用spark graphx做图计算,应用场景自己找,当时差点想退课了。最终从DataMining大作业中获取的数据抽了一部分出来完成这个作业,使用spark graphx做了一个简单的图计算。数据是QQ空间中获取的好友数据,由于该数据有添加该好友的时间,所以结合用户此时的好友数量,能大致推算出来用户在每个时间点有多少好友。该数据不是很准确,一是因为腾讯部分数据丢失,添加好友的时间戳为0;二是如果该用户经常删除好友,这个是没法计算的。我们利用该数据动态展示了用户添加每一个好友的时间和过程,并且为了娱乐,每一个好友的节点都是该好友的头像,群的头像统一用一只猫咪代替。
然后使用和上一次作业中相似的方法(django + websocket + vue + echarts)完成数据的动态展示。由于图的节点太多,在实时展示的时候其实非常卡,所以我在录完视频之后,又一帧一帧的剪辑,把卡住的帧都剪掉,所以最终的视频看起来比较流畅。
嵌入式——智能小车监控平台
嵌入式的大作业要求开发一个与嵌入式设备有关的云平台,核心要求是使用四种不同的网络协议完成数据传输。课程提供了Arduino板子和多种传感器。最终我们模拟了一个小车的应用场景,使用了HTTP、MQTT、XMPP、COAP四种协议来传输距离、温度、湿度、光线等数据,相当于分别写了四个客户端和四个服务器,使用一个多进程批启动脚本来启动这些程序,前端使用avalon.js + echarts + ajax轮询来做实时的数据展示。需要注意的是,由于后端使用的是python,avalon.js使用的双花括号做界定符,这与python中很多模板的界定符冲突,就会导致avalon的界定符失效(也就是前端网页上使用了{{}}做数据绑定就会失效)。所以,可以自己更改avalon配置。参考Avalon.js手册·配置
高级人机交互————基于笔交互的中学物理运动分析工具
第一次用游戏框架(cocos2dx),第一次接触物理引擎(Chipmunks),一度写到崩溃,最终还是咬咬牙坚持写完了。这门课其实的大作业给了两种选择,一是做问卷调查,二是写与笔交互和中学物理教学相关的工具,因为不想做问卷,所以最终选择了写笔交互。本来以为会有时间好好学一下再写,但结果这学期写完论文初稿后就剩不到一周时间。项目是基于三年前学长们写的一个Sketch 2D,该项目实现了物体的绘制和识别,基本上就是把框架搭好了。但该项目的配置比较繁琐,代码量也有1万行左右,幸好学长们注释比较详细,命名非常规范,所以阅读起来轻松不少。我先是根据类名在纸上手动绘制了各个类的功能,摸清它们的关系,然后再一个个的删除我不需要的东西并找到我要修改和添加的地方。因为对cocos2dx和chipmunks不够熟悉,如何获取物体移动时的速度我就想了好几天。很奇怪的是,中间我每次想退课的时候,就又取得一点进步,然后就这样慢慢的坚持下来。在熟悉了游戏框架和物理引擎之后,写代码就方便多了,也逐渐感受到了写游戏的快乐,所以最后两天我熬了两个通宵,大多数功能都是在那个时候完成的。
最终实现的效果如下:
可以通过鼠标或触控笔自由绘制小方块和斜面,模拟物理世界的真实运动,可以很好的模拟牛顿第一、第二、第三定律,以帮助中学物理老师的教学实验。可自由设置多个物体的初速度、作用力的大小和方向,设置摩擦系数等,所有单位与真实世界中单位一致。实时展示多个物体的v-t曲线,可以自由暂停和恢复。空气摩擦默认为0,重力默认为10m/s^2。
总结
大学里多人合作的大作业不可避免的一点就是有人划水,而软件工程作为一门比较强调实践的课程,从大一就开始要求组队写项目,因此我遇到过很多划水的队友,当然我也在一些项目中划过水。现在看来的话,我感觉只要是队友划水的项目基本上就是我赚了,因为我不得不逼自己去学很多东西来完成这个项目,而队友们什么也没学到(有时候感觉自己有点坏,经常让队友啥也没学会)。所以我感觉很亏的一次是,大二时和两个室友写大创,我还没学会QT时他们就基本把项目写完了,所以我到现在也没学会QT。但另一方面,我没学会QT好像对我也没什么影响,因为我也基本没写过桌面开发了。所以很多队友可能在课程设计中啥也没学到,但是也没有损失啥,比如有的同学可能只想做前端,那后端的项目他划划水也对他没啥影响。所以最后,我也只能说:你这样会少了很多学习的乐趣。。。
点击量:6022
1 条评论
s1106980967@qq.com · 2021年8月29日 上午9:19
感谢您的分享