2006年4月7日

抵制商业盗版行为——软件是有价值的

今天一件事情让我很愤怒,我从http://spymaster.cnblogs.com/archive/2006/03/27/360253.html看到对DXperience的介绍,页面上还有一个qq群21846378,我就加入了,原以为他们是提供给个人学习用的,没想到竟然要收费,还号称“比代理的便宜很多”,我实在忍不住,就说了几句“卖盗版软件卖的如此猖狂!大家都是作软件开发的,如果自己玩无所谓了,如果是商业项目,一定要用正版,我们搞开发的都看不起软件的价值,客户又怎么能看得起我们开发的软件的价值呢?”,于是马上被踢出了群。

我真的很愤怒,我们都是作软件的,我们都希望我们开发的软件能有一个好价格,但为什么就要如此作践别人开发的软件?客户看到我们把盗版软件提供给他,他会怎么想?很简单,他会认为软件就是可以随便盗版的——包括我们给他开发的。这样下去会是什么结果,大家可想而知。

其实这些年,客户对软件的价值越来越开始认可,希望大家都能来共同维护这个市场,这也关系到我们自己的切身利益!——如果自己都不关心自己的利益,难道还指望别人来关心自己的利益?

posted @ 2006-04-07 12:00 eng21 阅读(1656) 评论(24) 编辑

2005年3月31日

技术升迁之路

曾看到一篇文章,说的是企业内部,提升一个优秀的技术人员到一个管理岗位的时候,由于其本人并不一定适合做管理,导致其所在的管理岗位没有做好;另一方面,他原来的技术岗位又被一个技术不如他的人占据,结果导致两个岗位上都不是最合适的人,从而给企业带来损失。解决的办法是给员工在管理和技术两个层面的升迁途径。
原以为国企没做好,私企可能会做好,事实却是都没做好。所以搞得做技术的提起30岁就人人自危:),其实每个行业、每种职业都面临“青年人”的竞争,这是无法避免的,否则这个行业、这种职业就没有发展前途了。但作为一个企业,特别是有长远打算的企业,确实应该在管理和技术两个层面给员工提升的机会,两个层面在某些点上应该有一定的平衡——这个很重要。
对技术有兴趣的可以走技术路线,对管理有兴趣的可以走管理路线,当然,愿意在两条路线之间转换也未尝不可。
对于技术路线,从刚入门到资深工程师,至少要分成多个层次、每个层次又有多个级别,工资可以不让人知道,但技术岗位、技术级别应该公开,并有一套合理的评选提升制度,这样才能留住人才、保持企业的核心竞争能力。
看起来似乎都是一些“理所应当”的事情,事实却不是这样,至少我看到的企业不是这样去做的。

posted @ 2005-03-31 16:21 eng21 阅读(269) 评论(0) 编辑

2005年3月4日

应该怎样使用开发工具?

今天把vs.net编辑器的“自动列出成员”去掉了,突然发现,竟然不会写程序了?那个汗呐,想想曾经听说过的战士闭着眼睛拆装枪,简直无地自容。遂决定,从今以后,不再使用这个功能了。

posted @ 2005-03-04 16:50 eng21 阅读(1318) 评论(14) 编辑

2005年2月25日

Word 邮件合并

 

这两天遇到一个问题,客户需要将数据库中的应聘信息通过word打印出来,于是我们就把数据库记录导出到Excel文件中,客户自行制作word模版文档,然后使用邮件合并功能打印Excel中的数据,但在处理应聘者的像片时遇到一个问题。

 

Excel文件中存储的是应聘者的像片文件路径,但在word打印的时候,需要打印出实际的像片,由于数据比较多(2000条左右),一个一个去插入像片实在不可取,于是想继续用插入域的方式来处理:

 

理论上应该是可以的,实际使用的时候就发现,总是显示第一张像片,需要手工按F9来刷新像片,如果使用“合并到新文档”后,就根本不能刷新了。这的确是个头痛的问题。

 

折腾了半天,制作了一个宏:

Sub 预览()

'

' 预览 Macro

' 宏在 2005-2-25 由 xxx 录制

'

Dim data As MailMergeDataSource

Set data = ActiveDocument.MailMerge.DataSource

data.ActiveRecord = wdFirstDataSourceRecord

Selection.Fields.Update

For i = 1 To data.RecordCount

ActiveDocument.PrintPreview

MsgBox ("第" + Str(i) + "条记录打印完毕。")

'ActiveDocument.PrintOut

data.ActiveRecord = wdNextRecord

Selection.Fields.Update

Next

End Sub

 

呵呵,很笨吧,首先定位到第一条记录,然后刷新像片(打开文档的时候,首先要选中像片域),打印,移到下一条记录,直到所有记录都打印完毕。

 

虽然这样把问题解决了,可总觉得不爽,而且不能合并到新文档,如果要再作一些处理,或者只打印几个总是不方便。想一想,如果模版文档只是插入INCLUDEPICTUR域代码而不是实际的像片,由合并后的文档来实现实际的像片插入那就更合适了。

 

通过在Office Online网站上查找关于域的资料,发现有一个SET域可以设置标签,于是就这样来处理:

 

 

呵呵,真还可以了,合并后的文档中,包含了这样的内容:

 

切换到域结果视图(Ctrl+F9),然后全选(Ctrl+A),再按F9更新域,一切OK

 

posted @ 2005-02-25 15:33 eng21 阅读(1534) 评论(6) 编辑

2004年12月31日

Dottext中的配置

 

开发asp.net应用的时候,我们一般都把系统的环境配置信息放在web.config中,如果参数很少,一般就直接放在<appSettings>配置节中即可。但对于一些较大型的应用,有很多参数需要设置,仅依赖于<appSettings>的平面结构就不够了,需要一种能提供多层配置信息的结构。

 

Dottext中的配置就是这样一种多层的结构,它非常巧妙的使用了.Net中的Xml序列化,使得配置结构非常简单却又很强大。

 

 

要向web.config中加入自己的配置节,必须开发相应的配置节处理程序,Dottext使用了一个公共的配置节处理程序:

public class XmlSerializerSectionHandler : IConfigurationSectionHandler

{

public object Create(object parent, object configContext, System.Xml.XmlNode section)

{

XPathNavigator nav = section.CreateNavigator();

string typename = (string) nav.Evaluate("string(@type)");

Type t = Type.GetType(typename);

XmlSerializer ser = new XmlSerializer(t);

return ser.Deserialize(new XmlNodeReader(section));

}

}

 

web.config中的BlogConfigurationSettings配置节定义如下:

<BlogConfigurationSettings type = "Dottext.Framework.Configuration.BlogConfigurationSettings, Dottext.Framework">

 

在代码中,一般是这样来使用配置设置:

Config.Settings.BlogProviders.DTOProvider

 

SettingsConfig中是这样定义的:

public static BlogConfigurationSettings Settings

{

get

{

return ((BlogConfigurationSettings)ConfigurationSettings.GetConfig("BlogConfigurationSettings"));

}

}

 

当用GetConfig获取ConfigurationSettings配置信息的时候,它会调用该配置节的处理程序XmlSerializerSectionHandler的Create方法,以返回正确的配置设置。在其Create方法中,通过访问配置节的type属性来得到具体类型,然后通过XmlSerializer将web.config中的以xml格式配置的设置信息反序列化为具体的BlogConfigurationSettings对象。

 

这中间的关键就是要定义好提供配置信息的类——BlogConfigurationSettings,这样我们才能使用类似Config.Settings.UseXHTML的方式获取在web.config中定义的参数,而不是使用Convert.ToBoolean(AppSettings["Blog.UseXHTML"])

 

 

一般情况下,一个类只要加上Serializable特性进行声明就可以作为这样的配置类了:

[Serializable]

public class BlogConfigurationSettings

 

但仍然要注意几点:interfaceabstract class不能作为配置类;类必须要有不带参数的公共构造函数;要作为配置参数的字段或者属性必须是public的,而属性必须有set

 

默认情况下,Xml序列化会把类中的字段或者属性序列化成xml Element,比如上面的UseXHTML,但有些时候,可能要使用xml Attribute,比如:

<Tracking enableAggBugs = "true"

 

这种情况,需要使用XmlAttributeAttribute来声明:

[XmlAttribute("enableAggBugs")]

public bool EnableAggBugs

 

 

多数情况下,我们定义的配置类应该已经足够,但偶尔有些时候,我们需要在配置文件中增加配置元素或者配置属性,但又不能或者不想修改已有的配置类,为了避免反序列化的时候出错,也为了增强灵活性,应该给配置类增加这样两个属性:

[XmlAnyAttribute]

public XmlAttribute[] XmlAttributes

 

[XmlAnyElement]

public XmlElement[] XmlElements

 

这是告诉XmlSerializer,如果有不可识别的元素或者属性,则将其放到这样两个数组中,程序可以从数组中检索相应的设置。

 

 

Dottext中还定义了这样的结构:

<EntryHandlers>

<EntryHandler type="..." postType = "Comment" processAction ="Insert" processState="PreCommit" isAsync="false" />

...

</EntryHandlers>

 

[XmlArray("EntryHandlers")]

public EntryHandler[] EntryHandlers

 

这样就可以定义数组参数。如果数组的元素不是同样的类型,但都继承自一个基类,那还可以这样定义:

<Validators>

<RegularExpressionValidator Name="Email" ...

<DateValidator Name="Date" ...

...

</Validators>

 

[XmlArray("Validators")]

[

XmlArrayItem("Validator", typeof(Nss.Data.Validators.Validator))

,

XmlArrayItem("RegularExpressionValidator", typeof(Nss.Data.Validators.RegularExpressionValidator))

]

public Nss.Data.Validators.Validator[] Validators;

 

XmlArray定义了数组,而XmlArrayItem定义了数组中可以使用的元素类型,使得系统的配置更加灵活,结构也更清晰。

 

 

以前总是为配置发愁,要写那么多代码,自从发现了Dottext的配置后,真是由衷的佩服,于是拿来就用,在自己的项目中也使用了这样的配置结构,期间也遇到了不少问题,所幸最后都解决了,于是就写了这篇小文,希望能够抛砖引玉,让更多的人来发掘Dottext中的宝藏。

posted @ 2004-12-31 16:32 eng21 阅读(1620) 评论(5) 编辑

2004年4月29日

Dottext配置结构

摘要: 看Dottext的源码看的头痛,于是用visio画了一个图,觉得思路清晰多了。阅读全文

posted @ 2004-04-29 18:00 eng21 阅读(1173) 评论(0) 编辑

2004年3月8日

不论什么内容都可以拿来大话吗???

摘要: 朋友推荐去了一个网站,看到所谓网友作品“大话李白”,看着看着心里渐渐变得不是味,难道不论什么内容都可以拿来大话吗?这根本就是糟蹋,糟蹋我们民族历史上的英雄,等所有的英雄都糟蹋完了,我们还剩下什么?阅读全文

posted @ 2004-03-08 10:37 eng21 阅读(411) 评论(0) 编辑

2004年3月6日

MSDN MTT

摘要: MSDN MAG上有不少好文章,可都是E文的,最近在网上闲逛,发现了这个东东:MSDN MTT,确实不错,感谢他们的辛勤工作,值得每月去一次。阅读全文

posted @ 2004-03-06 22:51 eng21 阅读(869) 评论(2) 编辑

2004年2月22日

关于NUnit

摘要: NUnit 2.0我是去年就下载了,可是嫌为每个类方法写测试代码麻烦,一直没有实际用上,看到博客堂上众多高手都在使用,忍不住也想在公司项目中使用,只是不知实际的效果究竟如何?有没有应用NUnit前后的量化比较数据?阅读全文

posted @ 2004-02-22 18:06 eng21 阅读(744) 评论(3) 编辑

2004年2月19日

管理后台的问题?还是我的浏览器的问题?

摘要: 进入博客园的管理后台,添加Link的时候,Link ID,Link Title等文字都不显示,当用鼠标选中后,就可以正常显示了,但是在其他界面却没有这个问题。阅读全文

posted @ 2004-02-19 15:48 eng21 阅读(438) 评论(1) 编辑

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

公告

昵称:eng21
园龄:7年11个月
粉丝:0
关注:0

搜索

 
 

常用链接

随笔分类

随笔档案

文章分类

.Net

管理

其他

综合

积分与排名

  • 积分 - 11159
  • 排名 - 8028

最新评论

阅读排行榜

评论排行榜

推荐排行榜