Posts tagged ‘经验’

gvim二三事

终于下决心苦练Vim工具了。通过一段时间的实践,我发现Vim给人的优越感就是,快捷的操作来自快捷键,越纯熟越高效,这跟从小被逼着练五笔一样,越是看着困难的玩意儿越是有提升潜力。玩Vim是个不错的体验过程,首先第一个上来就是锻炼毅力,都怪我们平时被IDE宠坏了。

下面记录些配置_vimrc(gvim的配置文件,在根目录)的东东。

设置字体

默认的字体很挫。_vimrc里可以修改,在任意空行写以下语法

set guifont=Lucida_Console:h12

字体是Lucida Console(记得要“_”连接),h12是字体大小。

配色方案

可以修改为黑底白字(我觉得这样对眼睛好)

colo koehler

打开颜色高亮,语法支持

安装文档里有syntax文件夹,储存各种语法文件为各类不同的文件类型提供支持,比如python.vim,就可以在编辑py文件的时候提供语法高亮等功能。具体的做法,可以把python.vim的内容copy到_vimrc里(粘贴在原内容后面),然后激活syntax:

syn on

显示行号

set nu

Factors of Project success

这里感谢sino-edu的讲座。能影响IT项目的因素实在很多,这里我就讲座中提到的几点来谈谈自己的看法:

  • 技术缺陷
    这是任何项目所面临的客观实际,再好的管理再好的process,如果缺少有技能的人才,或者面临技术局限性的话,那是巧妇难为无米之炊。很多时候,由于沟通的问题,造成这类问题发现滞后,更是杯具。
  • 缺少计划
    实际上我们已经很注意计划了,计划赶不上变化时其次,关键是没有持之以恒的计划,为了计划而计划,随着时间推移,计划只成了白纸一张。在我看来,原因可能就是管理水平不到家,另外对管理所能带来的效益没有信心,还有就是人的惰性。
  • 变更
    Scrum拥抱change,可是很少有人打心里喜欢change,原因很多啦甚至可以上升到社会问题,不谈。
  • 缺少高层支持
    可能我碰到这类事情不多,基本上资源也够。只是很多时候boss都爱节省,我们不能怪他们没远见没魄力,人都是喜欢拿钱而不喜欢被拿钱对吧。
  • 缺少用户参与
    这应该是最最关键的一环了,在我看来。应该也是我们最有可能积极的去填补的环节。但实际情况呢,用户并不是那么好搞定,没办法,每个人利益各不相同,很多时候必须灵活处理。不过我也相信,好的沟通一定是有利的,我们需要一定时间来把脑筋转过来而已。

localhost下模拟慢网速

Flash IDE 可以为调试的swf模拟网速来测试进度条。如果是Flex builder呢,似乎是没有的,不过千万别在这个问题上钻牛角尖,因为这实际上是本地服务器的职责,而不是flex builder该干的工作(flex builder编译完成并启动页面后就结束任务了)。

在这种情况下要为flex模拟慢网速的话,就要使用proxy工具了,我这里推荐ServiceCapture,当然很多http检测工具都带有模拟网速的功能,我选serviceCapture除了它能检测http,还能读出trace和AMF协议,简直是Flash专用工具。

首先你需要安装serviceCapture for firefox 插件,让它“干预”firefox上的调试。

sc_1

sc_2

然后所有在firefox里发生的http和AMF连接都会被记录下来,serviceCapture “中转”了firefox的请求,这样就能人为的拖慢网速。

sc_3

避免try catch,提升Flash性能

在一些实时性能要求比较高的应用中,如3D,try…catch处理错误会严重的影响性能和执行效率,应该尽量使用判断语句来代替。为此我有个实验。

if (theOldIndex >= 0 && theOldIndex < this._cache_pop_yw_zws.length)
{
	_gra.lineStyle(1, 0xffffff);
	_gra.beginFill(colorFront);
	_gra.drawCircle(theCachedArr[theOldIndex].x, theCachedArr[theOldIndex].y, 6);
	_gra.endFill();
}

这里主要是为了不让theOldIndex溢出造成错误,如果每次ENTER_FRAME都是用try catch来判断,大概用getTime测试的执行时间会大上一倍多,太杯具了。因此尽量要预见可能出现的问题,有时情愿写code麻烦点。我想这也是c可以长盛不衰的原因吧。

Flex builder 配合 FlashDevelop开发模式

每次谈到Flex builder和FlashDevelop这两个工具总不免比较一番,其实两者各有优点为什么不互补一下呢。事实上我在实践过程中,觉得有些情况下两个配合着用非常不错。FlashDevelop有轻便的优势,代码提示很好,而Flex builder支持Flex framework,支持可视化开发,搭建UI快捷编码量少。

什么时候配合着用比较好呢。那就是开发AS类库,类库用FlashDevelop开发,轻便快捷,而测试使用Flex builder,快速构建UI来显示效果,提供参考。

通过观察FlashDevelop project的文件夹可以发现,基本上FlashDevelop和Flex builder的布局是差不多的,source code放在src里,编译文件放bin,类库放lib等等。于是就有两种配合方式可供参考:

  • 叠在一块儿。先用FlashDevelop建一个project,然后Flex builder也建在同一个位置。
  • 分开建project。Flex builder使用external source path来链接类库代码。

显然第二种方式更好,可以有效的将测试代码和类库代码分开。

作坊式软件公司,如何面对紧迫项目

来自:http://zhudonghua.cto.csdn.net/Article.aspx?Name=zhudonghua&pointid=2046

作者:祝冬华

(非常具有实际意义)

如何面对紧迫项目,如何控制项目的进度?我一直在思考这个问题。
不论积极文化建立的怎么样,不论公司对员工的信任和员工对公司的信任达到什么样的程度,最终的目的就是高质量、高要求、并在可控的时间范围内完成项目。项目带来利润公司才能生存。

然一个现实是:我们所在的软件公司,大多是作坊式企业。有的是令人绝望的管理质量、开发模式和管理层。最可悲的是,管理层的保守性,并且地位不可动摇。于是,营盘是泥塑的,员工是流水的。项目也就变成不可控了。

面对这种情况,只有死马当活马医了。在急迫的项目面前,所有的敏捷开发、CMM、PSP、TSP、RUP、完善的管理开发流程等等都是遥远的事情。所以就近有效的处理才是有效的办法。

第一:文化使之。必须让所有参与者明白,我们是如何的紧迫,项目是如何重要,每个人的作用是如何的关键。大家唯有奋勇杀敌,才能求得生存。通过激发大家的热情,激发士气。

第二:合理使用工具。合理的使用工具,可以使工作事半功倍。例如:版本控制工具SVN,文档编写工具WPS Office 2009(几乎与Word2003一样,而又不收费),脑图工具,Visio,project,bugfree等。

第三:任务部署。项目负责人需要第一时间快速做总体分析,现状汇总,并将任务分解,并用project制作Gantt chart。然后将任务分配下去。做这些工作的基础是充分沟通。

第四:控制项目的进度。项目负责人每天要把项目状态汇总,并及时更新每天的Gantt chart。第二天早上,要一早开项目组短会,并报告项目的进展情况。对于表现突出的成员,要表扬;对于落后的成员,要鼓励。最后,要团结所有项目组成员,将使他们士气高涨。

第五:加强内测。项目开始后,首先要改善测试环境,其次改变大家的测试观念(很多软件开发者,就是把程序跑一遍就认为通过了),使大家做好充分的测试,并及时的发现缺陷并修复。项目达到相应阶段后,要交叉测试。

第六:加强思想工作。对于出现思想或工作未达到要求的人员,一定要做好思想工作。一定要了解他工作未达到要求的原因,并及时帮助解决。最终要的结果是,将落后的工作,及时补回来,并重新高效率工作。

第七:要团结所有项目组成员,千万不要有划分他们,不分彼此。所有人,必须明白:兄弟齐心,其利断金。

第八:要及时安排加班很晚的成员,及时休息。项目负责人,要做好后勤工作。(比如:解决就餐,临时住宿,交通费用等问题,这些问题一定要及时解决)

第九:要及时分享项目阶段性成果。一是成果与总结会议;二是项目组聚餐;三是精神奖励(奖状,小物品,优秀员工等);四是物质奖励,这个视实际条件定。

最后呢,项目必须要成功。

AIR开源项目教程系列(三)测试与涂鸦并举

终于到了编码阶段,写code大家都熟悉不细讲,有兴趣可以上svn下载jonFTP的代码,带有一些注释应该容易看懂。我这里要谈到的不是如何写code,而是写code的过程。在此之前,有些知识需要提前弄明白(每个AIR项目都有不同的知识基础,要在编码之前学习,边学边写不是啥好习惯),如FTP协议,命令等。

就我个人来讲,测试驱动和设计图是两条主轴,两条故事线。而设计图应该在测试驱动之前。

设计涂鸦

是UML吗,不一定,设计图主要是为了理清思路,知道哪里抽象,哪里改写。基于这个目的,是不是UML,要不要遵守UML语法并不是问题核心,关键自己要有数,看不懂不行。而设计图也应该先从逻辑层开始,下面是我涂鸦出来的JonFTP的架构:

GLFTPClient

这里最重要的就是GLFTPClient,GLProcess和GLGroup:

  • GLFTPClient代表一个session,管理socket,处理发送和接收字节。
  • GLProcess代表一个处理单元(将FTP命令分类管理,组织成不同的逻辑单元),是个抽象类,子类都是具体的逻辑单元,比如GLList,就是取得当前远程路径下的文件信息。GLProcess向GLFTPClient发送指令,并分析GLFTPClient获得的字节。
  • GLGroup,一个特殊的GLProcess,管理逻辑组合,比如批量删除,上传和下载。

这只是一个大致的结构(实际上我都是在草稿纸上画的),反正就一个意思。设计图帮助你理清逻辑层的架构,时时刻刻保证路线正确。

差点忘了,时刻重构来修改设计图。

测试驱动

我不是要讲TDD怎么怎么好,这里只是要提醒,时刻准备好测试你的代码,如果你先有算法,那么就测试算法;如果你有一些单元功能,就准备一个简单的UI来展示一下。反正就是说,时时刻刻要测试你的工作。这样可以尽早发现问题。

一个月培养一个好习惯

读了本好书,名字就叫《一个月培养一个好习惯》。内容不介绍了,有兴趣的朋友可以搜索一下或者买本。

光看题目就知道这是一个有益身心的东西,让人深有感触。很多的时候,我都想每天早起晨练,每天坚持读英文,每天写好博客,可是往往都坚持不下来。究其原因,缺乏恒心是关键。不过我现在知道了,缺少好的科学方法也有一定因素。培养一个习惯也要慢慢来,先从简单的,可以量化的小事开始,让自己不断的获得成就感,对“未来的坚持”也是一种鼓励。

如果你也有类似的苦恼的话,来加入“一个月培养一个好习惯”的行动吧。

AIR开源项目教程系列(二)细化结构设计

假设之前已经有一张列表,描述操作流程(也就是初定下的需求)。下面就可以开始设计程序结构了。我觉得,拉起来就写code并不是多好的习惯,至少脑子里也该有个结构概念吧。

还是MVC

MVC是个永恒经典的结构模型,不光可以脱离UI的束缚,而且可以让人形成一种习惯,就是,没了UI也叫程序,让逻辑决定程序的走向。试想下,如果AIR项目没有UI那算啥。设计就要先从没有UI开始。这一点,flex和flash做得不是太好,因为程序的开头总是sprite或mxml。

所以说,细化程序结构的第一步就是拆分逻辑层和视图层。拿JonFTP为例,现在抛弃UI的概念,试想下一个FTP流程该什么样子。登录,上传,关闭。一个主要的流程就是如此。

workflow1

workflow1

若干流程的集合就是逻辑层,不需要想的太复杂,比如用户该怎么选怎么点,这是视图层该干的事情。

怎么把若干流程揉合在一起

我以前总是到最后才考虑怎么把各个功能综合起来,其实它应该在考虑细节之前考虑。比如上面讲的,登录,上传,关闭是一条路,登录,上传,下载,关闭也是条路,中间的操作可以任意组合而不应该含有冲突。也就是说,无论怎么变化,有几点是肯定的:

  • 登录,关闭一定是一条流程的首尾
  • 中间的操作可以任意变化,且不能相互冲突
  • 流程之前不能有联系(新的session需要用户身份)

于是,我就设计了这么个结构:

  • 准备一个“工厂”,产生,托管和消灭一条流程(Session)
  • 流程以登录操作为开始,以关闭操作为结束
  • 任何操作方式(包括登录和关闭)设计为独立的过程(process),过程之间可能要有联系。不要忘了,过程组合也是过程的一种。

初期我是这么考虑的,到了后来还是出现了一些变化,这是后话。

转换到计算机语言

有了上面的“大白话”结构,就可以用计算机语言(AS3)来描述了。相应的就是:

  • 准备一个全局的FTPClient类,代表一个session,实例由工厂方法或者工厂类产生。
  • 准备一个树状的继承结构,顶层为CProcess,代表一个过程(向FTP服务器请求并获得数据,解析),子类包括一个CGroup,可以add若干个CProcess,它代表一个过程组合(比如批量删除)。
  • FTPClient接受CProcess作为输入,执行并处理数据,CProcess以事件方式通知UI执行成功与否。

初期的设计就是如此,不过随着开发的进展,肯定会有修改甚至是推翻。不过都是正常的。这里总结下我的设计步骤

  1. 拆分逻辑层和视图层
  2. 先设计逻辑层
  3. 逻辑层以流程(session)为主导,不可依赖用户操作
  4. 以书面化形式描述各种流程,并寻找相同点和不同点
  5. 转换用计算机语言描述,并形成一个大致的架构
  6. 开发过程中不断修改

FlexDbg试用 — debug plugin of FlashDevelop

FlashDevelop这个IDE本身是不带断点调试的,但是可以通过插件的方式来支持。FlexDbg就是这么一款好用的插件(下载见这里)。使用步骤如下:

  1. 下载(废话)最新版zip包
  2. 打开FlashDevelop的安装文件夹,进入Plugin文件夹,将下载的zip包解压到这里(几个dll文件)
  3. 打开或重启FlashDevelop,应该发现menu上多了debug选项
  4. debug的方式几乎和别的IDE没啥不同,不过注意了,不再是点“Test Movie” 这个蓝色小箭头来启动debug,而是menu->debug->Start,要用菜单栏的。

我的感觉,FlexDbg的调试跟visual studio感觉一样。开发AS没有断点调试功能怎么行,快试试看吧。