开源我来了
——一个月-半个产品-多个开源
这一个月是忙碌的一月,从走出寝室一直到晚上12点左右回寝,忙忙碌碌,时间总觉得不够用~
这个月学习主要集中几个几个方面:
ios 股票portfolio产品的开发:
1)学习js,阅读了js精粹和coffeejs开发两本书,以及多篇高性能网站开发的blog。主要思考问题:如何保证界面数据的实时更新,界面数据显示的延迟问题,以及前端数据和后端数据之间的更新,如何更加高效的通信,以及数据和界面之间如何联系?
2)用titatium开发产品,这是一款一次开发,多平台应用的开发平台,是在eclipse基础上改进用于js开发的,容易上手
并基本上把titatium的文档阅读了一遍,开发了几个界面
3)要制作一个饼图和股票线图,查找了几个图形类库,如highchart和ichart,最后选择了highchart,利用highchart的chart和pie制作出来了线性和饼状图,另外highchart提供了highstock类库,方便开发stock线图,但总觉得不适用ios开发,更适合web开发。
这个要是有时间,可以用jquery mobile从写一下highstock,用于移动客户端支持; 基本上把highchart的图形参数也看了一遍。
4)重点:学会了查找开源,没有找不到,只有想不到。以前总向自己动手,丰衣足食,最近发现基本上你想实现的功能别人都已经做出了一个雏形,所以万事开头难,别人已经给你做出开局了,下面需要你自己做了。以后要多查找开源社区。
查找了多个crawler,用于爬sina、yahoo、nasdaq数据,如pystock-crawler,多个js类库,如moment,backbone,underscore等等
5)学习了一下backbone的基本用法,但如何更好的和titatium结合,还没有好的思路,目前backbone更多的用于网页面mvc模式开发。资料很多,还需要进一步学习。遗留问题:多次调用该model,如果保证每个调用者得到该调用者自己的更新数据,需要在backbone.collection中加入调用者的身份信息,并保持实时对调用者界面更新。
开源使用 numeral(整数转换格式)、moment(时间函数)、ios ui design、ios app ui 等
但自己的重心是否在这里?还需要探索,你是否要进入这样的公司,是否要喜欢做这样的岗位?你要不断的探索,不断的问问你的内心?
产品,技术,你需要思考?
成长在于思考的深度~
一个月很短,但记忆深刻,很喜欢和一群朝气蓬勃,有理想有梦想的小伙伴一起奋斗,和你们一起编程的日子,我很怀念~ 但年轻的心,让我重新不断探索,我终究要暂时离开的。
一个月,利用课余时间,尽可能把一个产品做好,但精益求精的过程发现,精益求精,每一个进步都需要十倍的努力!还记得7月中旬,我第一个版本,自己看着都觉得恶心,仅完成了基本功能,而界面,那个惨不忍睹~ 谢谢海底(花名)的耐心,细致,一点点的教导我如何调整UI,什么样的字体好看,什么样的颜色比较搭配,表格中的间距应该如何调整等等,折腾了一个下午,我的界面看起来有了点起色~
完成了第一个步,但自己的功能更多是在上一个同学的基础上搭建的,自己还未完整开发。接下来,开发ipad版本、开发stock版本、完善fund版本等等,都一步步的前进。后来把各个功能模块整合到一起时,就出现了多个问题。
1)数据同步问题,股票数据是否要实时更新?这样会给用户带来很大的流量开销。那怎么办了?而自己的获取实时数据api中又没有写停止和继续,但还是要修改的。
2)如果不连续更新,出现这样的一个问题,如何得到数据已经更新好了,之后才进行界面显示呢?等一段时间?那等多少呢? 在C或者C++的编程思想里面,对于这个处理难度有点大,而javascript提供了异步回调,我们可以给数据函数提供一个callback,当数据整理完毕之后,可以调用callback来通知界面进行显示;此时方知回调的魅力!
利用subscribe和update函数来实现数据和界面的实时更新,利用callback来数据完成的通知;
3)Titatium中的tableViewSection属性rows,是一个only read,无法进行赋值;开始对此了解不清楚,每次查询stock或者fund,得到的数据进行rows进行了修改,这样常常导致系统出bug,而且是随机性的bug,很难修改。后来进行了修改,直接对tableviewsection的整体进行修改,解决了bug。
4)tableview上的item连续点击的问题,由于数据响应慢,用户可能多次点击item,但每次点击都会导致数据的更新(即重新查数据库,带来性能开销),解决的方案,前端每次点击之后取消点击事件;后端判断点击的次数,超过一次丢掉;后端进行判断,有些难度,最后选择了前端处理;
5)利用了缓存机制,但每次得知有缓存之后数据不再更新,导致界面一致无法显示;这个主要问题是对数据提醒位置出错以及在得到缓存时,要考虑实时数据的重新获取;
6)每次从yahoo获取stock的实时数据,由于每次所有查询到的sym,都需要更新,会越积越多,最终超过200个,查询yahoo api,可能会被中断,提示超过200个sym。
7)注册和销毁问题,由于我开始实现的是,每个view都向同一个data进行注册,会有多个veiw向一个data注册,这样data更新时,会向多个view进行发送update操作,而最近的view更新就会很慢。解决的方案:每个view向一个data注册,每个data来控制一个view;
接下来要完成的内容
1)重新定义后台api接口,尽可能减少前端计算量,采用上一天收盘的价格作为portfolio的价格,前端一个节目采用实时,但还是已收盘价来实现,允许用户下拉更新;
2)实现left menu和right menu等等,更新right menu view,并且对search算法进行更新
3)增加用户数据,允许用户进行订阅,以及查看自己的portfolio。
有空多阅读一下Titatium的文档,对各个控件的机制有更深入的了解。