iTimothy

君看一叶舟,出没风波里

0%

最近突然发现自己Win7 gadget中的天气插件罢工了,老是显示Service not available,冥思苦想不得其解,在网上Google了一把,才找到原因,原来在将系统的Region and Language设置为非美国地区或者非英语格式后(比如设置为China),系统中的wlsrvc.dll会在运行时检查你的地区设置,如果检查到设置为India或者China,DLL会返回1506,表示天气服务在你的语言区域不可用。晕死…… 回忆了一下前些日子,为了使用一个软件,不得已改了语言设置,索性把Location改回为United Status, Format改回为English,一切又正常了,天气服务立马可用。嗯,反正我的Windows 7也是英文版的,改回来还是比较方便的方法,网上还有一种比较暴力的方法,就是替换掉那个wlsrvc.dll,有兴趣的同学可以参考下列步骤:

  1. Close and exit Windows Sidebar.

  2. Open Windows Explorer.

  3. Browse to C:\Program Files\Windows Sidebar folder.

  4. Take ownership and grant full permission to you on wlsrvc.dll file.

  5. Rename wlsrvc.dll to wlsrvc.dll.old.

  6. Download the patched wlsrvc.dll (contains inside the wlsrvc.zip).

  7. Copy the patched wlsrvc.dll into the Windows Sidebar folder.

  8. Run the sidebar.exe to restart Windows Sidebar.

扩展方法,是.NET 3.5中引入的新特性,在《扩展方法使用小结中》,我有具体的介绍。合理的使用扩展方法,能节约不少的代码量,甚至能在开发中给我们带来意想不到的效果,让代码更加的简洁、易懂。其实,网上早就有了不少的大牛写的各种出色的扩展方法,以至于我有了整理一个扩展方法库的想法,把一些实用、优秀的扩展方法收集起来,一来为资源共享,二来也是为了应用在以后的项目代码中,提高开发效率。

阅读全文 »

最近在外面调试程序,内网是调试程序必须的,而要上外网,又只有通过无线连接。不过发现这样有个问题,就是在笔记本的无线连上外网的时候,只要插上内网的网线,就发现qq一类的一律掉线,外网连接就不行了,网页也打不开。这样搞的比较麻烦,每次测试完程序,要手动拔掉网线,外网才能上。感觉这样的做法太麻烦了,能否内网和外网同时接入到笔记本,不用每次拔网线呢?于是在网上找了找资料,果然还找到了。其实是因为Windows默认路由设置的问题。Windows每次会默认把对所有IP的访问,指向以太网或者无线网的网关,当同时接入两个、或者多个连接时,这样的默认路由会有问题,需要我们手动修改一下。

需要通过route命令来设置,下面就是个例子,进入CMD(以管理员身份启动):

例如,要想同时使用有线网上内网、无线网上外网,可以这样设置

route delete 0.0.0.0 (删除对所有IP的默认路由设置)

route add 0.0.0.0 mask 0.0.0.0 192.168.1.1 (将对所有IP的路由,指向外网网关IP,外网网关IP假设为192.168.1.1)

route add 10.13.4.0 mask 255.255.255.0 10.122.2.1 (对内网某个网段的访问,指向内网网关地址,内网网关IP假设为10.122.2.1)

其中192.168.1.1为无线网网关,10.122.2.1为有线网网关。这两句话的意思是:对于所有IP地址的访问,都从192.168.1.1走;但是,对于10.13.4开头的地址的访问,从10.122.2.1走。如果希望通过有线上外网,无线上内网的话,以此类推……

这样,再也不用插拔网线这种粗鲁的方式来切换网络了…… Very very happp!

PS:  每个网络接口的IP地址、网关地址,可以通过ipconfig命令获取

前天逛cnBeta,发现MS发布了新的WM6.5的rom,版本23502,号称在速度方面和界面方面有了一定的改进。于是就在网上搜索看国内有没有发布此ROM,结果果不其然,已经有人放在网上了。呵呵,还等什么,刷就一个字……

总体来说:和以前版本的Windows Mobile相比,开始菜单按钮移到了屏幕下面,样子有点防Windows Vista的味道,对话框的关闭按钮,也是在下方,而且增大了不少,这样更方便用手指按屏幕,而可以减少用笔触的次数。其实感觉手写笔本来就是个鸡肋,用处不大,而仅仅用手指操作也许是未来的趋势。速度方面,还没感觉比上个刷的版本有明显差异……

上图:

VidyaScreen001 VidyaScreen003 VidyaScreen004

最后,放上此ROM下载地址:

http://hi.baidu.com/vacuity2009/blog/item/a364fac9d4978815bf09e6e9.html

自从上次把域名转移到godaddy,就有了把空间也搬家的打算,说干就干,在wpchina.org找到提供wordpress空间服务的国外php主机空间,测试了下速度,还不错,而且价格也不贵,至少比现在的空间便宜一半,于是就下定决心买下了。至于搬家的理由,其实有两点:

1.虽然PJBlog在asp的博客里面,是首选,但是WordPress是一个绝对值得一玩的BLOG,在全世界都有着众多的插件和Fans。

2.空间搬到国外,再也不用bei案了,而且也不怕blog因为某某原因而突然不能访问了。

接着就是一大堆的体力活,将以前的PJBlog的文章导出,再导入到WordPress,由于之前的链接和目录的问题,许多文章的链接都需要更新,而且比较郁闷的是,Linux系统下文件名是要区分大小写的,这也花了不少功夫去更新以前数篇日志的下载链接。忙乎过后,发现皮肤也不太满意,一直比较喜欢自己博客园那个皮肤,在网上搜了搜,名字叫“minyx 2.0 LITE”而且皮肤正好是wordpress下的,很是幸运。换了皮肤,发现宽度也不太满意,于是又把CSS文件一阵狂改,接着改页面内容,加插件。后续的工作还有很多,包括插件的添加,页面的美化,相册的建立,旧日志标签的补充,等等……虽然搞得晕头转向,不过心里着实很高兴。这篇日志也算是WordPress下面的开篇日志吧,小小庆祝一下……

PS:以前的PJBlog作为本Blog的镜像站点,而可以通过http://pj.xiaozhou.net访问。

终于收到了GoDaddy的确认邮件,域名转移成功了,恭喜一下自己~

domain

早就有了转移域名的想法,在同事的推荐下,选择了把域名转到GoDaddy去,这样域名解析速度非常快,几乎是实时的,而且域名解析不受任何限制,价格换算成RMB,比国内还便宜,更重要的是,老外会把域名当成是你的虚拟财产,而国内则不然……整个转移的过程几经周折,不过最后算是有了个圆满的结果……推荐下xjb同学的一篇文章《如何转移域名到GoDaddy.com》,非常有指导价值。下一步的打算是把网站空间也搬到国外去,嘿嘿!

Win7的XP模式一直是Beta版,没想到过了国庆,发布了RTM版本,MSDN订阅上已经可以下载到了。于是迫不及待的从MSDN上拖了一个下来,Win7的XP Mode里面自带一个Professional的正版XP,安装需要给Win7打上一个系统更新的补丁,再一个就是XP的虚拟磁盘文件。两样都安装好过后,还要确认你的CPU是否支持虚拟化技术,并且默认的BIOS里面,CPU的虚拟化设置为Disabled,需要设为Enabled才可以。一切准备就绪,就可以开始运行XP Mode了。

第一次运行XP Mode,系统会为你进行初始化设置:

xpmode1

和其他的虚拟机软件一样,你可以为其指定分配内存大小,虚拟机启动后,界面和其他虚拟机界面相似:

xpmode2

比较方便的是,可以在Win7中运行安装在XP Mode中的软件,并且窗口是直接展现在Win7当中的,这种方式为软件的兼容性提供了更好的平台

xpmode3 IE6与IE8共存在Win7桌面,一片和谐的景象~~

xpmode4

微软推出的MyPhone是个非常不错的东东,自从MyPhone的beta版本以来,我都一直用它来向网络同步和备份我的手机联系人信息。如今微软推出了新版本的客户端,版本升级至01.05.2128.0401.其中添加了一些新的特性:

查找丢失的手机
“我的手机空间”服务可以在地图上显示上次所知的手机位置(基于上次使用“我的手机空间”同步或共享照片的位置)。此服务需由用户激活。

锁定丢失的手机
如果手机丢失或被盗,“我的手机空间”可以通过远程锁定您的手机或清除其内容,帮助保护您的信息。此功能仅面向部分市场提供,并可能产生一定的费用。

**在主流社交网站上共享照片
**现在您可以通过“我的手机空间”Web 帐户或手机轻松便捷地将照片发布到 Facebook、Flickr、MySpace 和 Windows Live。

节省手机空间
当您从手机中删除内容后,仍然可以通过您的 Web 帐户访问这些内容(直到从存档文件夹中删除)。

得知此版本的更新,我也迫不及待的把我手机上的版本进行了升级,总的说来,比先前的版本更好用了,其实我用得最多的,还是同步联系人信息的功能。推荐有Windows Mobile手机的同学都来体验一下,手机下载地址:**http://myphone.microsoft.com/install**

随着.Net Framework一路走来,已经让广大开发人员体验到快速开发的甜头,这得益于.Net Framework为我们提供了更高层次的封装,开发人员不必关心底层的Win32 API及其繁琐的调用参数,而可以把大部分的经历放在对业务的分析和实现。随着.Net的不断革新,也引入了更多的特性,例如C# 2.0,就增加了匿名方法和迭代器,这些特性让我们的编码效率更高。随着C# 3.0的推出,引入了更多的新特性,包括:隐式类型局部变量、对象初始化器、Lambda表达式、扩展方法、匿名类型。

而这些特性,都为LINQ的推出,构建好了基础。其中一个比较不错的特性,就是扩展方法。扩展方法,顾名思义,就是在类型定义完成之后,再继续为其添加新的方法。这是相当方便的,比如对于一个已经封装好的Assembly来说,我们不用改动Assembly的代码,而通过扩展方法就能实现对其功能的扩展,而且在调用的时候,仅仅通过代码,你几乎判断不出这是扩展方法,还是Assembly本身的方法。

扩展方法在.Net 3.5中的应用也是非常普遍的,如果你仔细观察,就会发现我们常用的Linq to Object中的Where,Select,Average,Sum等方法,以及Linq to SQL中的Where,Select,Average,Sum等方法,其实都是扩展方法,他们分别定义于System.Linq.Enumerable类和System.Linq.Queryable类之中。

就扩展方法本身而言,也存在一些限制之处。对于编译器来说,如果扩展方法和被扩展类型的方法发生冲突的时候,在调用此方法的时候,究竟是调用被扩展类型的方法,还是扩展方法呢?通过一个例子,我们就能发现其中的区别。

<span class="lnum">   1:  </span>  <span class="kwrd">class</span> Program




<span class="lnum">   2:  </span>    {




<span class="lnum">   3:  </span>        <span class="kwrd">static</span> <span class="kwrd">void</span> Main(<span class="kwrd">string</span>[] args)




<span class="lnum">   4:  </span>        {




<span class="lnum">   5:  </span>            <span class="kwrd">new</span> TestClassA().Display(<span class="str">"Test"</span>);




<span class="lnum">   6:  </span>            <span class="kwrd">new</span> TestClassB().Display(<span class="str">"Test"</span>);




<span class="lnum">   7:  </span>            Console.ReadLine();




<span class="lnum">   8:  </span>        }




<span class="lnum">   9:  </span>    }




<span class="lnum">  10:  </span>




<span class="lnum">  11:  </span>    <span class="kwrd">class</span> TestClassA




<span class="lnum">  12:  </span>    {




<span class="lnum">  13:  </span>        <span class="kwrd">public</span> <span class="kwrd">void</span> Display(<span class="kwrd">int</span> b)




<span class="lnum">  14:  </span>        {




<span class="lnum">  15:  </span>            Console.WriteLine(<span class="str">"This is TestClassA.Display() ..."</span>);




<span class="lnum">  16:  </span>        }




<span class="lnum">  17:  </span>    }




<span class="lnum">  18:  </span>




<span class="lnum">  19:  </span>    <span class="kwrd">class</span> TestClassB




<span class="lnum">  20:  </span>    {




<span class="lnum">  21:  </span>        <span class="kwrd">public</span> <span class="kwrd">void</span> Display(<span class="kwrd">string</span> s)




<span class="lnum">  22:  </span>        {




<span class="lnum">  23:  </span>            Console.WriteLine(<span class="str">"This is TestClassB.Display() ..."</span>);




<span class="lnum">  24:  </span>        }




<span class="lnum">  25:  </span>    }




<span class="lnum">  26:  </span>




<span class="lnum">  27:  </span>    <span class="kwrd">static</span> <span class="kwrd">class</span> TestClassExtention




<span class="lnum">  28:  </span>    {




<span class="lnum">  29:  </span>        <span class="kwrd">static</span> <span class="kwrd">public</span> <span class="kwrd">void</span> Display(<span class="kwrd">this</span> <span class="kwrd">object</span> o, <span class="kwrd">string</span> s)




<span class="lnum">  30:  </span>        {




<span class="lnum">  31:  </span>            Console.WriteLine(<span class="str">"This is TestClassExtention.Display() ..."</span>);




<span class="lnum">  32:  </span>        }




<span class="lnum">  33:  </span>    }

程序输出:

ExtentionMethod

可以看出,TestClassA的方法和扩展方法并没有冲突,因为他们的方法签名是不一样的,而TestClassB的方法和扩展方法有冲突,因为他们的都是接受一个string类型的输入参数。从结果可以看到,程序对Display的方法调用,TestClassB本身的Display方法,要“优先”于扩展方法Display被调用。因此,类本身的方法如果满足调用条件,那么这个方法会被优先执行,只有在类当中无法找到同样参数的方法时,扩展方法才有机会被执行。所以,我们可以得出这样的结论:扩展方法的优先级较低,也即扩展方法不会覆盖同名的类本身的方法。

另外,还有一个比较明显的区别,就是扩展方法要远远弱于类本身的方法,比如,在一个类中,类的方法可以访问自己的非公有成员,而扩展方法做不到这一点。

这两天改了一下BLOG的CSS,主要调整了一下文章的标题文字的样式和文章内容文字的大小,在此推荐浏览本BLOG的同学安装微软雅黑字体。另外,在修改数据库的时候,忘了备份,导致最近一篇文章的评论丢失,囧……下次一定吸取教训。

xiaozhou

VC源动力是一个Visual C++ 开发相关的网站,从2004年09月开始建立,站点的主要宗旨是向广大VC开发爱好者提供免费的文章、代码、交流平台,至今已经有5年的时间了。但是由于我的精力有限,站点长时间荒废没有更新,很是惭愧。再加上如今自己的工作方向不再是VC开发,而是转向.net了开发,所以我决定将VC源动力站点关闭。原来的www.xiaozhou.net由我的个人博客所代替,原有博客的地址https://xiaozhou.net/cooldog也会自动跳转到https://xiaozhou.net

在此感谢各位网友曾经对该站的支持和帮助,如果这个站点所提供的信息曾经帮助过你解决过VC开发上所遇到的问题,又或者在开发过程中带给你灵感,那将是我的荣幸。等我有时间,我会把所有的站点资料整理成文件供网友下载。希望大家会记得这个名字:VC源动力。

翻了翻BLOG的第一篇日志,是2004年9月7日,记得当时还上大四,由于一时兴起,申请了域名,购买了空间,在网上安了个小家。不知不觉,5年过去了,无奈于国内空间服务商的质量,大叔我中途四处寻觅,换了N个空间服务商,BLOG也到处搬家,真所谓颠沛流离啊。最近也打算把域名迁到国外去,原因不用多说了,中途遇到的挫折更不用说了,待域名迁移成功,写个总结给有相同打算的童鞋看看。5年了,借此文章悄悄纪念下自己的blog。