Visual Studio 技巧第一波

May 21st, 2010

最近上了微软的贼船,第一个不能适应的就是Visual Studio, 没有见过比它更加愚蠢的编辑器,没有安装Resharper的Visual Studio完全不可用,即便装上也和IntelliJ相去甚远,我打算把这一段时间使用Visual Studio的心得纪录下来,分享给所有人

在所有令我不爽的事情中,无法体面的运行测试是让我最无法忍受的,还好,这个问题可以通过配置VS解决。

配置Context Run:

Context run是指ReSharper会根据光标所在的位置聪明得判断出应该运行单个测试用例,还是应当运行整个测试套,配置方法如图:

context_run

配置Run Current Session:

Current Session是指ReSharper会重复运行上一次Context Run运行的测试。这在进行TDD开发时尤为有用,配置方法如图:

current_session

我的生活有一大半的时间和IDE打交道,任何一个可以让操作节省一点点时间的优化,对我来讲都是值得的投资。对这一两秒追求的差异,也造成了程序员和卓有成效的程序员之间的差别。

Dot之美

April 11th, 2010

作为一名开发人员,我的理想世界是一个逻辑化的、简单的、有序的世界,而画图,则是这个世界上空的一朵乌云,因为

它不简单:

  • 会有十几种方框,几十种箭头,有阴影的,没阴影的,有3D效果的,有圆角的,我的选择障碍综合征每当这时就会发作。
  • 它不能以简单的文本方式表现,没法通过版本管理工具跟踪每一次修改。
  • 它的维护成本很高,挪动已经作好的布局,添加一个新的元素都非常耗时。

它不逻辑化:

  • 在于其中很大一部分工作是让它变的好看,譬如对齐,譬如使用合适的箭头…

在寻觅了很久后,我发现了dot,  它是使用纯文本描述图形的语言,它本身是一种语言规范,不同的实现,譬如Graphviz , Grappa等。

让我们从一个工作流开始,学习如何安装dot,定义dot language,  生成gif格式的图。

头脑中工作流

Curves workflow

Curves workflow

这是我头脑中的工作流(我用BrainCapturer工具截的图)我试图去构建的用于描述Curve文档流转的图表,其中需要包含各个角色的职责,各种状态跃迁的条件等。

安装dot

像其它好用的工具一样,dot对于linux和mac非常友好。

linux aptitude包管理器

sudo apt-get install graphviz

mac port包管理器:

sudo port install graphviz

Windows用户可以从http://www.graphviz.org/Download..php下载并安装

安装成功后,运行

dot -v

应当可以看到

dot – graphviz version 2.22.0 (20090304.0156)
Activated plugin library: libgvplugin_pango.6.dylib
Using textlayout: textlayout:cairo

用dot描述上述工作流

digraph G {
Start                   [label="Start", shape="box"]
Draft_In_Sandbox        [label="Draft", shape="box"]
Ready_For_Publish       [label="Ready For Publish Curve", shape="box"]
Approved                [label= "Approved Curve", shape="box"]
Published_Curve         [label="Published Curve", shape="box"]
Deleted_Curve           [label="Deleted Curve", shape="box"]
Inactive_Curve          [label="Inactive Curve", shape="box"]

Start -> Draft_In_Sandbox                      [label = "Create the curve"]
Draft_In_Sandbox -> Draft_In_Sandbox           [label = "Testing the curve"]
Draft_In_Sandbox -> Ready_For_Publish          [label="Mark as Ready For Publish by owner"]
Ready_For_Publish -> Ready_For_Publish [label="Testing the curve by risk admin"]
Ready_For_Publish -> Approved    [label = "Mark as Approved by risk admin" ]
Approved -> Published_Curve      [label="Published by IT admin"]
Published_Curve -> Deleted_Curve [label="Deleted by IT admin"]
Deleted_Curve -> Published_Curve [label="Restored by IT admin"]
Inactive_Curve -> Published_Curve[label="Reactivate the curve"]
Published_Curve -> Inactive_Curve[label="Activate the curve."]
Published_Curve -> Draft_In_Sandbox[label="Edit/Rename the curve."]
}

这段代码已经自解释了。我就不再浪费口舌了。dot 的语法很简单,对大脑也非常友好,譬如
  • 不需要任何关键字,使用alphanumberic即可定义节点
  • 有向连接 nodeA -> nodeB
  • 无向连接 nodeA — nodeB

生成图像文件

  1. 创建文件workflow.dot
  2. 拷贝上述内容至workflow.dot
  3. 在命令行中运行 dot -Tgif workflow.dot -o workflow.gif

dot支持不同的输出格式,-T 选项用于切换不同的输出格式。

至此,我们便完成了一张图的从最初的构想到最终实现的过程。

dot之美在于简单,在于它定义了一种DSL, 让我可以专注在定义工作流本身。在于定义状态的变迁,维护这张图片,跟踪这张图片都变得简单, 甚至创建图片都变成了一种令我非常愉快的工作, 这种Geek的工作方式是我的至爱。

最后,大家可以去dot画廊看看专家们创建的图片: