关于Textmate:我的同事都很不喜欢Textmate,总结并回复一下他们所说…

关于Textmate:我的同事都很不喜欢Textmate,总结并回复一下他们所说的原因。

  • 中文显示难看,这个是暂时解决不了的问题,是TM的硬伤。我也很讨厌它,凑合使用瘦体解决。
  • 讨厌它的上下文切换,不喜欢Cmd + T的快速导航,而喜欢左右Tab切换。我坚持认为左右切换Tab是开发者的一个坏习惯,尤其是两个人在结对编成的时候,一个使用缩写的导航远比眼花缭乱的切换左右(尤其是跨越多个的时候)要容易理解的多。所以我在使用Eclipse的时候也推荐同事使用Cmd + e,可是Eclipse让我不喜欢的地方是它排列context的方式是固定的,而不像TM一样是根据访问次序和频度。
  • Django的结构的文件名重复,所以Cmd + T的导航不太好用。这个我想是Django的一个痼疾,非常不友好。一个正确的文件命名可以帮助开发者快速定位代码片段,也帮助你把庞大的代码文件差分开。而Django居然默认了views.py、models.py、forms.py、urls.py,如果每样都有十几个到几十个的时候定位他们是多么烦人的一件事?但是如果有了一个正确的命名以后,用缩写定位他们是TM的杀手锏。相比之下Eclipse和Intellij都使用的是类似grep的搜索方式,只有TM是更聪明的模式匹配。
  • 同事讨厌TM的目录树显示,很小,而且目录排列是按照字表顺序,很不舒服。我觉得我的确也不喜欢它,可是幸运的是我很少和它打交道,因为目录操作我大部分情况下都使用Terminal。还有个很爽的功能就是在TM里面你用Cmd + T打开一个文件以后可以按Ctrl + Cmd + r在目录树中定位这个文件。所以终极使用方案就是搜索优于人工扫描目录。
  • 有人感觉TM的语法高亮差,也有人balme TM的HTML bundle里面连a的内置模板都没有。的确如此,可是1来你可以自己扩展,二来是在Eclipse里面我的同事估计从来没有用过任何快速模板功能……
  • Rails的自动完成是基于上下文的,我觉得大部分时候它已经很够用了。不过没有静态语法检查好像的确是不如Eclipse的Pydev,但是速度上TM从此收益要快于Pydev很多。
  • 最后是版本控制集成。同事们很喜欢Eclipse内置的Subclipse和Subversive,不过这两个东西我都很讨厌,因为如果你没有配置好Java HL的方式访问Svn,那么你就不能在命令行使用svn,否则你的svn功能就会崩溃。我简直想诅咒这个倒霉的问题……相比之下用了Textmate,你有天然的svn bundle,还可以轻松安装hg和git的bundle,让你的开发很清爽。而且它对于在极力推荐git svn转型的情况下非常适合。反正源代码集成功能不是我选择Eclipse的理由,反而是我放弃它的理由。
  • 命令行下的mate让我工作变得很轻松,因为mate .马上就可以开一个新的TM工程,很便捷,轻量。
  • 最后是Python的tabs和space缩进。TM处理的很好,只要你设置Soft tabs ( 4 spaces)使用起来就没有问题了。

最近被开发团队的成员blame的几个错误: 一个从老系统导入新系统的脚本,其中…

最近被开发团队的成员blame的几个错误:

  • 一个从老系统导入新系统的脚本,其中一些是订单导入,还涉及到相关订单的支付问题。结果这个脚本创建订单和支付的操作没有声明事务,而是默认的在它们自己的事务完成后自动提交。结果其中一些因为帐户余额不足无法支付的订单被创建了,造成账目对不上。这个错误的教训就是在复用系统逻辑的时候一定要用心察看事务边界,而且对于导入脚本这样的脚手架也一定要对“事务”有个弦,不能忽略。
  • 一个Django的项目,在重构阶段,一些包正在逐渐被移动到心的地方,我们测试环境中manage.py runserver这几日都正常,但是部署的时候发现mod_python部署报告一个模型无法Import,而后同事又换了mod_wsgi,但是问题依旧。他们用bisect的方法找到了开始出问题的revision,这个revision是我提交的(我那天solo),但是仔细看了diff也很难找到问题,经过多次尝试发现是某一个import后出问题。先开始李明同学怀疑是我用textmate的时候混用了tab和space,但是后来发现问题不它。他们最后定位到这个诡异的问题是循环依赖造成的,虽然说不出具体的问题在哪里,但是经过一些包移动后问题解决了。这个教训是不要太相信Django和脆弱的Python的提示,遇到问题要多怀疑python脆弱的包依赖管理。当然这不是主要问题,对于这个问题也许我们要做的是频繁的部署,这样我们就能早些发现这个问题了。