iTimothy

君看一叶舟,出没风波里


  • 首页

  • 分类

  • 归档

  • 项目

  • 关于

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]

且行且珍惜

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

且行且珍惜 词 陈道明·厉曼婷曲 伍思凯

迎著风向前行 我们已经一起走到这里 偶而想起过去 点点滴滴如春风化做雨 润湿眼底 憎相会爱别离 人生怎可能尽如人意 缘字终难猜透 才进心里却已然离去 没有谁能忘记这真挚情谊 你会祝福我我也会祝福你 且把泪水轻轻拭去期待再相遇 就算相见无期在某个夜里 你会想起我我也会想起你 默契永存你我心底情缘系千里 且行且珍借 偶而想起过去 点点滴滴如春风化做雨 润湿眼底 憎相会爱别离 人生怎可能尽如人意 缘字终难猜透 才进心里却已然离去 没有谁能忘记这真挚情谊 你会祝福我我也会祝福你 且把泪水轻轻拭去期待再相遇 就算相见无期在某个夜里 你会想起我我也会想起你 默契永存你我心底情缘系千里 且行且珍借 没有谁能忘记这真挚情谊 你会祝福我我也会祝福你 且把泪水轻轻拭去期待再相遇 就算相见无期在某个夜里 你会想起我我也会想起你 默契永存你我心底情缘系千里 窗外景物飞逝 机缘轻触匆匆来匆匆去 且行且珍惜

今天听到张信哲的一首《且行且珍惜》勾起了对以前时光的回忆。想起了自己的初中、高中、大学的同学。一切虽然已经过去,但仿佛都是昨天的事,还是那么清晰。想起了以前的我,想起了我的学生时代。毕业后,大家都各奔东西,为学业、为事业。很多同学,自从毕业后,再也没有见过。不能不承认,能成为同学,也真的是一种缘分。现在工作了,却没有以前那样的无忧无虑。人在不断地成长,也在不断的失去什么…… 特意写上几笔,纪念我的学生时代,纪念我的同学……

1…363738…47
Timothy

Timothy

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

564 日志
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