Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2014-08-06) 2014-07 月结

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

2014年7月,真是超级繁忙的一个月。这个月主要做了这几件事:

  1. Scala workshop持续进行中
  2. 参加硬件技术大赛,展示了作品"无敌方向键”
  3. 对项目的scala代码进行了重构
  4. 把前端框架AngularJs引入到项目中

Scala workshop

Scala workshop参与的人越来越少,现在基本上只剩下几个有scala项目的组的人在参加。想想原因应该有这几个:

  1. Scala的学习门槛太高,如果没有强烈的学习兴趣或项目压力,基本上难以坚持
  2. 组织经验不足,想当然的定出学习计划,到最后无法实施
  3. 备课难度高,常常为了准备一节课,需要一整周的业余时间

不过好在坚持下来的,都有强大的动力。所以还是要继续坚持下去

硬件技术大赛

由西安硬件小组举办的“硬件技术大赛”,终于开始了。我的作品是名为“无敌方向键”,是一个很小的硬件装置,可以放在键盘空格键的旁边,用拇指轻触来向上下左右四个方向移动光标。这里说的“光标”,是编辑文件时一闪一闪的那个竖条,而不是鼠标。

想做这个东西,是因为平时写代码时,虽然已经做到了大多数时候通过快捷键可以让手指不离字母区,但移动光标时,还是不可避免的要让右手离开,向右移动按方向键。当看到西安硬件小组的session里,介绍可以用arduino这种开源的硬件开发板与电脑交互时,我想利用它来实现这个功能。

最开始有多种方案,比如触摸屏、触摸条、轻触开关、滚轮、轨迹球等,但实现过程中,多数因为找不到合适的硬件而放弃,最后将黑莓手机的轨迹球改装了一下。当我们用手指轻触上面的小球时,它会在四条不同的线路中发送脉冲,Arduino通过我们编写的程序发送相应的方向键代码给电脑,就能操作光标的移动。

对项目的Scala代码进行重构

新的项目组中,各项目都是用scala做的,其代码存在一个比较大的问题:在一个共用的项目定义了一个abstract的入口类,定义了程序启动时的各种流程以及需要子类提供的配置,其它的项目都将继承并扩展它。

这种做法有很大的问题,因为这个基类实际上已经是一个“考虑不周全的框架”了。子类只能在有限的扩展点上添加自己的代码,而无法改变预定义的流程。详细的问题将另写博客说明。

经过跟客户的沟通,我跟一位有经验的同事一起,对它们进行了构重。我们去掉了共用项目中的子类,把它们分解成一个个独立的组件。在子项目中,程序的流程由子项目决定,只在需要的时候,从共用项目中挑选合适的组件拿过来用。重构之后,代码看起来比以前整洁很多。一位同事说“我看现在的代码,感觉到有一种美感”。

这是我第一次对Scala项目做重构,收获很大。在这个过程中,深刻体会到了Scala类型系统的优势:项目中几乎所有的类都动了,包括很多测试类,但是当我修复了所有的编译错误后,居然一次性跑过了所有的测试,真有点不可思议。

项目中引入前端框架AngularJS

项目有越来越多的代码需要由Javascript在前端进行操作了。我们讨论了两种方案:

  1. 继续使用jQuery、underscore这种工具库操作,不采用框架(如backbone)
  2. 采用AngularJS

最后决定使用AngularJS。我和另一位同事有过使用这的经验,倾向于它。

但引入前端框架,实际上是引入了整个工具链。各种依赖管理、单元测试和集成测试,这一套东西弄下来,是一条相当长的链子:

  1. npm - 各种开发时需要的库的管理
  2. grunt - 构建工具
  3. bower - 页面和测试中需要的库的管理
  4. AnguarJS - 前端框架
  5. Karma - 主要用来跑单元测试
  6. Protactor - 主要用来跑e2e测试

为了把这一套跑通,花了大量的精力。为了不耽误其它同事的工作,我必须冲在最前面,把所有遇到的坑都填平。好消息是,基本上所有的坑都填平了,坏消息是我病了一场。

总结

繁忙但是非常有收获的一个月

comments powered by Disqus