这个周末参加了交大组织的Hackathon,这是我参加过的第二次Hackathon活动,虽然没有取得什么奖品,但是学习了Django,和少部分的AngularJs,感觉还是比较值得的。

开始之前

之所以参加这个活动是因为有人拉,本来是打算好好写作业的,编译原理大作业第二次迭代就开始了,大腿还在生病,所以我们组任务有点重啊,打算早点开始。但是又一只大腿拉我去参加这个活动,感觉也挺有意思的,就一起报名参加了。

记录

像上次参加大众点评的Hackathon一样,我们也是提前就组好了队伍,而且值得一提的是队伍里有一个在写Web外包的腿,而这种Hackathon大多数都是写Web相关的项目,所以看上去我们组是蛮有优势的。但是其实感觉真正写项目和这种Hackathon活动还是有很大区别的,而腿可能没太注意,导致我们的技术的计划方面出了点问题。

活动场所是在二餐的西餐厅,基本就是讲了讲大致的一些小技巧,都是在之前参加Hackathon的时候听过好多好多遍的东西,之后就是进入了提出Idea环节,再之后就是coding了。

我们组的想法是做一个找自己的趣味相投的伙伴的网站,这个想法是我提出来的,原因是我常常想去自修教室,但是室友嘛,都是要么爱去图书馆,要么爱在寝室里,所以我就很难找到人一起去,于是就有了这么一个想法,建立一个寻找与自己有同样兴趣的人的网站,兴趣比如dota,比如自习室Orz等等。因为之前没有关心过这次活动,所以想法也是非常随意的。确定了想法,于是就开始写代码了

采用的技术

因为我们组有腿嘛,所以就由腿来制定了我们的技术方案,大致就是Django+AngularJs。看到这个框架,如果有用过这两个东西搭配的就可能知道这是多么坑的选择了。事实上我们也是在之后才发现这两个框架在一起有多坑。之前我们三个人,都没有用这两个框架写过代码,所以被坑的蛮惨的。

Django之前在Hackathon活动中有接触过,只不过没有自己写过,看上去是个非常便捷的后台框架,写起来很简单,事实上也是这样,后台在一下午加一晚上的时间内就基本搞定了,涉及到数据库里面的三张表,以及各种CRUD。

Angular是谷歌的一个前端框架,在写的时候稍微看了看,感觉非常难学,似乎是把后台关于页面的Service移到了前台来完成,后台只需要实现数据库访问接口就好了,可能是接触比较浅吧,我不觉得这个框架非常好用,相反学习成本好大。

期间遇到的问题

首先第一个问题,就是关于git。首先,因为gitcafe有给这个比赛赞助,所以推荐使用gitcafe,而在使用gitcafe的时候遇到了好多问题,首先就是不支持putty生成的SSH密钥。据工作人员说,他们目前只支持gitbash生成的ssh。所以后来没办法只好用github,用github也遇到了一个问题,就是SourceTree似乎不支持gitignore,明明写好了ignore文件,但是不能起作用,也不知道是写错了还是怎样,最后每次上传代码连pyc都传上去了,相当混乱。

然后,遇到了Django和AngularJs冲突的问题,第一个冲突的问题就是,Django的Template和AngularJs都用到了{{}},这就有问题了,当遇到时,这些符号会被当作Django来解释,而AngularJs就被冲了。这个问题解决起来还是简单的,只需要关掉template里的Django相关功能就可以了。但是后面的问题却始终没有找到解决额方案,那就是

AngularJs发送的Post请求在Django来看是空串!

这个问题在StackOverflow上有不少提问,但是所有的解答都试过了,还是没有解决我的问题,主要是因为Django对POST是需要验证一个叫做CSRT的东西,然后AngularJs并不知道。猜测是这个原因吧,但是怎么解决,暂时不知。

分析

这次参加Hackathon不比上次,感觉自己在水平上比上次要有些提高,但却没有取得比较理想的结果。分析下主要有以下几点:

  • 测试过于晚,没有fail fast。这其实是后台一个很大的问题。本来,前后台的开发我觉得是越同步越好,后台提供了一个接口,前台就可以用上,顺带测试,这样可以检验前后台的正确性。而这次比赛没有做到这一点,因为前端的腿有些追求完美,而且用了这个AngularJs后,前台的任务又加重了不少,所以前台的进展特别慢,甚至于到了快结束时候的晚上,刚刚做完登录注册,这段时间之前后端的开发都是停滞状态,我跟旭爷甚至都有时间做别的。这也是我们没有沟通好的结果,没想到前台的进度会这么慢,等发现后端的登陆注册接口有问题的时候,已经有点来不及了。
  • 过于追求正确性。本来这种项目,追求的应该是快速开发,能实现基本流感觉已经就是胜利了。而我们组对正确性有着莫名的执着,老是想能处理各种情况,这实现进度肯定就慢了很多,这是显而易见的。
  • 分工不够科学。其实按照这种Django+AngularJs的方式,前端的任务是很重的,而我们只安排了一个前端,后端却有两个人,这样有点导致前端的任务过重,而在开发的过程中也没有意识到这个问题,总认为腿可以带飞我们,但是其实腿也受不住这么重的任务。

不过,这次参加Hackathon也是明白了一些比较tricky的小技巧,感觉可以分享一下。

  • 数据可视化绝对是一个很适合Hackathon的概念。这个从上次大众点评到这次交大的比赛都说明了这一点,任锐老师当时就说,这样的方式能把你的所有做过的事情,写过的代码,都展示出来。而Web等等项目,看得见的只是你的作品的一部分,看不见的后端是没办法展示的。可能这种方法看上去项目会很充实。
  • 完成度是关键。如果不考虑实现方面的问题,项目完成的风险会很大。这次感觉遇到好多组的创意都是非常非常赞的,但是最后听Demo Show的时候感觉实现得不是很完整,都只是一部分功能,这样就比较尴尬。

总结

其实我觉得这种活动都是一种学习型的活动,有木有奖品不是很重要,至少能在很短的时间内学到一些东西,这也是我在作业如此多的情况下选择参加这个活动的动因。得奖自然很赞,但是这个过程更重要。如果下次还有机会,自己不会再选择写Web了,因为感觉收获已经不是很大了,会选择尝试尝试别的选择,或者硬件。

你问我参加这个活动为了什么,我说为了学习,奖什么的都是浮云,我就明确告诉你这一点,至于你信不信,我反正是信了。

。。。最后恭喜熊神,周神的队伍包揽了所有奖项,干_(:3」∠)_

评论