Visual Studio 2010 Beta1 is available for download

609 views 五月 26, 09 by Timothy

You can download it by two ways below:

ISO:http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=3296bb4f-d8ba-4cfd-aa95-a424c5913f6b

WebInstaller:http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=75cbcbcd-b0e8-40ea-adae-85714e8984e3

The new feature of VS2010:

Enhanced user experience, Parallel programming,support for Cloud development and support more databases,such as DB2 and oracle.

小黑降温记

184 views 五月 22, 09 by Timothy

夏日临近,天气一天比一天热,无意中用工具看了看CPU温度,竟然也上了70度。要是天气再热一点,估计小黑撑不过这个夏天了。

1

本打算去电脑城打开清理一下,但是又考虑到没那样的闲心跑电脑城,本着DIY的精神,打算自己来给小黑降降温,一个字:拆!。先在网上看相关的拆机教程,又在淘宝上找了一圈,发现一个卖家的东西还不错:电脑工具套装,包括N合一的螺丝刀,润滑油,导热硅脂,电脑清洁套装,一整套东西,60多来块,感觉还算便宜,于是拍下了。下班回家,便开始了拆机的历程。

首先需要拆下背面的螺丝,包括键盘、手托、U型框的固定螺丝,N颗。

P5070147
取下键盘和手托,CPU就藏在下面

P5070152
然后取下U型框,这个不取下来,CPU风扇是取不了的

P5070153

取下固定CPU风扇的螺丝,准备拆下风扇P5070154拿下风扇,CPU露出来了…

P5070156

今天的主角:导热硅脂和润滑脂 淘宝货
P5070157
取下CPU风扇,把风扇打开
P5070159
取下扇叶,把润滑脂弄到那个小电动机的小孔里面

P5070161
给CPU和显卡芯片抹上导热硅脂,装好风扇和键盘,开机裸奔测试效果

P5220163
裸奔一段时间,发现温度在50度一下,比较满意

3

把机器还原,然后再跑一段时间,发现温度在60度左右,不错. 打完收工~~

5

Windows 7 新特性体验

154 views 五月 02, 09 by Timothy

要说本年度最值得期待的事,估计就是等待Windows 7的正式版发布了。或许是经历了Vista的失败,微软在痛定思痛过后,决心以Windows 7的推出挽回更多因为Vista而丢失的用户。而我也不例外,虽然我也用着Vista,其实也迫不及待的等待着Windows 7正式版的发布。自从Windows 7 Beta版推出以来,我就很贪婪的在网上关注着每个Win7 Build版本的出现。终于,微软官方发话了,说Windows 7 正式版将在今年圣诞之前发布。在期待正式版的同时,我也迫不及待的在虚拟机上装上了Beta版。体验之余,发现有很多很好的,激动人心的改进,截图分享下。

1.任务栏改进

1
采用了大图标,看起来更加直观,也更加方便带触摸屏的电脑进行触摸操作,并且这些图标对应的程序都有对应的快捷键,方便用户快捷操作。比如图中的浏览器图标,对应Win+1组合键,Media Player对应Win+3键。你也试试看?对应的数字,和图标的排序有关。(其实这功能Vista里面也有,不知道你发现没有,呵呵)

2

增加了"图钉"功能,你能把常用的程序用图钉"钉"在任务栏上。还可以使用鼠标右键,拖动你常用的文件夹到任务栏上,这样,文件夹会被钉在Explorer的弹出菜单上。

3
任务栏通知区域也有了改进,多个程序提醒图标被放到了一个弹出的List里面,更加节约空间和美观。

 

2.UAC提示的改进

这个用过Vista的人都知道,频繁的UAC提示让人心烦,也让人反感。微软也宣布,Windows 7的UAC提示会比Vista减少三分之一左右。并且,Windows 7也提供了方便关闭UAC提示的功能。整个UAC控制被分成四级,供用户调整。

• 当用户在安装软件或修改Windows系统设置时总是提醒用户(与Vista系统相同)。
• 当用户在安装软件时提醒用户,在修改Windows设置时不提醒用户(当前默认设置)。
• 在用户安装软件时提醒用户,但是关闭UAC安全桌面,即提示用户时桌面其它区域不会失效。
• 从来不提醒用户(不推荐这种方式)
 

4
3. Action Center

你也许会疑惑,好像在Windows 7里面没看到那个著名的“安全中心”的影子。其实Windows 7有了个新的功能:Action Center,而以前的安全中心也被融入到了其中。Action Center中除了包括原先的安全设置,还包含了其它管理任务所需的选项,如Backup, Troubleshooting And Diagnostics以及 Windows Update等功能。

5

4. XP模式

为兼容一些老的程序,XP模式能在Windows 7中模拟XP系统环境,此“XP模式”不会内置于Windows 7,而是用户在购买Windows 7专业版、企业版或最终版后,通过免费下载获得。XP模式,由Virtual PC虚拟环境和完整Windows XP SP3授权共同组成,并将免费提供给Windows 7 Professional、Enterprise和Ultimate版本用户。

其实还有很多令人激动的特性,就不一一列举了,非常期待Windows 7正式版能早日发布。
如果你也下载了Windows 7的Beta版,你可以免费在微软的官方网页上申请试用的CDKEY:  http://www.microsoft.com/windows/windows-7/beta-download.aspx

Unity 学习笔记(3) — 生命周期管理

204 views 四月 28, 09 by Timothy

Unity根据我们在注册类型的时候所指定的生命周期来管理注册类型的创建和解析。当我们在向容器中注册类型的时候,如果我们没有显式的指明该类型的生命周期管理器(下称:Lifetime Manager),默认的情况下,容器会为我们注册的类型创建一个生命周期短暂的管理器。这样一来,当我们每次调用容器的Resolve方法或者ResolveAll方法,或者采用依赖机制注入实例到其他的类中的时候,容器都会为我们创建新的实例,并且容器不会保存对实例的引用。

容器的RegisterType函数包含多个支持泛型的重载,同时还包含了一一对应的非泛型重载。其中的重载函数,我们可以看到类似下面的声明:

   1:  RegisterType<TFrom, TTo>(LifetimeManager lifetime)

参数中的LifetimeManager类型,就是用来控制注册类型生命周期的。Unity中提供了几个继承自LifetimeManager的类作为注册类型的生命周期管理器。在目前的Unity 1.2版本中,共提供了3个LifetimeManager供我们直接在代码中调用。此外,我们也可以实现自己的LifetimeManager,不过必须实现LifetimeManager所必须的一些方法。

1.ContainerControlledLifetimeManager:

容器负责管理注册类型的生命周期,并且注册类型的生命周期和容器一致。当离开容器的作用域范围时,容器会被销毁,同时其中的注册类型也会被销毁。或者,当容器被显式销毁时,其中的注册类型也同样被销毁。但是在容器有效的作用域范围中,当我们使用Resolve方法,或者使用ResolveAll方法获取我们的注册类型的时候,容器会在第一次调用时,创建实例,但是在后面的调用中,我们始终只会得到相同的实例。我们可以利用这种Manager来实现Singleton模式。

2.ExternallyControlledLifetimeManager:

和上一种方式类似,不过容器在不会保留对注册类型的强引用,而只是保留弱引用。也就是说,如果这个注册类型没有在其他地方被强引用的时候,那么这个注册类型可能会被GC给干掉。

3.PerThreadLifetimeManager:

容器保证在每个线程中返回同一个对象实例,那么在不同的线程中,得到的实例是不同的。

下面我们可以试验一下不同的LifetimeManager的效果

a. 默认的情况,不显示的指明LifetimeManager

代码:

   1:  namespace UnityDemo
   2:  {
   3:      class Program
   4:      {
   5:          static void Main(string[] args)
   6:          {
   7:              IUnityContainer container = new UnityContainer();
   8:              container.RegisterType<INotify, EmailNotify>();
   9:  
  10:              INotify notify1 = container.Resolve<INotify>();
  11:  
  12:              INotify notify2 = container.Resolve<INotify>();
  13:  
  14:              Console.WriteLine("notify1:" + notify1.GetHashCode());
  15:              Console.WriteLine("notify2:" + notify2.GetHashCode());
  16:  
  17:              Console.ReadLine();
  18:          }
  19:      }
  20:  }

运行结果:

4

从结果我们可以看到,默认情况下不指定LifetimeManager的时候,每次我们获得的Instance其实不是同一个Instance.

b.使用ContainerControlledLifetimeManager

代码:

   1:  namespace UnityDemo
   2:  {
   3:      class Program
   4:      {
   5:          static void Main(string[] args)
   6:          {
   7:              IUnityContainer container = new UnityContainer();
   8:              container.RegisterType<INotify, EmailNotify>(new ContainerControlledLifetimeManager());
   9:  
  10:              INotify notify1 = container.Resolve<INotify>();
  11:  
  12:              INotify notify2 = container.Resolve<INotify>();
  13:  
  14:              Console.WriteLine("notify1:" + notify1.GetHashCode());
  15:              Console.WriteLine("notify2:" + notify2.GetHashCode());
  16:  
  17:              Console.ReadLine();
  18:          }
  19:      }
  20:  }

运行结果:

5
使用ContainerControlledLifetimeManager,在Container生命中期内,我们得到的Instance是同一个。

c.使用PerThreadLifetimeManager

代码:

   1:  namespace UnityDemo
   2:  {
   3:      class Program
   4:      {
   5:          static void Main(string[] args)
   6:          {
   7:              IUnityContainer container = new UnityContainer();
   8:              container.RegisterType<INotify, EmailNotify>(new PerThreadLifetimeManager());
   9:  
  10:              Thread thread1 = new Thread(new ParameterizedThreadStart(ThreadProc1));
  11:              Thread thread2 = new Thread(new ParameterizedThreadStart(ThreadProc2));
  12:  
  13:              thread1.Start(container);
  14:              thread2.Start(container);
  15:  
  16:              Console.ReadLine();
  17:          }
  18:  
  19:          static void ThreadProc1(object obj)
  20:          {
  21:              INotify notify1 = (obj as IUnityContainer).Resolve<INotify>();
  22:              INotify notify2 = (obj as IUnityContainer).Resolve<INotify>();
  23:  
  24:              Console.WriteLine("ThreadProc1 --- notify1:" + notify1.GetHashCode());
  25:              Console.WriteLine("ThreadProc1 --- notify2:" + notify2.GetHashCode());
  26:  
  27:          }
  28:  
  29:          static void ThreadProc2(object obj)
  30:          {
  31:              INotify notify1 = (obj as IUnityContainer).Resolve<INotify>();
  32:              INotify notify2 = (obj as IUnityContainer).Resolve<INotify>();
  33:  
  34:              Console.WriteLine("ThreadProc2 --- notify1:" + notify1.GetHashCode());
  35:              Console.WriteLine("ThreadProc2 --- notify2:" + notify2.GetHashCode());
  36:          }
  37:      }
  38:  }
运行结果:
6
 在结果中可以看到,同一个线程中连续两次获取到的是同一个Instance,而不同的线程中获取到的Instance不一样。

换了新鼠标

176 views 四月 26, 09 by Timothy

最近我的鼠标开始罢工了,我的鼠标是罗技的V470-蓝牙激光鼠,同事推荐的,手感挺不错。不过用了一年多左右,左键开始失灵,经常左键单击变成了双击,怪不好使。周末在网上查了查罗技的售后,打电话去咨询了一下,说鼠标需要送修,地点就在磨子桥新世纪电脑城对面的楼上。到了售后那里,售后的大叔说鼠标需要留下维修,然后转身直接给我拿了个新的,当时我晕了,原来还可以这样……以前用的是蓝色的,现在没蓝色的了,只好要了个黑色的。感觉还是蓝色的比较好看,不过黑色的和小黑还是挺般配的。总的感觉,罗技的产品和售后都挺不错,表扬一下!

P4250139