给儿子找学校,先找到买的房子旁边好一点的学校(安亭小学),
对方问:上海人吗?
答:不是。
又问:在上海买房子了吗?
答:有,但是在花桥(花桥与安亭一路之隔,但一个是江苏,一个是上海)。
又问:有上海的人才引进的居住证吗?
答:没有(本人高中,学历不够,不能办理)。

好吧,不要贪心,规规矩矩到花桥找一个对口学校吧。
对方问:当地人吗?
答:不是。
对方问:买房子了吗?
答:有(有戏?)。
对方问:多大?
答:40平方。
对方:不行,必须80平方以上。
又问:你在昆山工作吗?
答:不是,我在上海工作。

又无果。

另外一件事情还是跟这个差不多。今天看见一个新闻:《关于2008年度上海市住房公积金缴存基数和比例的通知》,中有一句:
国家机关、国有企业、城镇集体企业、外商投资企业、城镇私营企业及其他城镇企业、事业单位、民办非企业单位、社会团体应依法为与其建立劳动关系的本市及外省市城镇户口职工缴存住房公积金。
又再次的证明自己是下等公民,因为我是外省市农村户口。

posted @ 2008-06-25 16:03 编写人生 阅读(123) | 评论 (0)编辑
     摘要: 养老保险是个骗人的东西;
存款又无法解决通货膨胀;
股票到底如何呢?让我们看看。  阅读全文
posted @ 2008-06-19 14:22 编写人生 阅读(111) | 评论 (0)编辑
您可以阅读我其他的发明创想:
使用遥控器控制汽车,实现高难度的泊车(发明畅想)

取款机钱箱没有钱提示(发明畅想)
微型电动轿车(发明畅想)
智能电视的设想(发明畅想)
压缩空气动力自行车

首先我声明:我并不知道有没有人发明空中投影技术(例如使用激光在空中制造出图像),也就更不知道实现的技术了。我只是想到这种技术的应用。

有次我看见一个小车想左转掉头,于是在左车道停下来,后面的车马上停下试图调整到右侧超过,再后面的车呢看不到第一辆车,于是想从左侧超,可惜突然看见前面还有一个车,赶紧刹车,很危险。

于是,我就想,如果前面的车顶(空中,而且要稍微高一些)投影出一个左方向箭头,那岂不是很好,后面的车虽然看不见前面的车,但是可以看见空中有个投影,知道危险要慢下来。

同样的道理,还可以将箭头投影到前面的道路上,在你从一个小巷子要出来时很有用。
posted @ 2008-06-16 13:37 编写人生 阅读(40) | 评论 (0)编辑
如果产品非常好,价格却非常低,企业一定能够成功。自己想了想,有哪些呢?
微软 - 不要误会,微软的产品价格的确很低的,如果你和其他公司的产品对比就知道了;
苹果的IPhone - 卖的火啊,他的3G更是便宜;
沃尔玛 - 超市的典范;
麦当劳 - 快餐类的典范;
碧桂园 - 房地产薄利多销的典范;

那么产品好,但是卖的死贵的有成功的吗?
思科 - 目前还行,但是明显走下坡路了;
索尼 - 也是一样。
IBM - 只能搞项目了,已经脱离群众了。

所以说,我们常说的商人应该 : 利润最大化,简直是骗死人不偿命,是最短见的行为。
posted @ 2008-06-13 11:44 编写人生 阅读(54) | 评论 (0)编辑
Linq to SQL内置缓存功能,简单的说,当你查询了一次某个键的数据后,再次查询时linq to SQL的引擎不再向数据库发送SQL,例如:

            //下面是使用LinQ to SQL 的例子,context2是派生自System.Data.Linq.DataContext的实例
            ErpLinQContextDataContext context2 = new ErpLinQContextDataContext();
            
//SQLServer事件探查器拦截到SQL语句的执行
            
//exec sp_executesql N'SELECT TOP 1 [t0].[emp_id], [t0].[fname], [t0].[minit], [t0].[lname], 
            
//                         [t0].[job_id], [t0].[job_lvl], [t0].[pub_id], [t0].[hire_date]
            
//FROM [dbo].[employee] AS [t0]
            
//WHERE [t0].[emp_id] = @p0', N'@p0 varchar(9)', @p0 = 'PMA42628M'
            employee p3 = context2.employees.First<employee>(p => p.emp_id == "PMA42628M");
            
//当我再次执行相同的查询时,LinQ to SQL 不再向SQL Server发送查询了。
            employee p4 = context2.employees.First<employee>(p => p.emp_id == "PMA42628M");

而且,这两个实例是同一个实例

            //返回的对象是同一个实例
            bool b2 = object.ReferenceEquals(p3, p4); //=true;
            p3.lname = "New Last Name";
            
bool b4 = (p4.lname == "New Last Name");  //=true;

当然,如果你使用不同的Context实例查询时,缓存功能将实效。

好,让我们再看看ADO.NET Entity Framework beta 3:

            //pubsEntites是 ADO.NET Entity Framework 的System.Data.Objects.ObjectContext派生对象
            pubsEntities context = new pubsEntities();

            
//下面语句执行时,SQLServer事件探查器拦截到SQL的执行
            
//SELECT TOP 1 [Extent1].[emp_id] AS [emp_id], [Extent1].[fname] AS [fname], [Extent1].[lname] AS [lname], 
            
//             [Extent1].[hire_date] AS [hire_date], [Extent1].[job_id] AS [job_id], [Extent1].[pub_id] AS [pub_id]
            
//FROM [dbo].[employee] AS [Extent1]
            
//WHERE N'PMA42628M' = [Extent1].[emp_id]
            Employee p1 = context.EmployeeSet.First<Employee>(p => p.EmployeeId == "PMA42628M");

            
//SQLServer事件探查器 发现SQL再次被执行
            Employee p2 = context.EmployeeSet.First<Employee>(p => p.EmployeeId == "PMA42628M");
            
//测试发现,虽然ADO.NET Entity Framework执行了两次SQL,但是他们却返回了完全相同的实例
            bool b1 = object.ReferenceEquals(p1, p2); // = true;

测试的结果是,ADO.NET Entity Framework(以下简称AEF)没有使用缓存,而是再次执行SQL,但是你要注意:两次查询的实例竟然是同一个。
从Context功能上看,他肯定持有上次查询的结果,他没有使用缓存,我只能认为可能AEF被设计成三层应用,那么他很担心其他的进程将数据改了,所以不使用缓存,当发现数据并没有改后,还是使用原先的实例,这个想法对吗?
我们再看看另外一个代码:
            //如果使用不同的上下文更新的数据,
            pubsEntities context4 = new pubsEntities();
            Employee p10 
= context4.EmployeeSet.First<Employee>(p => p.EmployeeId == "PMA42628M");
            p10.LastName 
= "Context4 changed data";
            context4.SaveChanges();

            
//旧的context再次查询时。
            Employee p11 = context.EmployeeSet.First<Employee>(p => p.EmployeeId == "PMA42628M");
            b1 
= object.ReferenceEquals(p1, p11); //= true   why??
            b1 = (p11.LastName == "Context4 changed data"); //= false  p11.LastName = "New Last Name"
难以置信,AEF重新执行了SQL,但是置新的更改而不闻,仍然返回旧的数据。这个算是Bug吗?

我不知道哪位达人能够解释这个问题?当然,这个问题我也询问了MS,他们的技术人员还未做出满意的答复。
posted @ 2008-05-14 13:54 编写人生 阅读(1187) | 评论 (3)编辑
 我不是那种“做好事不留姓名” 的那种, 纪念一下。
但还是少些这种捐款好,我的意思是希望天下太平。都不用捐款才是最好。
希望中国少些灾难,军队能够提高能力,设备先进些。
posted @ 2008-05-14 11:33 编写人生 阅读(17) | 评论 (0)编辑
    我们知道,网上很多人是很鄙视 买日本车的人 的。我不想骂人,我想讲两个事情。
    第一个就是:清朝时林则徐提出的“师夷长技以制夷”,我想用在现在的中国汽车一样正确。
    第二个是将日本侵略中国时,当时在中国有很多的诸如“翻译官”这样的职业,在当时看来,这样的职业工资是很高的,而且人家又不直接杀人,所以其实当时很多的中国人是给日本人打工的。现在套用中国汽车业,大概也能说明一些,因为日本车比起中国自主品牌来说,质量的确好很多,而且相对德国车,他的确又便宜很多。所以很多中国人还是禁不住诱惑,觉得买日本人的东西很合算。
    我坦诚说我对日本的态度:
    一,日本人很多方面不错,我们应该“师夷长技”,比如他们严谨的工作作风和科技等,
    二、日本到现在仍然对历史的错误不予悔改,这是我最不能容忍的;
    三、日本毕竟人多地少,又是个地震频发的岛国,套用他们的话“凭什么我们这么优秀的人要住在这个岛国,而那些愚昧的中国人可以享受那么好的土地”,所以只要是正常人的思维,日本人终究有一天,还是要再次侵略中国的。
    所以,我尽我最大能力不购买日本产品,并劝导朋友和同事不购买日本产品。
posted @ 2008-05-04 12:49 编写人生 阅读(51) | 评论 (1)编辑
     摘要: 以前看过文章说MarshalByRefObject 会造成性能的损失,我比较相信自己,所以亲自测试了一下,下面是代码:测试代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->usingSystem;usingSystem.Diagnostics;nam... 阅读全文
posted @ 2008-04-29 15:20 编写人生 阅读(163) | 评论 (1)编辑

请先参考《相信自己,我能》 关于读取性能的测试

今天对插入的性能做了比较,和我预期的一样,Torridity的性能和其他的产品基本打平手,而Entity Framework一样是糟糕的成绩。
为什么认为会打个平手呢?因为插入1万比记录,意味这连续发送1万次SQL,在没有提别糟糕的程序下,基本上SQL语句的执行花去了几乎大部分的时间,程序本身的优化所得到的提升几乎微乎其微。
下面是测试结果:

再次失望ADO Entity Framwork的性能,太糟糕了

posted @ 2008-04-28 18:10 编写人生 阅读(141) | 评论 (0)编辑

关于元数据结构
自动创建的代码包含一个派生自ObjectContext的对象,他有点像一个Workspace,主要包含连接、元数据和状态管理等;

ObjectContext包含一个MetadataWorkspace属性,记录了所有的元数据信息,有几种类型:
C  Space: 很全,包括数据类型(例如Byte)、函数(例如Max)、实体类型(例如Order);
CS Space:null?没有吗
OC Space:纯数据类型,一般13个;
S  Space:包括数据类型和实体类型。
你可以像下面这样的代码获取元数据
EntityType c2 = c.MetadataWorkspace.GetItem<EntityType>("DcmsCore2_TestModel.Customer", System.Data.Metadata.Edm.DataSpace.CSpace);

枚举出一个元数据对象,怎么知道是描述什么的呢?BuildtInTypeKind属性可以告诉你,常见的有:
PrimitiveType    : 原生数据类型,例如描述string的
EntityType       :实体类型,一般是ClrEntityType的实例,例如描述order
MetadataProperty : 属性,例如描述Order的属性OrderId;
Facet            :特性,用来描述是否允许null,或缺省值之类的东西,有点像CLR里面的Attribute

posted @ 2008-04-25 15:13 编写人生 阅读(35) | 评论 (0)编辑
看见一文章《比亚迪员工的心声》,原文是:
首先声明一下:本人是比亚迪公司的一名工程师,看到这么多的争议,不管是好的还是不好的评论,至少证明大家还是关注这个公司的汽车。提建议是好的,但是别带上个人的主观情趣,说句实在话我也不知道公司的车到底好不好,但是我知道的是我们确实一直在改善,也许你们觉的这个车这里缝隙大,那里配合不好,那里又怎么差的。那我想问你们一句:你们的标准是什么呢?如果你拿宝马奔驰来做标准那我劝你暂时还是不要来发表了,因为我们还没有达到那种高度,我们是民营企业,要养活十几万人,换句话说我们要生存。从开始的F3到现在的F6如果说没有改进的话我把头给你们当球踢,但是改进要一个过程,不是你今天说要改明天就可以改好了,可以说理论的东西我们可以设计到一丝不差,但实际加工出来就不是你想的那样了。每一个改进都要经过N多的程序。举个很简单的列子吧:如果要改进一个地方的配合间隙,是不是要修改其中一边的尺寸,是不是涉及到模具的尺寸,这个东西是钢铁做的,不是泥巴你捏一下它就变长了。光是这样的模具拆下来都要很长的时间更不要说加工了。所以要理性的看待问题。就像很多的F3车主说的一样,现在出来的F3比以前的工艺好多了。确实如此,
因为我们一直在努力。我们不止做汽车,我们做电池,做IT,我们的IT已经做到了0.005MM的公差。所以我们很有信心把汽车这一块做好。
当然更希望广大车友提意见到我们公司。

==============================================
我的看法是:
好热闹啊,我也插一句,我就不愤青了
说到底,商家要赢,拼到底就是看谁能够持久的提供高性价比的产品和服务,
例如,在6万这个价位上,我造的汽车比别的汽车看起来就是漂亮些,质量就是好些,就会大把有人买。
人是贪心的,很多客户买了10元的东西也会要求送货上门,为什么不可以呢?盒饭就可以,但是如果你300元买洗衣机,还要送货上面就没有人愿意了。
如果这个时候有厂家说,300元我可以卖给你洗衣机,但不提供送货上门,我敢向上帝保证:还是有人要求送货上门的,因为人是贪婪的。你可以想象,如果这个厂家坚持不送货上门,我相信结果是:客户一边骂,一边在买,然后心中窃喜,骂完了之后又打电话叫上他的大哥小弟赶快来抢。
好,我们继续,很不幸,这个厂家刚开始买的300元的洗衣机质量还是不错的(所谓质量不错,是指通常理解的不经常坏),后来觉得没有利润就开始偷工减料,质量不行了,但商家凭良心说,这个洗衣机只有10元利润了,但是这个时候客户会买单吗?不会,在这个例子中客户是不会的,为什么?因为客户愿意掏更多的钱买个质量好的洗衣机。这个钱客户觉得他掏的起掏的值,就像你可以理解一个普通的白领不会买巷子角落的1毛钱的烧饼,即使天地良心,这个烧饼成本就已经是1毛了。
我们再假设,人的智慧太厉害了,很多的厂家经过努力,他们的洗衣机也卖到300了,质量一样的好,那么这个厂家继续说,我不送货上门,还有人了他吗?还是300,还是不送货上门,为什么结果不一样了。

总之,在保证基本利润的基础上,给客户最大化的利益才是商家持久发展之道。

大家也可以参考 施乐和佳能 关于复印机的案例。
posted @ 2008-04-25 10:17 编写人生 阅读(42) | 评论 (0)编辑
这个事情应该是前几天的事情了,由于一直比较忙,所以没有写下来。
我们利用微软的网络负载平衡,假设了两台应用服务器,并在另外一台计算机部署了我们的会话服务器和SQL Server 2005服务器。
测试的结果是:
客户端面对的是一个IP地址,应用服务器将随机处理客户的请求;
有一个客户已经连接到服务器,这时我们关闭了其中一台服务器的电源(模拟服务器崩溃),我们看见客户端顺利的重定向到另外一台服务器,一起都非常平滑。

这次测试终于完成了我几年来一直追求的目标:负载平衡。他是值得纪念的事情。
posted @ 2008-04-24 14:28 编写人生 阅读(26) | 评论 (1)编辑

今天,是个值得纪念的日子,因为我编写的ORM(名为Torridity)工具经过性能测试,其读取性能全面压倒DataSet、LinQ和DataEntity Framework。

 

从截图中你可以看出,我们比DataSet快2倍,比LinQ快4倍,比Entity Framework beta 3快14倍。

测试采用读取1万笔记录,而且为公正起见,所有的计时开始前,都预先读取一笔其他的记录,保证不是连接缓冲池造成的误差。而且测试代码保证都是各自工具最佳的读取方式。

你可以下载附件中的测试程序,但非常的遗憾,Torridity属于公司的财产,所以我不能包含任何关于此部分的代码。要测试程序请:

  - 使用Visual Studio 2008打开项目;

  - 下载Entity Framework beata 3;

我将在随后的时间测试保存、插入和删除功能的性能。

LinQVsTorridity.rar 


请不要发表诸如以下的意见:都没有实际程序在那吹吧。
我想说的是,这个文章仅是为了纪念我的成果,证明自己的能力,以此纪念。
posted @ 2008-04-24 13:43 编写人生 阅读(70) | 评论 (1)编辑
     摘要: 老婆联系友邦保险的人,希望可以买些养老保险,因为我们都是外来打工人员,没有上海本地户口,也没有居住证(我们的文凭不行,只有高中),所以也不能享受四金。我们必须为我们的养老问题做准备。
  阅读全文
posted @ 2008-03-24 10:51 编写人生 阅读(447) | 评论 (13)编辑
要说言论自由,大家似乎都心照不宣,认为那是政府的问题,政府不让我们言论自由,这一点上我不否认,我也没有能力改变这点。
但是,今天的一件事情让我不得不骂人,起因是我在太平洋汽车网上看一篇文章《自主内战爆发! 比亚迪F6上市恶战4大强敌》,看的很来火, 我的感觉是一个狗腿子在他主子的教唆下,又来咬人了。当然这是我个人的意见。
扯远了,其实生气的不是这个,而是我想在太平洋网站上发表我的意见时,我再次被告知:
注:所有评论通过审核后才会被公开。
我的评论是这样的:
看来群众的眼睛是雪亮的,作者同志,老百姓没有以前那么容易忽悠了。
我不知道大家注意到没有,越是有竞争力的产品,他的“丑闻”越多,QQ、A5、F6、骏捷,哪个不是丑闻不断??
桑塔纳这么烂的车倒是美其名曰:皮实耐用。
我等了很长时间,我的评论才算是“审核通过”。
我想这就是国人的劣根吧,政府为了保护他们的利益,不允许我们言论自由,现在我们自己呢?一个个都当起了“领导”,然后唯恐别人中伤了他。
我想起我小时候妈妈教我的话:没做亏心事,不怕鬼敲门。

在点发表文章时,看见: 颇感无赖,当然,我是绝对不能也不会批评dudu的,因为dudu的这个网站目前的性质和太平洋网站是完全不同的。
posted @ 2008-03-21 09:55 编写人生 阅读(30) | 评论 (0)编辑
可以查看更多的发明畅想:
取款机钱箱没有钱提示(发明畅想)
微型电动轿车(发明畅想)
智能电视的设想(发明畅想)
压缩空气动力自行车

今天,看见一个有钱的主(又是万恶的资本主义国家的人干的)设计了这个东西:

文章的链接是:实车1:1的超级遥控汽车玩具:HUMMER H3
老实说,这绝对是很多很多的“小男孩”都想干的,大家都想到了,可是我认为这个东西应该有比玩更好的用途:
拿来泊车怎么样?
城市的实在太密集了,新手又多,使用这个东西站在车下,慢慢的倒车如何呢?是不是减少很多的碰撞。

当然,还有别的用途,可惜别人早就想到了,就是战场上,这里就不多说了。
你有更好的用途吗?不妨一起说说。
posted @ 2008-03-20 09:59 编写人生 阅读(147) | 评论 (0)编辑
可以查看更多的发明畅想:

微型电动轿车(发明畅想)
智能电视的设想(发明畅想)
压缩空气动力自行车

我们大家去自助取款机提款时经常有这样的经验,一台取款机已经没有钱了,你插入卡输入密码,一看没有钱,白忙了,只好在旁边的取款机排队,可是同样的事情不断的在后面发生,所有人都想试试看这台机器然后和你一样失望的走到这边继续排队。
所以为什么不在取款机的上方设计一个“钱箱没有钱了”的提示灯呢?最好不断的闪烁的那种。

posted @ 2008-03-20 09:45 编写人生 阅读(168) | 评论 (4)编辑
     摘要: 是关于自定义数据的简单实现,你可以这样使用。//defineConnectionStringproperty.CustomProperty<string>ConnectionStringProperty=newCustomProperty<string>("ConnectionStringProperty");//createcustomDataCustomDatadata... 阅读全文
posted @ 2008-03-10 17:30 编写人生 阅读(46) | 评论 (0)编辑
本人对发动机一窍不通,只知道有直列、V型排列,还有完全不同原理的转子发动机。今天在网上看见这个新的设计,很有意思,看看视频就知道了。
http://www.youtube.com/watch?v=WeiDdhCo7BM
posted @ 2008-02-17 15:44 编写人生 阅读(69) | 评论 (2)编辑
这几天对动态实体做了一些修改,然后同事们一运行就出错了,仔细调试后发现是在反序列化时,我写了一个回调,然而发生回调时,对象没有完全初始化完毕。具体是这样的:
我有个类:DependencyMetadataBase,包含一个方法:
        [OnDeserialized()]
        
private void OnDeserialized(StreamingContext context) {
            
this.OnDeserialization(null);
        }
而且,这个类的派生类包含了一个内部变量:
private DependencyPropertyData _data;
很不幸,这个反序列化时的回调需要使用_data变量,跟踪发现,当回调发生时,_data不是null,但_data内部的变量中,值类型(包括string)都已经填充,但是引用类型(Class)的都是null,导致了我的回调发生错误。
查看MSDN,得到以下文字:

对象将被彻底重新构造,并且在反序列化期间调用方法可能会产生不良的副作用,因为被调用的方法可能引用在进行此调用时尚未被反序列化的对象引用。如果反序列化的类实现 IDeserializationCallback,则在整个对象图已被反序列化后将自动调用 OnDeserialization 方法。此时,所有引用的子对象均已被完全还原。哈希表就是在不使用事件侦听器的情况下很难反序列化的类的典型示例。在反序列化期间检索键/值对十分容易,但将这些对象添加回哈希表可能会造成一些问题,因为不能保证从哈希表派生的类已被反序列化。因此,不建议在此阶段对哈希表调用方法。

所以,我使用IDeserializationCallback实现了回调功能。事实上,我以前另外一个类就使用了IDeserializationCallback这个方法,但为什么后来这个类又不用呢?当时遇到一个问题,假设A实现了IDeserializationCallback,而B也实现了,很遗憾,当A引用了B并反序列化时,并不能保证B先被调用IDeserializationCallback方法,所以当A的IDeserializationCallback调用了B的数据时,很可能B没有调用IDeserializationCallback,造成程序的错误。
所以在当时,我使用了OnDeserializedAttribute,这个回调要早于Callback方式,但很遗憾,直到现在,我才发现OnDeserializedAttribute更危险。
最终的解决方案是都实现Callback模式,但是在A调用B前,先检查B是否已经调用过Callback,如果没有,提前调用。
posted @ 2008-01-31 11:03 编写人生 阅读(110) | 评论 (0)编辑
今天逛了一下ADO.NET Entity Framework团队的Blog,我对这个项目比较感兴趣,因为我也是写ORM的。:) 当然了,那档次不是一个级别的。
这个项目我都不知道放了多少次鸽子了,我还记得ObjectSpace这个东西,到现在出到beta 3,连LinQ都发表了,他总不能再放鸽子吧。(Vista中WinFS我猜想也是这个东西他们的放鸽子,所以WinFS也不得不放鸽子了。)
好,言归正传,有那些东西呢?
首先是Beta 3发布的文章(不能算新闻了),有
- 性能的改进;
- 为商业逻辑支持提供必要的事件;
- 查询的改进,编译的LinQ支持,提供ToReaceString()方法方便调试;
- 更好的对其他数据库的支持;

关于设计器方面:
Entity Designer CTP2
Entity Data Model Designer Video - CTP 2 在ADO.NET Entity Framework中如何使用存储过程;
Customizing Code Generation in the ADO.NET Entity Designer

当然,还有很多的教程之类的
SampleEdmxCodeGenerator sources
Programming LINQ and the ADO.NET Entity Framework Webcast
How does the ADO.NET Entity Designer generate code?
How to Extract CSDL from EDMX
Annotations in CSDL

当然,我最有兴趣的是这个:
ADO.NET performance improvements with the .NET Framework 2.0 SP1
他上面说,.NET FW 2.0 Sp1将SqlReader读取性能从14855增加到18100,不是一般的性能提高啊。
posted @ 2008-01-29 10:58 编写人生 阅读(105) | 评论 (1)编辑

今天看见一篇文章【C#食谱】【面食】菜单1: 何时何地使用泛型 ,总结的很好,我也总结一下,不过是反过来的:何时何地不能使用泛型。
注:以下未特别注明的话,均表示不能对外展现泛型,内部仍然可以使用泛型。
1、控件上,在控件上public一个泛型的属性,意味着窗体设计器无法打开。同样的,在重用的组件上也意味着不能打开设计器 了;
2、WebService上,据我目前所知,目前的WebService规范是不支持泛型的,不管是对外接口,还是返回/传入的数据类型;
3、COM的互操作,COM是不支持泛型的。

解决方案:
在以上的应用中,我们又如何避免泛型带来的麻烦呢?一般你可以:
1、包装泛型类,使其特例化,不再具有泛型的特征。例如:
public sealed class DependencyPropertyCollection : ReadonlyNamedCollection<DependencyProperty>
2、 定义非泛型的接口,将泛型的返回值或参数使用object方式访问,适合COM操作。

欢迎大家补充。
补充:竟然有人说这是垃圾文章,哎,算了,不要丢人了,不要放在首页了。

posted @ 2008-01-28 10:05 编写人生 阅读(1677) | 评论 (10)编辑
 今天同事使用IronPython中的Lambda写程序(我们的程序使用IronPython的Lambda功能),发现一个问题,假设有函数:c = a / b,可是b有可能为0,如果为0,那么我们希望c=0,由于是Lambda表达式,所以必须使用一行话描述,可惜查资料发现IronPython不支持三元运算符,后来查资料,发现Snowdream兄写了解决方案: Python 学习笔记 (3)
修改后的程序是:  b!=0 and a/b or 0,注意这里使用了不等于,我们发现b=0时,不会运算a/b,也就起到我们的目的。
posted @ 2008-01-24 15:18 编写人生 阅读(60) | 评论 (0)编辑
     摘要: IronPython 1.0如何做属性注入很早就有朋友写了文章介绍了,请参考 《IronPython 中的属性注入器机制 》,这是木野狐(Neil Chen) 的 Blog兄的较详细的文章。但是,到了IronPython 2.0这个程序完全变了麽样,在IronPython 2.0中包含了如何做属性注入的测试用例,为防止大家找的辛苦,我就将此代码放在此文章中便于大家搜索。注意本文章基于 2.0A6,... 阅读全文
posted @ 2007-12-20 14:40 编写人生 阅读(76) | 评论 (0)编辑
     摘要: Good afternoon下午好 Good morning 早上好book 书 ruler 尺 pencil 铅笔 rubber 像皮 bag 书包
pencil-box 铅笔盒Give me a …,please.请给我….Here you are. 给你 eye 眼睛mouth 嘴巴
face 脸 nose 鼻子 ear 耳朵 dance 听音乐 read 看书 sing 唱歌 draw 画画 What can you do? 你在干什么? I can …….. 我在。。。。
grandmorher 奶奶grandfather 爷爷father 爸爸mother 妈妈me   阅读全文
posted @ 2007-12-18 12:47 编写人生 阅读(133) | 评论 (0)编辑

 神州数码管理系统有限公司
 公司行业:计算机软件 公司性质:合资(非欧美) 公司规模:500人以上

 .NET 软件工程师/助理架构师

 电子邮箱: duch1@digitalchina.com

 发布日期: 2007-11-23 工作地点: 上海市 招聘人数: 5 工作年限: 二年以上

 薪水范围: 面议 学    历: 大专


 职位描述:
 工作职责:
 1、参与产品的架构设计及开发;
 2、撰写测试代码及相关工具等,并整理相关文档;
 3、培训开发人员。

 职位要求:
 1、2年以上的.Net开发工作经验,精通面向对象编程,逻辑能力佳,熟练掌握c#;
 2、精通SQL Server,熟练掌握T-SQL;
 3、工作积极主动,具自主学习心态和能力,富有责任心和创新精神,乐于分享,团
 队合作能力强;
 4、有SOA、AOP、IOC、OOA、OOD、OOP等方面的开发经验者优先;
 5、具备初步构架设计能力的优先;
 6、有从事企业管理软件,如ERP、CRM、HR者优先。

posted @ 2007-11-23 10:49 编写人生 阅读(383) | 评论 (1)编辑
     摘要: 程序的可扩展性和开发源代码有关系吗?牛马不相及的东西有什么可比性呢?让我从前几天的一个会议开始慢慢道来。
兄弟公司(同父异母的那种)过来一帮“高级领导”,从高端产品到低端产品的经理都到了,大家济济一堂,互相介绍和学习各自的平台经验,其核心是如何保持快速开发的同时,提高平台的可扩展性。  阅读全文
posted @ 2007-11-15 10:15 编写人生 阅读(2364) | 评论 (14)编辑
     摘要: 在我们的项目中,要使用到自定义公式功能,我们利用了IronPython的Lambda功能,可以方便的计算值,但是我们发现,如果表达式涉及的属性发生改变时,公式必须重新计算,怎样析表达式知道到底访问了哪些属性呢?  阅读全文
posted @ 2007-10-17 14:18 编写人生 阅读(1105) | 评论 (1)编辑

目前的系统是完全可以做到动态负载平衡的,包括热切换。
以下是负载平衡的设计备忘录,现在实在是没有时间设计,所以先记下来。
启动流程:
- 主控服务器启动;
- 子服务器启动,根据配置联系主控服务器,登记,主控服务器获取到子服务器的联系信息;
- 子服务器同步现有的状态服务数据;

客户端请求流程:
- 客户端发起调用,主控服务器收到请求;
- 主控服务器分配请求到某个子服务器(省略10000关于分配算法文字);

状态服务流程:
- 每个子服务器包含完整的状态信息(读的频率远远高过写);
- 当收到改请求时,子服务器并不直接写,而是发送给主控服务器,主控服务器发送给所有子服务器;

问题:
- 主控服务器仍然是系统的瓶颈(可能的),但考虑到主控服务器不做任何操作,所以理论上,不超过100000....个客户端时,他不会是瓶颈(好像带宽还是瓶颈);
- 子服务器的突然死机会造成主控服务器联系时的假死,造成一段时间的停止相应,做的好的话应该是队列发送修改指令;
- 数据库仍然是瓶颈,需要其他途径处理负载平衡。
- 数据缓存在多台服务器的更新问题比较麻烦,如果使用状态服务相同的技术的话,会不会服务器直接通讯太频繁。

补充:
如果做静态的负载,即不是动态的负载平衡,设计上要简单的多,每个客户端启动时,向主控服务器请求一个可用的空闲服务器,以后的请求全部指向这个服务器,这样做的话就没有必要同步会话服务了。而且主控服务器的带宽就不是瓶颈了。当然,这个子服务器如果死机了或者忙的受不了了,就没有办法了。

关于SQL Server的负载:
最简单的负载分摊(注意不是负载平衡,是分摊)是:系统仍然使用单一服务器连接设计,这样可以屏蔽设计的复杂性,然后适当的将工作量较大的查询转移到另外一个SQL Server下。
数据库那边当然是做事务类型的复制,订阅数据库是只读的。我想,这个要比缓存服务来的更佳效果明显吧。

posted @ 2007-10-15 15:27 编写人生 阅读(114) | 评论 (0)编辑

接上回的《WPF学习笔记(数据绑定篇2)》,继续

BindValidation

此示例演示了:

  • 如何使用错误模板;
  • 使用样式显示错误信息;
  • 如何在校验发生异常时执行回调;


首先,你可以看见XAML中使用自定义的错误模板,指定错误模板的方式是:

<TextBox Name="textBox1"              Validation.ErrorTemplate="{StaticResource validationTemplate}"
             Style
="{StaticResource textBoxInError}" >
      
<TextBox.Text>
此错误模板我简单改造了一下,变得好看点:
      <ControlTemplate x:Key="validationTemplate">
        
<DockPanel>
            
<Image Source="Error.jpg" Width="16" Height="16"/>
          
<AdornedElementPlaceholder/>
        
</DockPanel>
      
</ControlTemplate>
注意这个模板是ControlTemplate(为什么是控件模板我也不知道,照葫芦画瓢),然后定义了一个布局,左边一个图像,右边一个AdornedElementPlaceholder占位符。
(我在实验时,图像如果没有加入Width和Height,在显示时图片将变得很大)。
当然,你也可以使用样式绑定到异常上来显示错误,例如:
      <Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
        
<Style.Triggers>
          
<Trigger Property="Validation.HasError" Value="true">
            
<Setter Property="ToolTip"
              Value
="{Binding RelativeSource={x:Static RelativeSource.Self},
                              Path=(Validation.Errors)[0].ErrorContent}"
/>
          
</Trigger>
        
</Style.Triggers>
      
</Style>
当然,例子中还显示了,如果校验时发生异常(注意:是异常不是不正确的数据),将发生回调:
          BindingExpression myBindingExpression = textBox3.GetBindingExpression(TextBox.TextProperty);
          Binding myBinding 
= myBindingExpression.ParentBinding;
          myBinding.UpdateSourceExceptionFilter 
= new UpdateSourceExceptionFilterCallback(ReturnExceptionHandler);
          myBindingExpression.UpdateSource();

当然,为什么是ParentBinding呢?需要想想看。
posted @ 2007-09-30 15:54 编写人生 阅读(40) | 评论 (0)编辑
     摘要: 本文介绍了绑定到方法和绑定到层次结构的数据功能.
  阅读全文
posted @ 2007-09-21 12:21 编写人生 阅读(97) | 评论 (0)编辑
     摘要: 此文章是一篇学习笔记,是学习Windows SDK中关于数据绑定部分的笔记。如果你安装了Windows SDK,你一般可以在他的例子目录中找到一个叫 ConnectedData 的目录。  阅读全文
posted @ 2007-09-20 22:02 编写人生 阅读(99) | 评论 (1)编辑
     摘要: (此文所指设计是指批量销售的产品,而非定制话的个案)

很多有两到三年开发经验的程序员很想提高自己的应用程序设计分析能力,希望可以以后做系统分析师,可是这项技能很难从书本或者网络直接的学习到,身边又没有合适的老师,所以经常无所适从,往往是设计模式比他们的架构师背的还熟,可是就是什么也设计不好。  阅读全文
posted @ 2007-09-12 15:03 编写人生 阅读(1701) | 评论 (9)编辑
 Silverlight已经发布了正式版本,我也到网站下载了一个并看看,突然发现了他的例子中包含了这个公司。
NETiKA TECH
之所以说他强,是因为他尽然使用Flash和Silverlight制作了仿造WinForm的控件,包括:
常见的控件,按钮、文本框、复选框、单选框、下拉列表、列表、树、对话框还有日历(这些控件是免费的)。
这个我最佩服,居然做出来Office 2003的工具栏出来,画面绝对表现真实,更加可贵的是工具栏是可以拖动的。
表格控件,内置支持排序、列拖动、编辑。应付一般网站显示绰绰有余。
日历控件,没有看出什么,但效果看起来不错。

WinForm设计器!当然,他现在只有Silverlight(Microsoft的人塞钱了?曰:不要做flash的,我给你补贴,哈哈),当然,他现在还没有跟新到正式版,所以我没有办法看。

总体来说,这毕竟给我们提供了一个不错的选择。
posted @ 2007-09-06 10:58 编写人生 阅读(453) | 评论 (5)编辑
     摘要: 为什么房价能够不断攀生?为什么房地产商敢喊出根本没有消费市场的冲天房价?答案非常简单,因为有一个无论房价多高、无论房屋多少,均“照价付款”、“全部笑纳”的天字号“愚蠢购房者”(其实并不蠢)——银行。
  阅读全文
posted @ 2007-08-29 15:17 编写人生 阅读(68) | 评论 (0)编辑
 不学习就要被淘汰!努力。

主菜单使用Menu作为总容器,可以使用MenuItem作为子项目。
MenuItem最重要的属性是Header属性(郁闷,为什么原先统一的Text属性现在搞得又一团糟),在正文中可以使用下划线表示Alt快捷键,例如:文件(_F) ,又是郁闷的事情,为什么不继续使用 文件(&F) 的方式。
要指定快捷键,可以使用:InputGestureText="Ctrl+X" ,另外,菜单的提示也相对简单,仍然是 ToolTip 属性。
要插入一个分割线,是插入一个<Separator />子项目。
要相应菜单的单击,可以使用 Click="mnuOpen_Click" ,还是很简单。
实验了一下在菜单中插入一个文本框,最终效果是出来了,可是做的还不好,例如光标移动到文本框录入文本时,只要鼠标移走,光标立即就消失,离实用还不够精细(在Orcas beta1下我测试的时候退出程序,VS会崩溃)。
菜单前面的复选框可是使用IsChecked属性控制,点击后自动控制复选框的属性是IsCheckable。菜单的有效性也换了名字,不是Enabled,而是IsEnabled。
posted @ 2007-08-04 10:58 编写人生 阅读(178) | 评论 (0)编辑
     摘要: :本文通过示例和概念解释,阐述了企业信息化软件中权限设计的一般方法,帮助架构师能够快速的建立客户所需的安全模型。

本文内容

企业信息化软件权限设计概述

现状

从一个例子开始

在ERP中运用这些概念

确定主体

定义可用的证书

授权

安全检查

关于拒绝功能

关于ShareTo功能

总结

  阅读全文
posted @ 2007-07-26 10:44 编写人生 阅读(652) | 评论 (2)编辑
 自己研究偏移时的成果,在此备份,所以难得解释。
    public abstract class DcmsCharacteristic {

        
private static int _offset = 0;
        
public static int Offset {
            
get {
                
return _offset;
            }

        }


        
public static int GetOffset(int count) {
            
int result = _offset;
            _offset 
+= count;
            
return result;
        }

    }


    
public static class DcmsCommonUICharacteristic  {

        
static DcmsCommonUICharacteristic() {
            
int offset = DcmsCharacteristic.GetOffset(1);
            DocumentAddressCommandService 
= offset;
        }


        
public static readonly int DocumentAddressCommandService;
    }

使用非常方便
int a = DcmsCommonUICharacteristic.DocumentAddressCommandService;
posted @ 2007-07-18 10:58 编写人生 阅读(52) | 评论 (0)编辑
您好,首先一样佩服你们的工作。
言归正传,所有搞技术的热血青年创业时都非常头大的是市场的问题,我相信目前你们也是。个人认为,与大公司合作(但不是与他们目前产品有冲突的公司),利用他们的资本和市场能力最终推广产品。必须承认,商人永远是利益的追逐者,你要防止和大公司合作时,他把你扼杀了(太多例子了),应该找他的公司现在很有钱,但是他们苦于没有下一代产品。所以你们找汽车行业(从你们的网站的产品中看出)我认为是错误的,我认为你应该去找摩托车行业。
我是软件架构师,很清楚一点,客户是不关心你的技术,只关心你给他的利益。我从你们的网站上来看你们过于注重技术的先进性,而忽略了产品的产业化,成本。关于技术,我们有一个非常好的例子:电瓶车,这个东西从技术上说,简直是垃圾,刚开始的时候一次充电才能跑30-50公里,电池很重,充电时间更是长(马路上经常看见推车的),污染环境更是不说,可是你看见什么了?全中国到处卖电瓶车,火的很,为什么?
如果你是第一个搞电瓶车的?你当时会遇到什么问题?为什么这些问题会迎刃而解?利益?竞争?市场的迎合?都有。
如果有一个公司做了一个燃料电池,成本很低,售价也很低(当然利润却很高),商人敏锐的嗅觉很快会闻到的。老百姓其实在没有选择的情况下,其实根本不管什么污染和危险(电瓶的污染和LPG的气罐)。燃料电池只要符合以下几点一定成功:
1、简单的结构和制造工艺;
2、低廉的价格;
3、与电动车相比更高的利润;
4、提供充气站可行的利润市场。
本来支持简单的留言,一下子说了那么多,结束吧。
posted @ 2007-07-17 14:34 编写人生 阅读(325) | 评论 (3)编辑
     摘要: 观发达国家的工业史,有一样东西是非常重要的,即汽车。而且是微型汽车,那种谁都能够买得起的车,比如菲亚特的500,Mini,宝马,甲克虫都是销售大王。还是说明一个问题:老百姓目前还是先考虑解决问题,再考虑性能、美观等等。  阅读全文
posted @ 2007-07-16 09:37 编写人生 阅读(1185) | 评论 (4)编辑

如果你现在在创建软件开发工具,你现在可以选择基于Visual Studio 2008 Shell。一个流行的Visual Studio 开发环境,Visual Studio Shell提供了一些核心功能,使你能够创建独一无二的应用程序,弹性的自定义能力帮助你推出更加特别的产品。

关键特性

*                               快速开发:Visual Studio Shell提供完整的开发环境从而加快你的开发进度,他能够宿主你的自定义工具以及自己的语言。

*                               熟悉的环境:开发人员能够基于Visual Studio平台开发,而且最终用户也能够获得相同的界面,大大加快两者的学习进度。

*                               特别为语言和工具设计:基于对合作伙伴的调查,Visual Studio Shell使您能够创建基于Visual Studio的自定义工具或者创建完全独立的,具有自由商标的应用工具。


(完整模式)

特别为编程语言优化

应用程序运行在完整的环境中,并自动和计算机中已经安装的Visual Studio其他部件合并。

下图是Visual Studio Shell完整模式下运行IronPython的例子。
     

(独立模式)

特别为专业工具优化

应用程序独立运行,与计算机中安装的Visual Studio 其他部件隔离。

                               下图是一个独立的Fabrikam Home 设计环境,他建立在独立模式。

  *                              

问答

问:我如何才能使用Visual Studio Shell?

Visual Studio Shell将提供给我们的合作伙伴(VSIP,包括beta 2版本,我们即将发布最终的版本。