CodeSmith使用心得

CodeSmith是一款著名的代码生成器,可以帮助开发者完成一些重复性的劳动,并且能够保证更高的代码质量。CodeSmith使用Template(*.cst )模板进行基础代码片段的定义,支持语言包括C#, Java, VB, PHP, ASP.NET, SQL等等。

CodeSmith

一个简单的Sample

CodeSmith使用的模板使用方式类似于aspx/jsp页面,也就是基础代码+脚本的方式,大致代码如下(官方的sample2)。

<%@ CodeTemplate Language="C#" TargetLanguage="Text" Description="This template demonstrates using properties in your template." %>
<%@ Property Name="Person" Type="System.String" Description="This will show up at the bottom of the …
more ...

没有银弹

最近为工作中和学习中遇到一些问题而发愁,夜不能寐,做梦都在寻求方法。

问题简单的来说,就是开发过程中遇到很多本觉得不该遇到的问题,比如数据关系在数据表的设计,比如说自动化测试无法接入,ORM接入设计,开发流程如何优化,Web标 准性问题等等。我罗列了大约30条会导致开发效率降低的因素,也一直在思考怎么解决他们,如果让我来设计他们,会用什么方式来提高效率,让系统更优美。

读完《人月神话》和《走出软件作坊》之后,似乎有了一些明悟。今天wiki到没有银弹这个话题,我意识到自己太过于追求一步到位了。

Brooks 认为,附加性的困难会随着工具的改善而逐渐淡化,反而是本质性的困难最难以解决,因为大部分的活动是发生在人们的脑海里,缺乏有效的辅助工具。依造 Brooks 的说法有下列几项:[2]

复杂性(complexity):软件要解决的问题,通常牵扯到计算步骤,这是一种人为、抽象化的智能活动,多半是复杂的。

不可见性(invisibility):尚未完成的软件是看不见的,即使利用图示说明,也常无法充分呈现其结构,使得人们在沟通上面临极大的困难。

协同性 …

more ...

使用DataConnectionDialog来获取连接字符串

在系统开发中,数据库连接字符串经常被保存到.config/.ini等配置文件中,以提高系统的灵活性。上大学时候,为了实现灵活配置数据库的效果,用拼字符串的方 法来动态生成连接字符串,这种方法充满了Bad Smell。

昨天用CodeSmith时候,看到它的数据连接配置界面,如此的眼熟,如下图。

image

Google了一下,原来这家伙的名字叫做DataConnectionDialog,所属命名空间为Microsoft.VisualStudio.Data。

使用的方法也很简单,引用Microsoft.Data.ConnectionUI.dll和Microsoft.Data.ConnectionUI.Dialog .dll,这两个文件位于Microsoft Visual Studio 9.0Common7IDE下面。

这两个dll并没有其他依赖关系,可以放心的放到自己的程序中使用。

使用代码如下

DataConnectionDialog dataConnectionDialog = new DataConnectionDialog();
DataSource.AddStandardDataSources(dataConnectionDialog);
if (DataConnectionDialog.Show(dataConnectionDialog) == DialogResult.OK …
more ...

在.net中使用GAC

GAC

GAC是什么?是用来干嘛的?GAC的全称叫做全局程序集缓存,通俗的理解就是存放各种.net平台下面需要使用的dll的地方。GAC的具体目录在windows/ assembly。

喜欢使用破解软件的朋友可能会经常使用替换DLL这招,这个DLL虽然和.net下面的DLL有所不同,但大致起的作用还是一样的:使用共同的动态链接库来提高库复用 ,减少文件体积。在.net平台之前,程序们都把可能用到的公共DLL存放到system32文件夹下。由于版本的不一致及其他原因(将控制信息存放到注册表),造成 了很有名的DLL Hell

最近在读俞甲子的《程序员的自我修养》,中间花了很大的篇幅描述程序编译中 的链接这个过程。而比较巧合的是,我的《C#与.NET 3.5高级程序设计》也正好读到程序集这一块。微软使用了GAC来避免DLL重蹈覆辙。现在,我就来部署一个简单的通用类库到GAC中。

获取强名称(签名)

并不是随便一个DLL都可以放到GAC中,如果这样的话,和之前的DLL Hell也没什么区别了。GAC使用一个强名称(签名)的方式来区分不同的DLL。每个签名 都是独一无二的公钥私钥对。现在我们使用SDK的sn工具为我的DUtil库生成一个snk签名 …

more ...

正则表达式抓捕替换

问题情境

需要将RDL报表里的GetComment( Parameters!F0001.Value , Parameters!F0002.Value ,"total", Parameters!Language.Value)函数修改为GetCommentForComment( Parameters!F0001.Value , Parameters!F0002.Value ,"total", Parameters!Language.Value, "ReportConnection0107")。

思路

使用正则表达式里面的分组进行抓获,再用1将中间固定的参数取出,组成新的字符串。

Vim实现

%s/GetComment(((sw+!w+.w+s,){2}s"w+"s,sw+!w+.w+s))/GetCommentForReport(1 , "ReportConnection0107")/gc&nbsp_place_holder …

more ...

男人袜1元体验活动

从Louis Han那里看到一篇文章介绍了一个适合宅男的网站,想想我自己宅属性日益增加,就抄文推广一下。

-Update 20110113

收到男人袜客服的来信,说我文章"我们发现您的文章基本上是引用的网站内容,建议您用自己的文字来评价一下我们的网站或服务。",我郁闷了一下,回了一封信说我还没体 验到,怎么来评价。何况下面文章那些文字虽然是Louis Han整理发文,但源头其实来自男人袜网站的介绍内容。

怪就怪我偷懒了吧,男人袜建议我修改文章再发,算了~拉不下这个脸~

看来我是无福享受送货上门的男人袜服务了,还是乖乖去超市买吧。好吧,我承认,这个活动让我很郁闷。我最后回复客服"算了,那我就不要体验码了。按照你们的要求来看, 我的博文的确不合格,我也能够理解。不过,作为顾客,这真是一次糟糕的体验。"


男人袜是一个专业的男袜寄送服务,专门给那些不喜欢穿有洞的袜子,而又没时间去买新袜子的男人们准备。您下单后,将 会定期收到寄送的新袜子,新袜子会根据您所在的季节和天气情况自动调整。

image

男人袜标准套装是每 3 个月寄送一次。如果您希望更灵活的寄送方式,可以选择我们的自选套装,来自由的 …

more ...

最简陋的GAE代理

年前换了一次服务器,之后发现Lifestream的Errors飙升到1000+错误,检查一下,发现是获 取不了豆瓣的rss链接。正好这台主机支持SSH,连入之后CURL了一下豆瓣服务器,发现Time out。

紧接着发现中国内的所有域名都无法使用CURL获取,联系小张之后,得知该主机曾经被入侵过,于是屏蔽了中国大陆的ip段(囧~入侵和中国ip有毛关系)

遂想用GAE做个代理服务器,反正获取RSS也只要Get一下,代码没几句。把这项任务放入Toodledo之后,就一直没去弄,今天发现GAE Laucher升级了,就部署到自己GAE上了。

地址格式如&nbsp_place_holder;http://jasontiproxy.appspot.com/proxy?url=www.douban. com/feed/people/alswl/interests,url参数名后面跟着具体的url。

代码其实就是用urllib2获取一下html,核心如下。

1
#!/usr/bin/env python

from …

more ...

LavaVPN推广链接

以前一直使用SSH进行翻墙,后来在人人看到一位朋友推荐LavaVPN,就过去试用一下,效果的确不错。

LavaVPN

LavaVPN支持各种系统,在Windows下面有专用的客户端接入程序,通过这个客户端可以实现选择性加速,而不需要全局加速。在Android和Linux上面 测试都可以。

官方的介绍如下:

LAVAVPN网络加速器是专为各类网游玩家、软件发烧友、网络办公、影音冲浪网虫等个人用户提供网络加速服务的新型产品,能有效减少网络延时,使网络互访再无拥 挤的感觉,让您在任何情况下都能体验上网加速的快乐!多地服务器节点可以选择,一个账号即可使用全部节点,随时任意切换,软件自带服务器测速工具,自动选择最快的节点 。

服务器目前有大陆、台湾、香港和美国,我个人比较喜欢香港的服务器,速度快,畅游无限。根据我的实际使用,速度都不错,几乎都可无延迟的看Youtube。国内的服务 器则是我在上班时候听音乐用的。

由于VPN的全局性,导致连接上VPN后无法连接上内网数据库等服务器,我的解决方案是在虚拟机上跑VPN,采用Bridge桥接接入网络。

目前LavaVPN在推广阶段,包月是16元,包3月是44元,半年80元,还是很超值的。

最后分享3个推广链接,使用邀请码注册可以获得额外1天的免费使用时间。首次充值(30天及以上)可获额外3天时间赠送 …

more ...

半年

去年10月份时候,进入了一家做信息化的上市公司,带着对未来的憧憬奔向了广州,半年中,历经数个小项目,发现其实是小作坊开发模式。虽说能学到一些编程之外的东西, 但毕竟不是系统的开发模式,今年5月回了学校就辞职了。

7月份时候,工作机会似乎已经趋向饱和,我急急忙忙拿了一份Offer,从事.net的企业信息化开发。虽然我志在Web 2.0方面的开发,但是权衡再三,还是到南京的研发中心。

新岗位是.net Web开发,我由Java开发人员转为.net开发人员。我对语言的选择本身不是很在意,甚至那时候认为语言其实是工具,思想和设计才是核心。我所 就职的部门负责产品之外的特殊需求专案开发,基于.net平台开发ERPII产品,包括工作流、CRM等等。

从事.net开发之后,才感觉到Java开发的各种好处:各种开放的框架提供了自由选择发挥的平台,实现一种需求的方法有N+1种方式,并且能够跟进较新的技术,满足 自己学习的渴望。.net虽然也很强大,但我总觉得微软提供的工具想让开发人员傻瓜化(在ASP.NET MVC出来之前,Web Form的开发模式让我很不爽)。

公司的Web产品只能在IE6下运行 …

more ...

C#+VBA操作Excel总结

Excel在日常办公中应用非常广泛,这次我接到一个案子,需要往Excel中写入数据并能够打印出固定格式,前前后后大概花了将近2星期才搞定,现在做一些分享。

一、关于操作Excel的几种方式

我们导出Excel,大抵是有两种方法,一种是在服务器端用一些类库或者COM组件直接生成Excel成品,其二是在后台只写入数据,而不写入具体格式,等用户下载完 Excel之后再在客户端上利用vba生成Excel成品。

1.1使用"自动化"功能-后台生成成品

微软把后台使用COM组件称之为"自动化",其实它本身是不建议这种用法,在257757 号文章(服务器端 Office 自动化注意事项)也明文标出"Microsoft 目前建议不要从任何无人参与的、非交互式客户端应用程序或组件(包括 ASP、DCOM 和 NT Service)中进行 Microsoft Office 应用程序的"自动化",也不为此提供支持,因为 Office 在这种环境中运行时可能会出现不稳定的现象并且/或者会死锁。"

这种方法的优点是给用户更简洁的展现,毕竟原生的Excel成品比半成品来更容易接受,而且可以避免宏安全问题 …

more ...