黑客马拉松活动小记

活动
上周的周末(5/5-5/6), 我们参加了 黑客马拉松 活动, 简单点的介绍, 就是一群程序员/美工/产品经理, 花费1整天的时间, 鼓捣出一个酷的东西。 黑客的文化在于创造, 分享, 进步, hackathon的活动是黑客文化的一个体现。
过程
参与活动可以考虑预先组队和现场组队, 我们是预先组好的, 4个人: 我(GuruDigger), 蔡金(GuruDiggger), 吴杰蔚(住隔壁, 交大硕士), 周航(EMC云存储), 准备做的产品, 是我的一个Idea: 豆瓣match , 通过豆瓣上面的喜好资料, 来寻找志同道合的对象。
一天时间非常的紧张, 我们提前一天的晚上, 小聚了一下, 讨论了一下产品, 以及具体的分工。 我负责web前端和数据挖掘算法, 吴杰蔚考虑推荐算法, 周航负责爬豆瓣数据, 蔡金负责页面设计。
黑客马拉松举办的场地是在江湾体育场的创智天地, 我们早上9点开始, 到了现场, 我们抢了一个靠近门的位置, 没有理会现场的举办方, 直接开工了。
我把网站的架子弄起来(rails), 我们在如何让ubuntu默认安装的mysql可以让其他机器访问到这点上花费了比较多的时间, 然后上午的时间就结束了。
中午在现场吃饭, 也是社交的时间, 到处找人聊天, 以及认识新朋友。 平时很少有机会聊的一些话题。
下午的时候, 我遇到了技术问题: 基本上的时间都花费在了如何让豆瓣用户登录这一块上面。 我本来采用的是 omniauth-douban , 花费了大量时间, 流程还是没有走通顺, 后来换了道哥的 douban-ruby , 看懂了豆瓣oauth的逻辑, 总算实现了登录和替用户发豆邮的功能。 周航这边导数据也遇到了一些问题, 不过总算都搞定了。
开发期间, 抽空去看了一下其他团队。 团队采用的技术区别还是比较大, ruby, python, java, node.js, objective-C, 还有一组是用.net的, 现场学习新的技术。。 采用的开发工具也百花齐放, eclipse, Xcode, emacs, vim, sublime, textmate... 如果是非技术的人过来, 看大家的电脑屏幕, 是搞不清楚大家在做什么的。
就做的东西而言, 大多数还是以做产品为导向, 有做团购搜索的, 有做青年旅社查找应用的, 有做平台的, 都是大东西啊。 让我眼前一亮的只有一个: 基于js+webgl的3D小游戏。 引擎是组里面一个做游戏的牛人现场写的。 我觉得这个产品算是最符合黑客精神的了。
晚上我的精力不足, 效率低下, 不过把网站的整体流程跑出来了。 10点钟我们离开场地回去, 我和蔡金整理好UI, 然后我把整体流程跑顺, 处理bug, 我弄到了4点才去睡觉。 不过, 产品的完成度总算是能够应付第二天的展示了。
第二天7点半我起床, 和蔡金一起去场地。 这一天都是展示日, 没有我什么事情, 就在下面休息。 最后的结果是, 我们的产品得到了三等奖, 应该算是理所应当的吧。 第一名是Chop, 一个聊天的产品。

小结
就开发而言。 我觉得有些可以总结的:
- Hackathon活动一天都应该处于一个集中精神做事情的状态, 我前一天没有休息好, 造成这一天精力不充沛, 时间效率不高。
- 为了更好的产能, 可以做的是提前把技术细节都准备好, 现场做的只是拼装, 但是我觉得这样就太作弊了, 不算是好的行为。 毕竟现场搞定问题才是意义所在。
- 开发的时候, 因为分工做好了, 沟通链减少很多, 基本上都在全力开发中。
- 一天的时间非常紧张, 项目计划需要弄好。 我们还是错误预估了工作量, 预期要做的根据喜好推荐用户的功能没有做出来, 只能通过部分的随机来模拟一个效果。如果还有下次的活动, 一定要考虑清楚工作量。
- 成功的很大因素靠产品设计, 在这点上面蔡金考虑产品考虑得很好。 直截了当地解决问题。
然后就是本次活动:
- 黑客精神应该是用技术的方式巧妙解决问题。 参与者做的大都是产品导向, 解决问题的方式也不是很开创性质的。 只能算是做出来一个东西吧。
- 奇怪的评委, VC或者公司大员, 有人还提问“你们的盈利模式是什么”(我把这个当成一个笑话来看), 如果这个活动是以产品开发为主题还差不多。 但是不符合“黑客马拉松”的气氛。
- 和硅谷双线举办的效果不好, 基本上是双方分开做自己的事情。 这样就没有太多的意义了。
- 我觉得应该得到第一名的那个3D游戏连第二轮都没有进入, 在这样的评委组成下, 意料以外情理之中。
我觉得让开发者们时不时地聚在一起, 花费一天两天的时间做一个小原型的活动很有意义, 但是不应该像本次活动一样办成一个大会形式了。 如果下次还有类似的活动, 我还是会去的。 然后我会考虑做一个更有黑客精神的东西。
建立时间: 2012/05/07 15:01:00
旧 TDD 测试驱动开发
TDD是这样一种开发方式,引用至wikipedia,以及中文:
利用测试来驱动软件程序的设计和实现。

具体内容我就不多说了,网络上面的资料很多。
我没有试过TDD,比较像样的测试也没有做过,所以没有什么权力来评价TDD,
考虑到我们公司现有的开发流程--谈需求,开发代码,测试,验收,
以及我们公司经常出现需求变更的状况,TDD可能可用,下次开发时要实际应用一下。
建立时间: 2012/05/01 22:08:00
旧 unix的哲學
-- 发布时间: 2009-06-08
以前看過UNIX編程藝術一書,里面提到了unix的哲學,以及對應能夠帶來的好處:
問題分解為子問題:
好處在于解決方案可重用,針對單一問題的解決方案可以得到改進的機會。
統一接口(文本方式,采用輸入流,輸出流,錯誤流),UNIX強大的管道功能:
好處在于使得多程序間通信成為可能,人也能在這個過程中觀察程序的運作方式。
開放源碼:
邀請用戶參與改進源代碼,以程序提升為目標,使得程序能夠傳世。
可配置,可自動化:
程序的配置可以通過寫配置文檔和調節參數來完成,而程序執行也可以完全交由計算機來做,完全解放了電腦使用人員的人力。
雖然有些點在實際的應用中會有些限制(因為市場,政治,成本等原因),但是這些精神可以指導我們在軟件,甚至生活方式上面得到進步。
建立时间: 2012/05/01 22:08:00
旧 为什么不要使用linux
因为一个朋友的博客更新, 我重新登录了博客大巴, 偶然发现自己的旧博客, 就补救了几篇博客回来 年岁已久, 重新整理在这里。也算是一份历史资料吧。
-- 发布时间: 2008-02-15
我从大三开始,使用linux(主要是ubuntu)已经有快4年了,linux操作系统已经成为我生命的一部分,即使在工作中,我不得不使用windows(我是一个delphi程序员),我还是带着自己的笔记本,装上linux,来远程登录到工作机上面。
但是我很不建议其他人投入到使用linux上面来,这是因为每个人都有不同的需要,以及在不同事物上面需要付出的成本。选择操作系统,还是要依靠自己的判断。
我使用linux,主要是因为我对于编程上面的兴趣。linux主要是一个学习的工具。linux的优势很多,操作系统设计的优良,不用担心病毒与 木马,免费的价格,优秀的软件和社区支持。。。但是,这些都无法改变linux本身功能上面的希求:它从根本上面来说,是黑客的操作系统,而不是普通人的 操作系统。黑客们没有足够的动力和精力来为普通用户设计一套用户友好的操作系统。
于是微软出现了。它的努力,让普通人有使用计算机来提升效率的可能。即使它的操作系统容易死机,不稳定,低效率,有种种东西来破坏我们的数据,但 是,至少比一个需要花费相当多时间来学习的黑屏命令行世界要好的多。而windows的高价格, 和由此支撑起来的微软帝国,则是普通用户对他们的肯定。
如果你能够忍受操作系统需要自己手动输入语句来设置,如果你能够忍受在遇到问题的时候只能登录到外文社区上面去寻求帮助,而不是身边的同学,同事, 如果你决心学习操作系统的各个方面,从文件系统格式,各个复杂拗口又没有什么索引帮助的设置系统,还有包括alsa,oss,X,acpi等技术性的底 层,而这些又只能给专业的计算机行业人士带来利润的知识,最重要的是,你在这一切之后还是本能地使用linux作为第一选择的操作系统, 那么你就大胆使用吧──估计世界上也没有什么困难能够阻止你了。
ps:
说微软垄断的,想想,是不是所有人都有权利开发操作系统获利?垄断只于市场的约束条件有关,即使市面上只有一家公司的产品,那也是市场自动优化的产物。以后我会写一篇文章来论述这一观点(其实是个合格的经济学家都知道,只有行政垄断才是真正的垄断)
建立时间: 2012/05/01 22:08:00
旧 为什么不要帮助穷人
因为一个朋友的博客更新, 我重新登录了博客大巴, 偶然发现自己的旧博客, 就补救了几篇博客回来 年岁已久, 重新整理在这里。也算是一份历史资料吧。
-- 发布时间: 2008-02-15
帮助穷人就是断绝他们自力更生的路。
帮助穷人就是养懒人,养没用的人。
帮助穷人就是给穷人找拒绝变富的借口。
帮助穷人侵犯他们的人格。
帮助穷人就是对所有其他人说:我希望世界上的穷人更多。
帮助穷人就是共产主义──这就是为什么共产主义搞不好的原因。
帮助穷人就是让自己和穷人交朋友。
帮助穷人就是让自己和穷人混在一起。
帮助穷人就是让自己象穷人一样思考。
帮助穷人就是让自己变穷。
建立时间: 2012/05/01 22:08:00