iTimothy

君看一叶舟,出没风波里


  • 首页

  • 分类

  • 归档

  • 项目

  • 关于

MVP连任成功 I'm coming back :)

发表于 2006-10-07 | 分类于 随笔 | | 阅读次数:
字数统计: 102 字 | 阅读时长 ≈ 1 分钟

10月6日从深圳回来,迫不及待地打开我的hotmail,果然有一封邮件在那里,标题是“恭喜你……”。很荣幸的连任MVP,被授予2007 Microsoft® MVP 称号。

在此特别感谢Microsoft,感谢Sisley,感谢CCTV。我会更加努力的。 [cool] 今天去梁振的MSN Space,看到他也连任成功,再次祝贺你哦 :)

从今日起,恢复Blog的MVP标徽。

MVP任期结束

发表于 2006-09-28 | 分类于 随笔 | | 阅读次数:
字数统计: 217 字 | 阅读时长 ≈ 1 分钟

不知不觉,又快一年了。而在9.30号,我的MVP一年的任期也将结束了。回顾这一年,自己又有了不少的进步。从最开始的VC到现在接触到.net,对我的发展方向也有很大的影响。MVP不仅仅是一个称号,而是一种文化、一种勉励。让我能不断的去学习新的技术,和大家一起分享。

在这一年,我有幸参加了成都的MVP Open Day,见到了传说中的MVP Leader :Sisley。也见到了Eddie Liu。认识了Eric Liu,Eric Zhong,Richie,Simon,Jack,Kim,还有Aaron Zhao,和张美波,梁振.

估计10月连任的消息会在国庆左右公布,希望自己连任能成功。从今天起,我会取消在我的blog上面的MVP徽标。希望能有机会再次将他挂上 [cool]

调试windows服务的一点经验【补充】

发表于 2006-09-18 | 分类于 技术控 | | 阅读次数:
字数统计: 466 字 | 阅读时长 ≈ 1 分钟

上次写过一个调试windows服务的一点经验的日志。这段时间也在做一个和Windows Service有关的东西。又有了些经验,所以拿来和大家分享下。调试windows服务,采用的一般方法,就是设好断点,然后启动服务,在IDE里面直接通过进程列表,把Service的exe附加到IDE上面来调试,这个方法在上一个日志也提到过。其实在.NET建立的服务程序中,还有一个方法,也是之前没有想到的方法,更为简单 :)

// 进程的主入口点 static void Main() { System.ServiceProcess.ServiceBase[] ServicesToRun;

    // 同一进程中可以运行多个用户服务。若要将
    //另一个服务添加到此进程,请更改下行
    // 以创建另一个服务对象。例如,
    //
    //   ServicesToRun = New System.ServiceProcess.ServiceBase[] {new Service1(), new MySecondUserService()};
    //
    ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() };

    System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}

也就是在Main方法,服务程序开始的地方,如上,把默认的创建并运行服务的代码全部注释掉,然后直接生成本类的一个实例,然后调用OnStart方法就可以了,这里要注意的是OnStart方法是一个受保护的无返回值的方法,而Main函数是静态方法,所以需要把OnStart也改动一下,设置为静态函数。这样的话,服务和一般的.net应用程序就一样了,调试的时候更加方便,直接F5就可以了 :) 不过在完成调试过后,一定记得要把上面的改动还原 [cool]

改动后的代码如下:

// 进程的主入口点
static void Main()
{
    Service1 obj=new Service1();
    obj.OnStart();
}

这个方法虽然有点投机,不过确实能够节省很多步骤,让调试服务和调试一般的应用程序那样方便!值得推荐

胡思乱想

发表于 2006-08-25 | 分类于 随笔 | | 阅读次数:
字数统计: 689 字 | 阅读时长 ≈ 2 分钟

打开音乐播放器,听着无印良品的《胡思乱想》,喝着可乐,敲着键盘。我又来了。实在想不出一个恰当的标题,所以就以这首歌来命名了。到CSDN论坛和同学的BLOG上逛了逛,又想起了那惬意的大学时光,想起军训的时候,一起在操场上晒太阳。寝室里几个同学一起出去FB,喝酒,一起谈论将来的打算,规划着自己的未来,仿佛一切都是昨天的事。可是现在都各奔东西了,很难再聚到一起。前两天收到柯班长的短信,他也要去山东了,说以后见面的机会也少了。 晕。。。“首长“也去深圳混了,不过我还是时时发短信骚扰他,呵呵。冬瓜也开始搞JSP了,恭喜,我们班第一个女程序员。哈哈。看了卡罗斯的BLOG,果然是雅安的才子,每篇文章都充满艺术细胞。

最近在网上买了2本英文原版的计算机书,一本是《.NET本质论–公共语言运行库》,一本是《深入浅出设计模式》。其实早在上大学的时候,就有想买原版英文书的愿望了,只是对自己英文没信心,怕买了看不懂,浪费。不过这次确实没办法,《.NET本质论–公共语言运行库》缺货,只有英文版的有货。另一本《深入浅出设计模式》,是我的同事Simon介绍的,比较经典,而且现在国内还没有中文版的,说是怕翻译差了被读者骂,貌似还没有人来翻译,呵呵。我以及准备装个金山词霸,有不懂的单词就查。

这段时间,公司在搞BizTalk的培训,培训完了还要考试,郁闷。以后的公司业务,都要往SOA架构转移。下来看了BizTalk的视频资料,收获不少。对整个BizTalk的原理和开发流程有了一定的了解。不过BizTalk也不是省油的灯,对机器要求比较高,最低1GB内存。再加上装一个SQL Server 2005、Visual Studio 2005 (My god…)。幸好上次把我的本本升级为1GB。不过硬盘空间可能不够了,看来要搭建这样的环境,还要好好清理一下硬盘。最近想学的东西也很多,想学学C++/CLI, VC界面开发技术,感觉自己浮躁了点,该好好静下来看看书了。[cool]

最后总结一下,这个夏天,我还是有收获的,喜爱上了游泳,特别是潜水,在水下感觉很舒服,不过天气也凉了,不知道还能不能继续游。

微软的XNA Framework

发表于 2006-08-18 | 分类于 技术控 | | 阅读次数:
字数统计: 396 字 | 阅读时长 ≈ 1 分钟

今天在MSDN网站上逛,看到了醒目的XNA标题。不得不佩服MS在平台这方面的雄心。 XNA,是MS针对游戏领域开发的一个体系。现在只要谈到未来的游戏发展蓝图几乎跟XNA脱不了关系。由于XNA整合了电脑/ XBOX家族 / 手机游戏 的开发环境,甚至可说XNA是未来XBOX二代机最重要的核心,也难怪MS对XNA如此重视。这样看来,在经后的游戏开发,就有了一个统一的平台,这也可以看出MS在游戏领域的雄心。MS同时提供XNA Game Studio Express/Professional 开发环境。 XNA Framework也是一系列的托管类库,是基于.NET 2.0的,并且建立在DirectX基础之上。通过XNA Game Studio,游戏开发者、游戏爱好者,都可以根据自己的爱好来开发游戏了,这不得不是一个诱人的地方。想想自己也可以开发游戏了,不用像以前那样,用C/C++调用复杂的Direct X SDK来开发游戏的过程。把这些绘图、物理运算、音效、网络等不同范围的程序完全整合在一个工具中,并提供最完善的函数库让游戏开发人员能学会使用、全盘了解,这就是XNA Framework。也许这还不够,而在MS规划中希望XNA Framework的最终目标,能让开发一款游戏就像制作一个网页那么简单!

有关更多XNA的信息: http://msdn.microsoft.com/directx/XNA/default.aspx

.NET中的文件监视类

发表于 2006-08-02 | 分类于 技术控 | | 阅读次数:
字数统计: 422 字 | 阅读时长 ≈ 1 分钟

最近做的一个项目,涉及到对某个目录的操作的监视,其实在.NET中,使用.NET中的文件监视类,就可以轻松实现对某个目录,以及其子目录的文件监视。比如新建文件、修改文件、删除文件等操作。并且能够以事件的形式通知程序。只要我们在事件委托里面,绑定相应的处理函数即可。.NET的功能果然很强大,只需要几句简单的调用,我们就可以实现这样的监视功能了。

我们以一个例子来实现吧:

static void Main(string[] args)
    {
        FileSystemWatcher m_Watcher=new FileSystemWatcher();
        m_Watcher.Path=@"d:\test";
        m_Watcher.IncludeSubdirectories=true;
        m_Watcher.Filter="*.*";
        m_Watcher.NotifyFilter=NotifyFilters.LastWrite | NotifyFilters.FileName;
        m_Watcher.Created+=new FileSystemEventHandler(OnChanged);
        m_Watcher.Changed+=new FileSystemEventHandler(OnChanged);
        m_Watcher.Deleted+=new FileSystemEventHandler(OnChanged);
        m_Watcher.EnableRaisingEvents=true;

        Console.WriteLine("Press \'q\' to quit the sample.");
        while(Console.Read()!='q');
    }

    private static void OnChanged(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine(DateTime.Now.ToString()+" {0} {1}",e.ChangeType,e.FullPath);
    }

程序比较简单,先是生成FileSystemWatcher的实例,然后进行相应的设置。我在这里设置要监控的目录 为D:\Test,监控所有文件,也即.。然后通过事件,添加响应事件的函数OnChanged到Created、Changed以及Deleted事件中。这样的话,当文件被创建、修改、或者被删除的时候,就能调用我们的OnChanged函数。此函数中的FileSystemEventArgs包含了具体事件的一些信息。比如被修改的文件名、被出发的事件类型等等。通过在回调函数的判断,我们就可以实现响应的操作了。

程序运行效果如下图:

【代码下载】 点击下载此文件

使用NUnit对.NET程序进行单元测试

发表于 2006-07-24 | 分类于 技术控 | | 阅读次数:
字数统计: 925 字 | 阅读时长 ≈ 3 分钟

每一个开发出来的软件,在发布之前,都需要进行测试。因为没有程序员敢保证自己的代码没有BUG。而测试又分为很多种,今天所要介绍的单元测试,属于众多测试手段中的一种。我的观点,单元测试是应该由开发人员在编码过程结束后,所进行的一种自我测试手段,是测试过程的第一步。

单元测试的目的,就是针对要测试的模块或者方法,写一段代码用来测试,看是否达到预期的结果。不同的开发语言,单元测试的工具也不一样。JAVA语言开发系统:目前比较流行的是JUnit;.Net语言开发系统:目前比较流行的是:NUnit;C/C++语言开发系统:目前比较流行的是CPPUnit。

今天要介绍的是NUnit,NUnit的工具,大家可以到www.nunit.org的网站去下载。下载后双击安装,在桌面可以找到一个NUnit的GUI程序快捷方式。NUnit提供GUI和CUI的两种界面。

首先,我们要构建一个被测试的类。在这里,我们假定有一个类 MyClass:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace NUnitTest
{
public class MyClass
{

private int m_Value;
public MyClass()
{
m_Value=0;
}

public void Add(int nAmount)
{
m_Value+=nAmount;
}

public int CurrentValue
{
get{return m_Value;}
}

}
}

类提供一个Add方法和一个CurrentValue的属性。Add方法,用于对成员变量m_Value值进行加法运算。 CurrentValue属性用于获取当前m_Value的值。

在完成这个类之后,我们就需要对这个类进行单元测试了。具体的方法,是建立另外一个类库,在这个工程里面,引用我们的MyClass类所在的程序集。并且在NUnit的安装目录下的bin子目录,添加对NUnit.Framework.dll的引用。我们的测试类构建如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using NUnit.Framework;
using NUnitTest;

namespace NUnitTest
{
[TestFixture]
public class MyClassTest
{
public MyClassTest()
{
}

[Test]
public void TestMethod()
{
MyClass obj=new MyClass();
obj.Add(50);
Assert.AreEqual(50,obj.CurrentValue);
}
}
}

注意,其中的[TestFixture]和[Test]两个Attribute为NUnit所规定必须要添加的,这样,测试框架就可以知道哪些类或者方法需要进行测试。并且根据NUnit在线文档的规定,测试的方法之前,必须加上Test特性。并且改方法必须返回void,还不能带输入参数。

在这个方法种,就是我们针对Add方法的具体测试代码了,代码比较简单,就是调用Add方法,改变m_Value的值为50。然后调用Assert类的静态方法AreEqual进行测试,比较m_Value当前的值是否是我们所预期的值:50。

保存好工程后,编译该测试的程序集。然后打开NUnit GUI程序。加载这个测试的程序集到工具中。选中工程,然后点击右边的Run按钮。如果左边全部变为绿色,表示测试通过。

加入我们将上面的

1
Assert.AreEqual(50,obj.CurrentValue);

改为:

1
Assert.AreEqual(60,obj.CurrentValue);

显然,我们期望的值是60,而实际值并不是60。则测试不会通过,并且会提示:

1
2
3
NUnitTest.MyClassTest.TestMethod :
expected: <60>
but was: <50>

在下面的输出窗口,会提示发生错误的具体的代码位置:

1
at NUnitTest.MyClassTest.TestMethod() in d:\mycode\c# projects\nunittest\myclasstest\myclasstest.cs:line 24

这样,我们能够方便的找到出错的地方,并进行分析和改正。NUnit对单元测试提供了很多的方便,它还提供了很多方便和功能强大的类。具体的用法,大家可以参考NUnit官方网站的在线文档。

VC雕虫小技:模拟MSN闪屏效果

发表于 2006-07-17 | 分类于 我的拙作 | | 阅读次数:
字数统计: 192 字 | 阅读时长 ≈ 1 分钟

MSN的闪屏效果,大家一定见过了吧。如何在其他程序中实现这样的效果呢?偶突然心血来潮,模拟了一下MSN闪屏效果的实现。其实原理很简单,就是播放一段声音,然后开个线程来MoveWindow,只不过MoveWindow要设定好坐标,这样窗口不断移动,看起来像是在振动的效果一样。呵呵。没什么技术含量。我把这个功能封装成了一个DLL,大家直接调用这个DLL,传入目标窗口的Handle,然后调用DLL的函数就可以了。

代码中包含调用的示例代码和闪屏模拟的DLL。 下载下来看看就知道了。 [cool]

点击下载此文件

闷热的夏天

发表于 2006-07-17 | 分类于 随笔 | | 阅读次数:
字数统计: 91 字 | 阅读时长 ≈ 1 分钟

这几天特别难受。闷热的成都,一点风也没有。光是坐着不动,都会不停的流汗。不停的喝冰水,洗脸,仿佛也无法逃离热气的包围。想专心看看文章也没有办法。整个城市,就像一个大蒸笼。真不不知道这样的天气还会持续多久。[eek]

今天把Blog界面更新了

发表于 2006-07-16 | 分类于 站点日志 | | 阅读次数:
字数统计: 116 字 | 阅读时长 ≈ 1 分钟

今天把Blog换了一个版本。以前是L-Blog不过这个blog似乎作者很久没有更新了。看来要淡出历史舞台了。装了一个比较流行的PJBlog,整体看来还不错。而且还提供L-Blog到PJBlog的数据库转换程序,所以省了不少麻烦。呵呵。而且这个版本的blog优点还在于支持插件功能,可以自由组合插件,灵活度很高。[cool]

3月的北国之行

发表于 2006-06-21 | 分类于 随笔 | | 阅读次数:
字数统计: 259 字 | 阅读时长 ≈ 1 分钟

今年3月,在之前的公司做的一个工控机测控程序,需要到现场去调试,于是就有了这次的哈尔滨之行。这也是我第一次去哈尔滨。3月,当成都龙泉的桃花盛开的时候,哈尔滨气温还在零下,俨然一副严冬的模样。刚下飞机的时候,并没有看到雪,只是看地上处处还留有冰块。幸好之前我带了羽绒服,要不然非冻坏不可。调试的工作还算顺利,在将要离开的时候,哈尔滨还下了一场大雪,让人喜出望外,本以为看不到雪了。第二天起来,和同事吃了早饭,就迫不及待出门去拍照了。路上的人看到我们在雪中照相,感觉有点诧异,唉,谁叫我们四川冬天不下雪呢~~

【松花江边上,江面结冰了】

【在铁路机务段的桥上】

【我的作品】

【机车车间外】

【机车车间外2】

调试windows服务的一点经验

发表于 2006-06-16 | 分类于 技术控 | | 阅读次数:
字数统计: 686 字 | 阅读时长 ≈ 2 分钟

最近的项目涉及到windows服务的问题,那么写在windows服务中的代码怎样调试呢?windows服务的调试方法和我们一般的程序方法有些不一样,但是也是在IDE里面调试。MS的IDE也为我们考虑到了这些方面。跟我来看看怎样来调试一个windws服务吧?[cool]

大致分为一下几个步骤:

  1. 建立windows服务程序,不管你是用win32 API,还是ATL,还是.NET,都可以实现的。 2.将代码写好,编译,保证没有错误。 3.现在到了调试的过程了,首先,在IDE中,找到你要调试的地方,加上断点,然后安装好服务。 服务的安装,其实就是设计到注册表的操作。在.NET平台下,我一般习惯用installutil这个程序来安装服务。安装好之后,我们打开控制面板的“Administrator Tools”,找到”Services”选项,双击打开。在服务列表中,我们能找到我们安装的服务。然后运行这个服务。 4.现在到了关键的地方,在服务开始的时候,就会执行你的代码。为了调试的方便,我是在服务的代码开始处让,程序先Sleep20秒,这样的好处看后面你就知道了。 5.切换回我们的IDE,在Debug菜单,里面有个Process(进程)选项。点击打开,在对话框的进程列表中,选择我们的服务相对应的进程,然后点击旁边的Attach(附加)按钮。这样,IDE就开始加载我们要调试的进程了。加载完毕之后,程序会停顿一下。(为什么?因为我们在服务的开始代码处,Sleep了20秒,喝口水等一下吧)。之后,黄色的光标,跳动到你的断点处,现在就可以像以往一样,来调试这个windows服务了。 之所以在程序开始的地方Sleep20秒,是为我们在IDE附加这个Service进程的时候,留下一段缓冲的时间,不然当你的服务开始运行的时候,你的断点处的代码早就被执行过了,你断点自然不起作用了。明白了吧?呵呵。

还有一些调试windows服务小的窍门,就是写日志文件。这也是调试windows service的一个比较好的方法,虽然比较笨,但是通过阅读你自己留下的日志,也能起到不小的作用的。所以在编写程序的时候,要在关键的地方,记录日志,也是为以后程序的维护提供方便。 好了,一点小小的经验,写下来,希望对大家有帮助 。[cool]

1…363738…48
Timothy

Timothy

Timothy的技术博客,记录技术以及生活点滴

565 日志
8 分类
1187 标签
RSS
github twitter
Links
  • ZWWoOoOo
  • 花開未央
  • 守望轩
  • 大漠说程序
  • ChengBo
  • BlueAndHack
  • 程序员小辉
  • 子痕的博客
  • WoodenRobot
  • VPS大佬
  • 毕扬博客
  • VPSDad
  • 猫爪导航
  • ss1271的奋斗
  • Kian.Li
  • YoungForest
  • Fred's Blog
  • Jacklandrin
© 2025 Timothy
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4