RSS 2.0 Feed

Friday, January 12, 2007

利用本工具,可以轻松查看,编辑资源文件,支持所有的可序列化的类型作为资源,第二个propertyGrid针对资源值是对象的资源进行深层次的编辑.如果想将自己的类作为资源嵌入,只需要将Assembly放在GAC或者当前程序路径下即可(下载地址http://www.cnblogs.com/Files/dahuaidan410/StrongTypedRexEditor.rar)

posted @ | Feedback (5) |

Monday, June 26, 2006

三个和尚的故事新编 三个和尚没水吃之后…… 一个和尚挑水吃、两个和尚抬水吃、三个和尚没水吃。总寺的方丈大人得知情况后,就派来了一名主持和一名书记,共同负责解决这一问题。主持上任后,发现问题的关键是管理不到位,于是就招聘一些和尚成立了寺庙管理部来制定分工流程。为了更好地借鉴国外的先进经验,寺庙选派唐僧等领导干部出国学习取经;此外,他们还专门花钱请来了天主教堂、基督教会的神父传授MBA。外国的神父呆了不久留下几个屁就走了,一个屁叫BPR,一个屁叫ERP。   书记也没闲着,他认为问题的关键在于人才没有充分利用、寺庙文化没有建设好,于是就成立了人力资源部和寺庙工会等等,并认认真真地走起了竞聘上岗和定岗定编的过场。几天后成效出来了,三个和尚开始拼命地挑水了,可问题是怎么挑也不够喝。不仅如此,小和尚都忙着挑水、寺庙里没人念经了,日子一长,来烧香的客人越来越少,香火钱也变得拮据起来。为了解决收入问题,寺庙管理部、人力资源部等连续召开了几天的会,最后决定,成立专门的挑水部负责后勤和专门的烧香部负责市场前台。同时,为了更好地开展工作,寺庙提拔了十几名和尚分别担任副主持、主持助理,并在每个部门任命了部门小主持、副小主持、小主持助理。   老问题终于得到缓解了,可新的问题跟着又来了。前台负责念经的和尚总抱怨口渴水不够喝,后台挑水的和尚也抱怨人手不足、水的需求量太大而且没个准儿,不好伺候。为了更好地解决这一矛盾,经开会研究决定,成立一个新的部门:喝水响应部,专门负责协调前后台矛盾。为了便于沟通、协调,每个部门都设立了对口的联系和尚。协调虽然有了,但效果却不理想,仔细一研究,原来是由于水的需求量不准、水井数量不足等原因造成的。于是各部门又召开了几次会,决定加强前台念经和尚对饮用水的预测和念经和尚对挑水和尚满意度测评等,让前后台签署协议、相互打分,健全考核机制。为了便于打分考核,寺院特意购买了几个计算机系统,包括挑水统计系统、烧香统计系统、普通香客捐款分析系统、大香客捐款分析系统、挨上必死系统(简称IBS系统)、马上就死系统(简称MS系统)等,同时成立香火钱管理部、香火钱出账部、打井策略研究部、打井建设部、打井维护部等等。同时延长挑水和尚的挑水时间.   由于各个系统出来的数 总不准确、都不一致,于是又成立了技术开发中心,负责各个系统的维护、二次开发。由于部门太多、办公场地不足,寺院专门成立了综合部来解决这一问题,最后决定把寺院整个变成办公区,香客烧香只许在山门外烧。   部门多、当官的多文件和开会自然就多,为了减少文山会海,综合办牵头召开了N次关于减少开会的会,并下达了“关于减少文件的文件”。同时,为了精简机构、提高效率,寺院还成立了精简机构办公室、机构改革研究部等部门。一切似乎都合情合理,但香火钱和喝水的问题还是迟迟不能解决。问题在哪呢?有的和尚提出来每月应该开一次分析会,于是经营分析部就应运而生了。分析需要很多数据和报表,可系统总是做不到,于是每个部门都指派了一些和尚手工统计、填写报表、给系统打工。   寺院空前地热闹起来,有的和尚在拼命挑水、有的和尚在拼命念经、有的和尚在拼命协调、有的和尚在拼命分析……忙来忙去,水还是不够喝、香火钱还是不够用。什么原因呢?这个和尚说流程不顺、那个和尚说任务分解不合理,这个和尚说部门界面不清、那个和尚说考核力度不够。   只有三个人最清楚问题之关键所在,那三个人就是最早的那三个和尚。说来说去,就是闲人太多了!他们说:“整天瞎分析个屁!什么流程问题、职责问题、界面问题、考核问题,明明就是机构臃肿问题!早知今日,还不如当初咱们仨自觉自律一点算了!如今倒好,招来了这么一大帮傻B,一个个不干正经事还人五人六的,跟屎盆子一样甩都甩不掉!” .   又过了一年,寺院黄了,和尚们也都死了。人们在水井边发现了几具尸体,是累死的;在寺院里发现了几千具尸体,是渴死的。

posted @ | Feedback (4) |

Saturday, May 27, 2006

看到有博客堂的弟兄介绍一个Enterprise Library签名工具,我正好需要,便去下载,结果链接失效,没办法,自己写了一个,相信不少人会需要,它的作用是对Solution下的所以项目加强名(源代码级)当然对其它的solution一样可用。

有人问有没有帮助文档之类的,我推荐大家去看

蝈蝈俊 Enterprise Library 强签名的问题,entlib自带帮助文档里面也有详细的说明,看后我想你就明白工具怎么用了:)

下载地址:EnterlibSignTool.rar

posted @ | Feedback (12) |

Saturday, December 10, 2005

一向自认为自己的电脑安全还是做的到位的,可还是不知什么时候机器里面被装上了流氓软件,说流氓软件,对这样一个知名的国内软件企业来说

,好像不合适,毕竟人家的初衷是好的,不过我想起一个笑话,一个做好事的人,扶盲人过马路,只不过那个盲人根本不想过马路,他给人家拽过去了

.我不幸体会了那么盲人的感受.好心的3721帮我这个老程序员实现了中文上网!!!而且害怕我不会安装软件,在我不知情的情况下,帮我安装上了

.我想3721的老总在我面前,我会毫不犹豫地用拳头感谢他.
不过就是装了个软件嘛!卸了就是了.我开始也这么想.尽管对3721无法彻底卸载早有耳闻,我还是忍不住打开控制面板下的添加删除程序--嗯不

错,确实没有卸载的地方.
这个难不倒我,怎么也算是老鸟了,不过接下来的事情就让我汗颜了.
打开任务管理器,将可疑的进程通通杀掉.Rundll32.exe杀不掉,幸亏XP的ntsd命令可以杀死该进程,然后就是找到C:\WINDOWS\DOWNLO~1\和

C:\WINDOWS\DOWNLO~1\3721\目录,将所有的文件通通删除,删完随手按了一下F5,我以为我眼睛花了,怎么文件还在,再删一回,可一会功夫,文件

又回来了.就是这两个臭虫
C:\WINDOWS\DOWNLO~1\3721\CnsHook.dll
C:\WINDOWS\DOWNLO~1\3721\CnsMin.dll
算了,先清注册表打开注册表,查找上面的两个dll文件,找到一大堆注册表项,毫不犹豫,删就一个字,结果如下:

---------------------------
删除项时出错。
---------------------------
无法删除 {D157330A-9EF3-49F8-9A67-4141AC41ADD4}: 删除项时出错。
---------------------------
确定  
---------------------------

想起明天要的文档,此时的我已经想砸东西.我强压怒火,进入安全模式,费了九牛二虎之力,删除N个文件,几十个注册表项目,重启,总算看不到恶

心的3721了,我知道,我的机器里面依然还残留着3721的尸体,我也知道,我耗不起时间跟它折腾了,还是先干活要紧.
休息的时候,我想起了那些非计算机专业人士,难道他们面对3721只有被迫接受或将机器格了重装?即时重装,天知道3721何时还会再次光临.常上

网的人都知道,国内站点到处充斥着欺骗性的广告,例如:某站点有MM要跟你视频,是否接收,界面跟QQ的一模一样,点进去,一定是一个无聊的站点

连接.或者是,你有新的更新,是否安装,等等,不胜枚举..

可气的是这些公司还道貌岸然,好像为中国的信息产业做了多大的贡献似的.谁来整治他们?我是一个靠技术生存的人,对付这样的始作佣者,我好

像也只想说:打他个孙子的

posted @ | Feedback (78) | Filed Under [ 非技术类 ]

Thursday, October 20, 2005

单位防火墙限制上班时间上网,但不会打断已经建立的连接.所以得在上班前登录MSN和QQ,否则一天就跟外界失去了联系.仅在任务里面添加,不登录程序运行,则无法看到UI.想到安装VS.NET系统能够自动重启登录,于是上网找了找,方法如下:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 下面

设置AutoAdminLogon 1

DefaultDomainName

DefaultUserName

一般还要增加一个值

DefaultPassword 存储密码

posted @ | Feedback (1) |

Wednesday, September 21, 2005

 

主页2:添加了特价,推荐和最新商品

 

购物车界面

 

允许非会员购物:

 

申明:本系统界面风格参考阿米购物网(PHP),部分图片也来自该站点,无侵权意图,最终发布不会使用这些图片

posted @ | Feedback (7) | Filed Under [ 网上商店,网上商城开发 ]

Tuesday, September 06, 2005

function GetCookieVal(offset)
//获得Cookie解码后的值
{
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function SetCookie(name, value)
//设定Cookie值
{
var expdate = new Date();
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
if(expires!=null) expdate.setTime(expdate.getTime() + ( expires * 1000 ));
document.cookie = name + "=" + escape (value) +((expires == null) ? "" : ("; expires="+ expdate.toGMTString()))
+((path == null) ? "" : ("; path=" + path)) +((domain == null) ? "" : ("; domain=" + domain))
+((secure == true) ? "; secure" : "");
}
function DelCookie(name)
//删除Cookie
{
var exp = new Date();
exp.setTime (exp.getTime() - 1);
var cval = GetCookie (name);
document.cookie = name + "=" + cval + "; expires="+ exp.toGMTString();
}
function GetCookie(name)
//获得Cookie的原始值
{
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen)
{
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return GetCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}

posted @ | Feedback (20) |

现有如下代码:

RemotingConfiguration.Configure(...)  
  
RemoteObject refObj = new RemoteObject();  //cf为Remoting承载远程组件
 
BusiObject o = refObj.GetObject("Name") as BusiObject;  //返回对象为EnterpriceService
 
o.TestMethod();  //此处会出错

就此问题,微软已有解答:Exposing ServicedComponents As a Remoting Endpoint from a COM+ Dllhost.exe Process Is Not Supported http://support.microsoft.com/default.aspx?scid=kb;en-us;322627

? You can host your ServicedComponents in IIS by selecting uses SOAP on the Activation tab of the properties for the COM+ application.
? You can use a custom host that hosts the ServicedComponents from a COM+ library application.

其实将组件承载在Library模式的COM+应用里即可

posted @ | Feedback (1) |

Monday, August 08, 2005

   首先,ContentContainerPlaceHolder继承而来。PlaceHolder是什么,我们看看它的源代码:

public class PlaceHolder : Control

{

      // Methods

      public PlaceHolder();

}

可见PlaceHolder除了继承了WEB.UI.Control,什么也没有做,我们可以将它理解成一个空的Control,大家知道Control之所以能够对页面产生

作用,主要依赖于其Render方法。ContentContainerPlaceHolder继承,单并没有重写Render方法,从客户端的角度来看,它不能对网页产生

任何影响。单作为网页上的控件,它在服务器内存页面布局里面是实实在在存在的,所以,ContentContainer其实是作为容器存在的,它本身

对页面的渲染不起任何效果,单当重写了Render方法的控件被放置到容器中时,它的作用就体现出来了。它帮助将要被放置在其中的控件在页

面上占据了一个位置,使得它的子控件被定位在特定的区域。

 

ContentContainer有一个属性MasterPageFileMasterPageFile指向一个ascx文件,其实就是一个控件。

ContentContainer被初始化时,首先就是加载MasterPageFile控件

ContentContainer中除了放置MasterPageFile控件外,还放置名为Content的控件集合,Content类同样也是一个占位控件。

MasterPageFile控件内部,包含了一个Region控件(也是占位控件)的集合,ContentContainer.MoveContentsIntoRegions方法就是将所有

Content控件放置到各个Region区域,Regions的作用其实就是在MasterPage内部对Contents进行布局。

 

接下来,我们从CCS首页开始来分析Masterpage是如何使用的,

Default.aspx内容如下:

………………………………

      

             

      

该页面包含两个控件,SelectedNavigation控件用于记录当前导航位置,在此不考虑。

可以看到,整个页面就是由一个ContentContainer控件组成,上面我提到该页面加载时会加载对应的Masterpage控件,我们其实就可以将ContentContainer的位置替换成Masterpage的内容,如图示:

 

我们可以将Default.aspx的内容看成上图(Masterpage的内容),不过我们不要忘了ContenContainer还包含下面红色标记的Content子控件:

      

             

      

ContentContainer加载时会调用.MoveContentsIntoRegions方法。蓝色区域是一个Region控件,MoveContentsIntoRegions方法就是将Content变成同名Region控件的子控件。最终的效果就是,Content的内容被替换到Masterpage蓝色标注的区域。

主页面Default.aspx由两个控件组成:Masterpage控件和BodyLayoutTemplate(内容)控件。

 

Masterpage包含了标题栏控件DisplayTitleFooter控件已经一些占位控件。ContentContainer加载Masterpage控件后,再加载BodyLayoutTemplate控件,并将BodyLayoutTemplate控件定位到Masterpage控件预留的占位区域。

 

posted @ | Feedback (4) |

Friday, July 01, 2005

dim WshShell
dim cancel
Set WshShell= WScript.CreateObject("WScript.Shell")
WshShell.run "Shutdown /s /t 10 /c 开始自动关机了,请注意将资料存盘 /d p:1:1"
if msgbox("确定关机吗?",vbyesno) = vbno then
?? WshShell.run "Shutdown /a"
end if

可以将该脚本添加到计划任务中,以确保每天下班后计算机自动关机,避免切电源带来的风险如果执行此关机脚本时您正在工作,脚本提供给您取消关机操作的机会:

?

对弹出的对话框,不理睬或单击Yes都会继续关机,可以选择No来取消关机过程

注意:文件后缀保存为vbs

posted @ | Feedback (7) |

Thursday, June 30, 2005

由于一直没有时间上网,好久没有更新我的BLOG,今天上来一看,排名居然没有下跌,暗自庆幸之余,也意识到博客堂没有以往的人气了,如何重聚博客堂的人气,是我们应该思考的问题。

posted @ | Feedback (5) |

Friday, June 10, 2005

原文参考:Using distributed transactions in .Net 1.x without deriving from ServicedComponent

COM+或者System.EnterpriseServices最常用的功能就是它对分布式事务的支持,并且自动事务处理模型很容易通过特性 ([Transaction] 和 [AutoComplete])来实现,这是很常用并且很好的做法,但是,你的类需要从ServicedComponent继承,并且 Transaction特性仅仅在类一级有效,同时你还需要将你的组件注册到COM+中。
如果这些看起来很复杂,但你需要的仅仅是需要使用分布式事务而已,而你并不关心其它的COM+功能,这里将为你提供一个解决方案:通过使用System.EnterpriseServices.ServiceDomain来实现对分布事务的支持。

using System;
using System.EnterpriseServices;
namespace SDSample
{
   class Class1
   {
      [MTAThread]      
      static void Main(string[] args)
      {
         ServiceConfig config = new ServiceConfig();
         config.Transaction = TransactionOption.Required;
         ServiceDomain.Enter(config);
         try
         {

            MyTxCode();
     ContextUtil.SetComplete();

         }

         catch(Exception e)

         {
            // we got an exception
            Console.WriteLine(e.Message);
            // 我们需要退出事务,对常写COM+组件的人不会陌生
            ContextUtil.SetAbort();
         }

         finally
         {
            ServiceDomain.Leave();
         }

      }

      // 我的事务代码
      static void MyTxCode()
      {
         Console.WriteLine(ContextUtil.TransactionId);
         // Open connection to database 1
         // Execute update in database 1
         // Open connection to database 2
         // Execute update in database 2
      }
   }
}

当然, 更进一步,你可以创建一个辅助类型, 我们叫它 ESTransactionScope (与Whidbey 中的 System.Transactions.TransactionScope类似) :
using System;

using System.EnterpriseServices;

 

namespace SDSample2

{

   class Class1

   {

      [MTAThread]      

      static void Main(string[] args)

      {

         using( ESTransactionScope ts = new ESTransactionScope())

         {

           MyTxCode();

 

           // Everything went well, no exception thrown

           // so let’s vote for Commit

           ts.Complete();

         }

      }

 

      static void MyTxCode()

      {

         Console.WriteLine(ContextUtil.TransactionId);

                 

         // Open connection to database 1

         // Execute update in database 1

 

         // Open connection to database 2

         // Execute update in database 2             

      }

   }

 

   // Used to create transactional code blocks

   class ESTransactionScope : IDisposable

   {

      // Dispose must be called to exit the transactional block

      public void Dispose()

      {                

         if(!this.Consistent)

         {

            ContextUtil.SetAbort();

         }

         ServiceDomain.Leave();

      }

 

      // by calling this method, you mark the scope as being consistent

      // and ready to for commit

      // if the method is never called, upon dispose, the scope will abort the transaction

      public void Complete()

      {

         this.Consistent = true;

      }  

 

      public ESTransactionScope()

      {                

         EnterTxContext(TransactionOption.Required);

      }

 

      public ESTransactionScope(TransactionOption txOption)

      {

         EnterTxContext(txOption);

      }

 

      private void EnterTxContext(TransactionOption txOption)

      {

         ServiceConfig config = new ServiceConfig();

         config.Transaction = txOption;

         ServiceDomain.Enter(config);          

      }

 

      // By default, the scope is inconsistent;

      // To Commit the transaction on exit, the Consistent flag

      // must be set to true before Dispose is called

      private bool Consistent = false;

   }

}

 注:在.NET Framework 2.0中提供一个System.Transaction的命名空间,其实现原来于上述相同,同样依赖COM+提供的DTC服务


 

posted @ | Feedback (7) |

Friday, April 15, 2005

CLR rofiler允许你查看进程的托管堆并且研究垃圾回收器的特性,使用该工具的不同视图,你可以得到你的应用程序有关执行,分配,已经内存消耗的情况。

CLR rofiler不是分析问题的起点,确切的说,它帮助你鉴别并且隔离有疑问的代码并且追踪内存泄漏。使用CLR Profiler,你可以鉴别哪些代码分配了太多的内存,导致太多次的内存回收已经占有内存时间太长。

    注意:CLR Profiler是一个插入式的分析器,它会严重地减慢被分析的应用程序的运行速度,某些情况下会导致10100倍的速度减缓,该工具不是设计用在产品环境中。

你需要了解的:

The primary function of CLR Profiler的主要功能是允许你了解你的应用程序如何与托管的,可回收的堆交互的。更重要的是,你可以研究包括:

    谁在托管堆上分配了什么(谁,什么)

    谁存活在托管堆上

    谁引用了对象

    垃圾回收器在你的程序的生存周期内做了什么

嗅探的结果被保存在日志文件中,你可以通过CLR Profiler的视图菜单以不同的方式来显示相应的视图。下表描述了几个主要的视图:

视图

对应的描述

Histogram Allocated Types

给你一个在你程序的生命期中哪些类型对象被分配的高级视图,该视图还显示被分配在大对象堆中的对象,

Gives you a high-level view of what object types are allocated (by allocation size) during the lifetime of your application. This view also shows those objects that are allocated in the large object heap (objects larger than 85 KB).

This view allows you to click parts of the graph so that you can see which methods allocated which objects.

Histogram Relocated Types

展示被垃圾回收器迁移的对象(因为它们在垃圾回收过程中被保留)

Objects By Address

显示在指定的时间托管堆上都有哪些对象

Histogram By Age

允许你查看托管堆上对象的生命期

Allocation Graph

图形化显示对象分配的调用堆栈,你可以使用该视图:

-查看每个方法的内存消费

-找出你不期望的内存分配

-找到有可能过度分配内存的方法

Assembly, Module, Function, and Class Graph

这四个视图很相似.你可以看到某个方法涉及到哪些Assembly,哪些类,哪些模块,哪些函数

Heap Graph

显示托管堆上的所有对象,以及它们的相关联对象.

Call Graph

Lets you see which methods call which other methods and how frequently.

You can use this graph to get a feel for the cost of library calls and to determine how many calls are made to methods and which methods are called.

Time Line

Displays what the garbage collector does over the lifetime of the application. Use this view to:

-Investigate the behavior of the garbage collector.

-Determine how many garbage collections occur at the three generations (Generation 0, 1, and 2) and how frequently they occur.

-Determine which objects survive garbage collection and are promoted to the next generation.

You can select time points or intervals and right-click to show who allocated memory in the interval.

Call Tree View

Provides a text-based, chronological, hierarchical view of your application's execution. Use this view to:

-See what types are allocated and their size.

-See which assemblies are loaded as result of method calls.

-Analyze the use of finalizers, including the number of finalizers executed.

-Identify methods where Close or Dispose has not been implemented or called, thereby causing a bottleneck.

-Analyze allocations that you were not expecting.

 

posted @ | Feedback (6) |

Monday, March 21, 2005

昨天调程序,启动框架,居然:

气愤之下,写了如下工具:

该工具纯粹是API堆出来的。。。。使用后结果:所有按钮都可用了。工具保留。用来整人。:)

 

 

posted @ | Feedback (12) |

Friday, March 04, 2005

最近忙与一个项目,也没有更新我的BLOG,今天算测试通过,可以松口气了,接下来的日子,我会把最近的心得分享给大家。

posted @ | Feedback (7) |