少年听雨歌楼上,红烛昏罗帐.壮年听雨客舟中,江阔云低断雁叫西风. 而今听雨僧庐下,鬓已星星也! 悲欢离合总无情,一任阶前点滴到天明。
2007年4月15日星期日
2007年4月3日星期二
关于莉莉周的一切和德彪西
应该说我不能算太喜欢这部电影,但仍然感受到了青春的气息。其实,里面有很多事情看似也像自己的昨天。
我不想说影片太多,看了才知道,有没有共鸣完全取决于你自己的青春岁月。
引起我联想很多的倒是里面德彪西的钢琴曲。《阿拉伯风格》是两首,我都会弹。在曾经非常喜欢德彪西的时候,这两首小曲子是我每天都要弹的。很多年没有听,也很多年没有碰这两首了,再次听到突然觉得全身都像呼吸了新鲜空气一般。
影片中的演奏其实相当一般。如果你听过法国大师季雪金的演奏,那你才能知道什么是真正的德彪西。那种幻境,那种似水的风格。德彪西一定要像水,灵动,轻巧。演奏德彪西的技巧是和肖邦、贝多芬等人完全不一样的。细节非常多,必须要一点一点一丝不苟。
很想最近再弹弹这两首《阿拉伯风格》。
Google拼音
就目前而言,这款输入法让我感觉还不错。至少我的名字能够很轻松打出来,并且能够记住,这是不容易的。最新的微软输入法虽然能够输入我的名字,但是不能记忆,显得并不是很智能。
当然,这只是一个实验阶段的产品,仍然需要更进一步的试用才能发现问题。但是Google已经逐渐扩展自己的产品线,开始往传统的桌面发展,并且和自己的优势结合起来。这款Google拼音就能够使用Google账户同步词库信息,这是一个很酷的功能。
另外,我又重新使用了Google Desktop的本地搜索功能。虽然默认状况下不能更改索引的地址,但是网上有文章指导如何使用注册表来修改索引的地址。
我更改了索引的地址,又指定了一些目录排除在索引外。目前,我的索引有500多兆。但是查找文件信息十分方便。这还是我很中意的。
Google的脚步越来越快,不知道微软如何面对。:)
重新搭建工作环境
这次安系统倒没有遇到太多的困难。Linux也成功安装上了。唯一碰到的小麻烦事情就是Linux的分区。我在Windows下使用PQ Magic把最后一个磁盘的大约30G化为了自由空间。按照某篇网上的介绍的方法,我又把这个自由空间完全从Windows的扩展分区中给划了出去。
结果,Linux的安装过程中就没法分区。后来发现,不应该把那块空间从Windows的扩展分区中给拿出去,于是又重新把空间调整了。这下Linux分区成功了。
Linux安装费了大约一个小时,启动速度很慢。进去逛了一圈,不会用,还需要好好学习。
今天还差点把资料给弄丢了,幸好只是简单格式化了,用Easy Recovery就很容易恢复了。天啊,要不然我要重新写那么多代码,疯了!
2007年4月1日星期日
高级“单件”(Advanced Singleton Pattern)
高级“单件”(Advanced Singleton Pattern)
单件模式应该是设计模式中应用非常广泛的一种模式。单件模式可以确保某些类仅拥有一个实例化的对象。在实际的应用程序中,诸如打印机,内核,窗体控制类都常常应用为单件模式。然而,我们又常常遇到这样的问题,一个应用程序中有很多类都是单件类,该如何管理这些单件类呢?
单件的实现方法不尽相同,在一个应用程序中,我们可能很难知道哪些类是单件模式,哪些类不是。如果能够给所有的单件类提供一个统一的入口,能够十分快捷地得到一个单件类的实例,对于一个大型的应用程序来说,无疑是十分必要的。
这里我们实现了一个单件管理类,用于管理整个程序的所有单件。部分内容参考了《设计模式》一书。
我们的设计目标有两个:
1.每个单件类都不能够显示地实例化。
2.每个单件类都仅能够通过单件管理类来访问,换句话说,直接访问单件类的实例也是不行的。
这样做的目的就是想整个程序仅有一个单件的入口。下面展示的就是事例代码,由C# 2.0写成,用到了.NET的泛型。
public interface ISingleton
{
}
public class SingletonManager
{
Dictionary
public static readonly SingletonManager
private SingletonManager ( )
{
_singletons = new Dictionary
}
public bool CheckInstance ( string name )
{
return _singletons.ContainsKey(name);
}
public void Add ( string name, ISingleton single )
{
if (_singletons.ContainsKey(name) == false)
_singletons.Add(name, single);
}
public T GetInstance ( string name )
{
if (_singletons.ContainsKey(name) == true)
return (T)_singletons[name];
return default(T);
}
}
这就是单件管理类的代码和单件的接口。值得注意的是,单件的接口是一个空的接口。下面我们看看一个单件类是如何实现的:
public class ABC:ISingleton
{
private static ABC _instance;
pviate ABC() { }
public static void Register()
{
if (_instance == null)
_instance = new ABC();
SingletonManager
}
public void Print()
{
Console.WriteLine("Hello");
}
}
我们注意到ABC类实现了ISingleton接口。其实,ISingleton接口仅仅是想让单件类有一个统一的原型。同样可以使用一个abstract 类。我们注意到,ABC不能直接实例化,也不能通过直接访问ABC来得到ABC的实例。唯一可以直接访问ABC的是一个静态方法,即向单件管理类中注册当前ABC的实例。而ABC的实例化就是在注册的时候完成的。
要想得到ABC的实例必须通过访问单件管理类:
ABC a = SingletonManager
注意,我们这里使用泛型完全是为了客户端代码的类型安全而考虑的。SingletonManager中存放的是ISingleton的集合,但实际上我们想得到ABC的实例。于是通过泛型通知SingletonManager我们想得到的类型,从而免去了类型的强制转换。
这样我们可以很容易知道一个类究竟是不是单件类,也很容易去控制单件类的行为。
2007年3月28日星期三
这段时间喜欢上了Google的软件。
这段时间喜欢上了Google的软件。应该说,我之前使用过Google的一些软件,给我的感觉各不相同。比如Google Earth的确非常不错,但是Google Desktop就不那么好。最近使用了最新的Google Desktop,体会到了很大的进步,同时我还使用了Google Talk和Picasa,觉得很不错。下面就说说我具体的感受。
- Google Desktop
这个软件应该是Google 的一个核心软件。其设计理念很明显,就是要把传统的桌面程序和网络给同一起来。也就是把Google的服务从互联网上转移到桌面上来。Desktop的核心就是搜索。搜索的效能应该说毋容置疑,但就是有一些看似很简单的地方让人很反感。比方说,在没有任何提示的情况下就安装到了系统盘(也就是C盘中),这十分讨厌,因为很多用户希望应用程序安装到其他的驱动盘上。而且,搜索的索引也放在了C盘中。索引会根据使用的时间增长而变得很大,同时反复长期对索引文件的读写使用,也会给C盘带来大量的磁盘碎片。事实上,正是因为这个看似不起眼的功能,我彻底关闭了Google Desktop的索引功能,放弃了本地搜索。类似的MSN Search却可以选择索引的文件夹。
Google Desktop另一个我不是特别接受的地方就是,设置和查找都要放在浏览器中。也许Google的想法是要让用户感觉到和在网上搜索一样的体验。但是,我自己还是觉得完全可以做成一般的应用程序,因为打开浏览器浏览总会出现一些问题,比如禁止了JavaScript就可能出现一些错误。
说说好的方面,那就是Gadget引起了我极大的兴趣。实际上,Gadget如果有足够多的插件的话,完全可以成为个人的信息中心。我现在添加了一个常用的组件,可以很方便的查看当天的天气,新闻和我感兴趣的博客信息,同时还有记事和任务的记载,十分方便。而且还有一些漂亮的小功能,比如时钟,能够给桌面一种清新的感觉。似乎Vista中也有类似的功能。我下载了Gadget SDK,发现Gadget开发依靠的是JavaScript和CSS,其实也就是和一般的网页开发所需要的技能。这一点,Google和Mozilla似乎不谋而合。然而,适用JavaScript也有一个问题,就是Google Desktop的内存占用常常很高,特别是对一些高质量的图形进行操作。 - Google Talk
我是看了“云风”的介绍后下载使用的。我的感受非常好,简单,实用,没有任何多余的功能。实际上,现在很多即时通讯工具都走入了歧途,比如QQ,功能太多,太杂,而且占用资源非常大。Google Talk的只有聊天,音频聊天,传文件几个基本功能,但是足够适用。同时,和Gmail完美集成,还可以把聊天记录保存在Gmail信箱中,十分方便。而且,Google Desktop也把Google Talk做成一个Gadget,因此就更容易检查信件。
目前的缺点就是,好友不多。 - Picasa
应该说这款软件也是非常实用。把网络相册和本地相册结合起来。同时对本地的图像的管理也十分到位,基础的功能都有,而且体现出了Google管理信息的长处,本地的图像不管存放在哪里都能够很好的索引起来。而上传照片则更是一个很不错的功能,不仅照片质量没有太大的影响,更是能够达到数量不小的照片能够在很短的时间内上传成功。
网络相册的免费用户有1G的空间。理论上来说,应该是够了。
Google的软件都有一些共同的特点,那就是简单,实用,同时界面美观。然而和网络集成过密也成为了Google软件一个问题。比如,在没有互联网的情况下,上述软件的很多功能都要丧失甚至无法适用。同时,在线的Docs & Sheets功能也远没有达到Word和Excel的程度,仅仅做简单的查看还可以。
Google的软件梦,还需要更多的努力。
2007年3月23日星期五
Computer Science和Computer Technology的区别
Computer Science和Computer Technology的联系我就不想说了。两者肯定有很密切的联系。我主要想说说两者的区别。为什么要谈区别呢,原因就在于,对待两者的态度可以决定了一个人究竟在计算机行业中处于什么位置。
举一个例子,如果一个人在谈论编程语言,那么下面的情况就可以断定这个人在谈论Computer Technology层面的东西。比如,这个人谈论Java的Spring框架,谈论GUI设计库的好坏,谈论C#如何实现编辑软件。总之,就是谈论语言如何去做软件。
而Computer Science谈论到编程语言,就要谈论,这种语言是什么类型的语言。编译器如何实现。如何扩展这种语言。语言中的某个特性如何影响语言的整体效用。很多时候,这种讨论完全不用具体到一个实际存在的语言上。
还有例子。比如谈论对库的应用,Computer Technology谈论的是如何高效使用库,库与库之间的优劣。而Computer Science谈论的绝对是库如何设计,其中的哪些算法可以改进到线性级别。
再比如,Computer Technology知道有链表,知道有排序,但是只要知道他们在标准库里在什么位置,如何使用就行了。但是Computer Science却要理解,链表是如何实现的,插入算法是什么,排序有哪些,时间复杂度是什么。
还可以举例子。谈论到操作系统,Computer Technology喜欢比较不同操作系统的优劣。喜欢谈论哪个操作系统的界面更加华丽。而Computer Science则注重系统是如何实现的。系统的内存管理算法是否改进,系统是否支持多核,如何支持,调度算法是什么。
总而言之,Computer Science注重的是理念和算法,不太在意具体的工具或者环境。实际上,著名的《The art of programming》就完全和平台无关,甚至里面的代码都建立在一个完全虚构的计算机和开发语言上。而Computer Technology则注重自身的环境,什么系统,什么中间件,什么语言,并因此来划分各自所属的阵营。
当然,上面说的都是一些感性的认识。实际上,Computer Science和Computer Technology是互相渗透的。
