May 2007
Monthly Archive
Monthly Archive
在最近的一篇blog中,使用了colgroup HTML标签。没想到,使用了colgroup的帖子经过XHTML Validator的检查,发现居然不符合XHTML规范。究其原因,说是发现了如下错误:
Error Line 78 column 139: document type does not allow element "br" here.
...ALIGN: center"></col></colgroup><br />
但是奇怪的是,我的源代码中,</colgroup>后并没有<br />。我们可以用W3Shool给出的最简单的例子进行实验:
试着在Wordpress (2.0.x,包括最新的2.0.10。在2.2上则没有这个bug) 中编辑一个新帖子,在代码画面敲入上面这段代码,发布,再去看生成的HTML时就会发现变成了这个样子:
由于</colgroup>和<tr>之间是不允许有<br/>的,所以导致XHTML验证错误。
那么追根到底是在什么时候这个<br/>被添加到输出的HTML中的呢?调查了一下数据库,发现在数据库里面的内容还是没有<br/>的,这说明它是在读取post的内容时,由相关的Filter添加的。一个post的内容在被从数据库读出来,到被显示在网页上之间使用的是叫做the_content的Filter Tag。在Wordpress中,默认有如下Filter被添加到the_content的处理中:
add_filter('the_content', 'wptexturize');
add_filter(’the_content’, 'convert_smilies’);
add_filter(’the_content’, 'convert_chars’);
add_filter(’the_content’, 'wpautop’);
经过检查,发现位于/wp-includes/functions-formatting.php中的wpautop函数中有如下代码:
可见,该函数中用preg_replace函数通过正则表达式删除掉了添加在table,thead,tfoot等后面的<br />,却没有删除colgroup后面的<br/>。因此,只要在这一行添加colgroup即可修正这个bug。将修改后的functions-formatting.php重新上传到服务器后,在此进行XHTML验证,正常通过。
在为期四天的VMware培训结束之后,最后除了提交一份调查问券之外,还有一份Review Question。根据老师的说法,这个可以看作是VCP考试的例题。回家在网上google了一下,发现这些例题和答案是公开在互联网上的,既然这样就不用担心是内部用的东西了。这里就把我做的解释也一起拿出来供有意报考VCP的同学参考(当然,可能“参考”一下网上流传的VCP真题更快捷一些……)。
Which of the following most closely describes the purpose of ACE (the Assured Computing Environment)?
A. ACE helps desktop managers provision secure, standardized PC environments throughout the enterprise.
B. ACE enhances system security for ESX Server by providing firewall protection for both virtual machines and the Service Console.
C. ACE enhances virtual infrastructure manageability by acting as a proxy between Virtual Center and the ESX and VMware Server systems under management.
D. ACE enhances reliability of the virtual infrastructure by providing hardware redundancy for ESX Server.
All VMware virtualization products are based on the same underlying virtualization technology, but there are some differences among these products. Which one of the following statements is true?
A. VMware Server and VMware Workstation both provide tools for remote management of virtual machines.
B. Because it runs on the bare metal, ESX Server supports a narrower range of physical hardware than either Workstation or VMware Server.
C. ESX Server supports more types of guest operating system than Workstation or Vmware Server.
D. Only ESX Server allows virtual machines to be configured with multiple virtual CPUs.
Pointing a VI Client directly to an ESX Server host rather than a VirtualCenter Server:
A. is not recommended, even if VirtualCenter was not purchased.
B. works identically, but any tasks issued are superceded by the VirtualCenter Server.
C. is similar except that objects are at the host and not datacenter level, and enterprise tasks such as cloning and migrating VMs are not available.
D. is similar except that objects are at the host and not datacenter level, but typical tasks such as template creation and cloning VMs are available.
When defining a NIC team (bond) in ESX Server, it is possible to designate some of the physical NICs that make up the bond as "standby" NICs. Which statement most accurately describes the purpose of a standby NIC? A standby NIC:
A. is used only when network traffic exceeds the capacity of the rest of the team.
B. is used only in the case of the failure of other NICs in the team.
C. is not used as part of the team until activated by the administrator.
D. is used to implement traffic shaping for the rest of the team.
Which of the following is true about cold migration of a VM from one host to another using VMware Infrastructure 3? requires
A. The VM must be powered off.
B. The VM must be either powered off or suspended.
C. The two hosts involved must use the same network labels.
D. Both hosts must have the same bit type (32-bit or 64-bit) CPU.
If a VM that belongs to a resource pool does not have enough physical resources available to meet its reservation:
A. it will power off immediately.
B. VMs outside the resource pool will not be able to power on.
C. it will not be able to power on until sufficient physical resources in use are freed up.
D. if its reservations are expandable, it will attempt to draw upon the resources of its parent resource pool.
Hitting ESC when first powering on a VM in ESX Server 3.0
A. enters the boot order of the BIOS.
B. does nothing, as ESC is not a valid option.
C. directs the VM to directly boot from network.
D. enters the general BIOS options and is an alternative to hitting F12.
Upgrading an ESX Server 2.x host’s VMFS-2 volume to VMFS-3, and then referencing the VMFS-3 volume from an ESX Server 3.0 host:
A. will allow any VMs on the original VMFS-2 to be powered on.
B. will allow the ESX Server 3.0 host to view the VMs in read-only mode.
C. will allow both the ESX Server 2.x and ESX Server 3.0 hosts to view the VMs in read-only mode.
D. requires both the ESX Server 2.x and ESX Server 3.0 hosts to be managed by VirtualCenter 2.0 in order to perform the upgrade of the VMFS-2 volume.
If the connection between the license server and VirtualCenter 2.0 Server is lost:
A. there is no impact because licenses are stored and configured per host when using a license server.
B. VMs will continue to run, but after a grace period ends, they cannot be powered back on until connectivity with the license server is restored.
C. ESX Server hosts can be configured and additional hosts added, but no VMs can be powered on until connectivity with the license server is restored.
D. all VMs will power off if connectivity is not restored within a 48 hour grace period. Hence, we recommend installing the license server on the same machine with the VirtualCenter Server.
64-bit CPUs are supported for VMotion in VirtualCenter 2.0
A. only when migrating 32-bit Guest OSes.
B. when migrating either 32-bit or 64-bit Guest OSes, so long as the Nx flag is hidden.
C. when migrating either 32-bit or 64-bit Guest OSes, regardless of CPU compatibility
D. when migrating either 32-bit or 64-bit Guest OSes, so long as the VMware CPU Compatibility Tool detects two compatible CPUs.
Suppose you attempt to use Web Access to reach an individual ESX host but receive a "host not found" error. Which of the following is LEAST likely to be the cause of the problem?
A. The Apache Tomcat server is not currently running on the host.
B. The server is not currently powered on.
C. The Service Console’s IP address has recently been changed.
D. Your VI Client has not been configured to allow you to use the Web Access facility.
1. A 2. B 3. C 4. B 5. B 6. D 7. A 8. A 9. B 10. D 11. D
刚刚发现了百分比(%)在IE和在Firefox中的表现并不相同,现在居然发现即便是在Firefox内部,em和%的表现也并不一样。
首先先要讨论一下,作为font-size等CSS属性的单位,78%和0.78em到底是否相同?
遗憾的是,我并不是CSS专家,所以我没法回答按照标准这两个单位是否完全相同。但是,根据某些权威网站的说明,
Both em and % are relative measures. The difference is what each is relative to. Em is always relative to font size. % is relative to the containing block, usually the body, a div, or a table, unless applied to font-size, in which case it applies to the parent font-size.
也就是说,在用于font-size的时候,两者的涵义应该是相同的。但是,当我用下面在Firefox (ver 2.0.0.3, 默认字体微软雅黑16px)上显示如下HTML片段时,却出现了令我不解的结果:

Firefox下的结果

IE下的结果
看了这些结果,我真的不明白了:到底font-size单位中的百分比和em是否相同?
此外,有一点让我安心的就是,如果使用em作为单位的话,就没有上一篇文章中提到的,IE和Firefox中大小不一致的现象了。
| font-size | IE6/IE7 | Firefox |
|---|---|---|
| 100% | 16px | 16px |
| 99% | ||
| 98% | ||
| 97% | 15px | |
| 96% | 15px | |
| 95% | ||
| 94% | ||
| 93% | ||
| 92% | ||
| 91% | ||
| 90% | 14px | 14px |
| 89% | ||
| 88% | ||
| 87% | ||
| 86% | ||
| 85% | ||
| 84% | 13px | 13px |
| 83% | ||
| 82% | ||
| 81% | ||
| 80% | ||
| 79% | ||
| 78% | 12px | 12px |
| 77% | ||
| 76% | ||
| 75% | ||
| 74% | ||
| 73% | ||
| 72% | 11px | |
| 71% | 11px | |
| 70% | ||
| 69% | ||
| 68% | ||
| 67% | ||
| 66% |
今天在测试IE7和firefox下blog的字体显示时,发现在某些特定的font-size下,IE和firefox所显示的字体大小并不相同。
这里要提前说明的是,我所遇到的问题是在如下环境下发生的:
为了找出问题的根本原因,我写了一段php代码用来输出font-size等于100% (也即1em) 到 50% (0.5em)之间的每隔1% (0.01em)的文字显示结果。该程序的运行结果如下图所示。

上图是在Firefox下的测试结果。然后,根据IE和Firefox下的结果,得出了右面的这张表格。
通过这张表格即可看出,虽然在大多数的的情况下IE和Firefox的结果是相同的,但是当设置font-size=97%的时候,IE会显示16px的字体,而Firefox则显示15px的字体。同样font-size=72%时,IE显示12px字体,Firefox则显示11px字体。
实际用计算器计算一下就知道,当font-size为97%时,16px X 97% = 15.52px。也就是说,在IE中15.52px被解释为16px字体,而在Firefox当中15.52px被解释为15px字体 (不知道是不是Firefox的计算方法有问题?或者是W3C规定这样做的?还是我计算错误?)。
补充一条最新发现:刚才试着用CSSViewer这个插件检查了一下font-size=97%时的像素值,发现结果并不是我想象的15.52px,而是15.4667px——不知道Firefox中究竟是按照什么标准计算百分比单位的font-size的呢?
IE和Firefox究竟谁对谁错,实在是难以说清,不过有一点是肯定的——就是在设计CSS的时候,要特别注意这些IE和Firefox之间不同的地方。
花了四天时间,终于上完了全部的课——这个又贵又长($2995,四整天)的培训,也给我这个玩了近半年VMware VI3的人带来了一些新的收获。
本次培训课程的全称是VMware Infrastructure 3: Install and Configure,是一套覆盖了从初级到中级的、全面介绍VI3的功能和具体用法的课程。对于有一定VI3基础的人来说,可能这个课程的前半部分过于简单,因此我也考虑过是否要参加VMware最新的课程:VMware Infrastructure 3: Deploy, Secure & Analyzer。后者主要涵盖中级到高级内容,包括scripting(我最想学的部分),security(也是极其重要的部分,应该包括了firewall的设置等很重要的内容),以及更深入的DRS和HA,最后还有问题分析的工具和方法(和我现在的业务关系紧密)。——但是,遗憾的是该课程目前在我们这里还没有,于是我只好选择了前者。
上课的形式是50%讲座,50%实习 (Hands-on)的形式,使用的机器全都在美国。我们通过教室里PC机上安装的Citrix终端远程访问位于美国VMware总部的工作站,再从那里远程访问ESX Server和VirtualCenter Server(感觉就是特别绕,经常用着用着就不知道自己在哪里了)。参加这个课程除了可以得到一套全英文的教材,还赠送一套VI3的CD-ROM(但是License要到VMware公司去下载试用版),另赠送一VMware帆布包。
闲话不多说,下面就是一些课堂上注意到的一些Tips。
Tip 1 VMware ESX Server 可以安装在单CPU系统上
VMware的很多技术文档中都明确说明,ESX必须安装在双CPU或更多CPU的系统上。的确,这是官方的说法,但是事实上在单CPU服务器上安装ESX也并不会导致出错、无法安装。不过,在了解了VMkernel的CPU调度的原理之后,可以很明显地看出单CPU、特别是单Core、不支持Hyperthreading的CPU将会大幅度拖慢系统性能,尤其是在VM的CPU使用率较高的时候。可想而知在这样的环境下VMware DRS/VMware HA是难以运行,或者行为异常。
因此作为测试来说,实在没有Dual CPU的机器单CPU的也凑合着用吧,不过最好有Hyperthreading功能。至于production环境,务必使用双CPU或更多CPU的服务器。
Tip 2 VMotion的充分必要条件
要使用VMotion功能(以及依靠VMotion的其它功能例如DRS),有无数条件需要满足,例如首先要有一个用于VMotion的VMkernel,此外被移动的VM必须是存储在SAN之类的共有设备上等等。关于两台ESX的CPU,VMware说需要compatible CPU,也就是说进行VMotion的两台ESX Server的CPU要兼容。什么是“兼容”呢?当然,如果你去看Basic Administration Guide可以获得既详细却又冗长的答案,这里就把VMotion对CPU的要求做一总结:
| CPU Characteristics | 是否需要完全相同? | 为什么? |
|---|---|---|
| CPU的个数,Core数,是否支持Hyperthreading,CPU的主频,缓存大小 | No | VMkernel已经通过虚拟技术使得VM不依赖于这些物理特性 |
| 制造商 (Intel还是AMD),Family (P4,Xeon还是Opteron) | Yes | 不同制造商、不同Family的CPU的指令集有细微的差别 |
| 是否有SSE3指令 | Yes | Guest OS上的程序有可能使用这些指令 |
| 硬件协助 (Virtualization Hardware Assist) | 32-bit VM: No | VMkernel已经通过虚拟技术使得VM不依赖于这些物理特性 |
| 64-bit VM on Intel: Yes |
目前在VMware中对Intel 64-bit的虚拟化是要依靠Intel的VT技术的 |
|
| Execution Disable | Yes (但是可以更改) |
Guest OS检测到NX/XD bit时就可能会利用这一特性(如Windows XP的数据执行保护) |
当然,与其要记住这么多,不如直接下载VMware提供的CPU Compatibility Tools,这个工具是专门为VMotion设计的,用来检查两台ESX Server的CPU兼容性。
Tip 3 Service Console是一个特殊的VM
很多人有一种误解,就是ESX Server启动之后看到的这个很像Linux界面——Service Console,就是ESX的OS本身。因此,很多人认为ESX Server是基于Linux的,或者说是安装在一个经过修改的Linux的上面的。
这种说法其实也不能说是完全错误,但是说ESX是构建在Linux之上的却是错误的——因为正相反,这个“Linux”也是运行在ESX之上的一个特殊的VM。
Service Console只被分配给一个CPU,无论物理服务器拥有多少个。这个CPU固定是CPU0,也即系统中的第一个逻辑CPU。和其他VM不同的是,Service Console可以直接和ESX的核心VMkenel打交道,进行系统管理操作。
此外,还有一些关于SAN的Multipathing,以及资源管理的话题,以后找时间专门说吧。
在前一篇文章中提到,VMware Workstation 6当中引入了众多server-like的新特性,这其中一个引人注目的特性就是可以不必打开Workstation的管理界面,而是在后台运行VM。这一功能使得Workstation可以在后台同时运行多个VM,在操作形式上更像VMware的Server系列产品了。
要使用这一功能很简单——只需要直接关闭Workstation的界面即可。关闭时它会提示你:是需要Suspend (挂起),Power Off还是Run in Background。选择Run in Background,Workstation就会关闭,但是VM继续运行。只需通过任务栏托盘里的图标,就可以在此打开该VM。
但是一个问题就是,不用打开Workstation就能在后台执行的确可以节省资源,可是要使用VM毕竟还要打开Workstation,难道就没有别的办法吗?
办法当然有,其一就是使用RDP或VNC等远程桌面协议。但是,无论是仅限于某些Windows平台的RDP也好,号称跨平台的VNC也好,甚至企业级的Citrix Presentation Server也罢,无需置疑都是在OS启动之后才能连接的。既然是虚拟PC,能否就算是OS启动前也能远程连接呢?此外像DOS这种根本不支持远程桌面的Guest OS又要如何远程使用呢?
显然,要远程使用Guest OS,不能依赖于该OS上特定的技术。VMware Workstation就提供了这样的一种凌驾于Guest OS之上的、与Guest OS完全无关的远程服务——Remote Display。
在Workstation 6当中,只要对某个Guest OS启动了Remote Display,就可以通过VNC协议连接并使用这一Guest OS。这里的VNC不同于直接在Guest OS上安装VNC,而是在虚拟化层中直接将输入输出按照VNC协议与远程的VNC Client进行通信,效率非常高。要使用这一功能,只需要在Guest OS的Setting中,将Remote Display设置为Enable,并选择一个端口号即可。
一切设置好之后,下载个免费的VNC Viewer连接试试看吧!需要注意的是,在使用VNC Viewer (Client)进行连接时,并不是连接Guest OS,而是连接Host也即Workstation所在的主机,因此不要填错主机地址。在虚拟机Power On到Power Off之间的任何时候都可以连接。
此外,不知为什么,在使用ReadVNC连接时,必须用Full Color进行连接,否则就会被VNC服务器(Workstation)断开。看着POST自检画面和Windows的启动LOGO出现在VNC上,是不是别有一番感受呢。
很多人都弄不清楚VMware Workstation和VMware Server之间到底有什么功能差别。从名字上看,Server似乎应该比Workstation功能更强,可是Server居然是免费的,Workstation反倒要花钱。两者之间到底有什么区别呢?
其实,首先从用途上分,正如VMware网站上所说的,Workstation是用来搭建测试、临时环境的,也就是说Workstation上面的Guest OS通常是为了测试、评估某个软件,或者是为了临时运行某个与当前系统不兼容的应用程序,通常不作为正式的系统、特别是服务器系统使用。而VMware Server则可以看成是VMware公司的旗舰产品——GSX的一个免费入门版,其上面通常会同时运行多个Guest OS,并且是作为稳定的服务器系统运行的,换句话说,一台服务器上安装了VMware Server之后,就可以作为几台虚拟服务器使用。从某种角度讲,如果在VMware Server上只运行一台VM,也就没有什么意义了。
那么,从技术角度上看两者有什么不同呢?VIRTUALIZATION.INFO在5月10日的一篇文章中,比较了两者的最新版本:VMware Workstation 6.0.0 (5月9日发布)和 VMware Server 1.0.3 (4月26日发布)。由于两者面向的市场不同,这个比较可能没有什么实际意义,但是由于在新版本的Workstation中包含了很多server-like的特性,在一些模棱两可的环境中还是值得参考的。
| VMware Workstation 6.0.0 | VMware Server 1.0.3 | |
|---|---|---|
| 作为Service启动 | No | Yes |
| 在系统启动时启动VM | No | Yes |
| Headless Interface | Yes | No |
| 本地管理 | UI+Command Line | UI+Command Line |
| 远程管理 | No | Yes |
| Virtual SMP (CPUs / VM) | 2 | 2 (experimental) |
| 支持Intel VT | Yes | Yes (experimental) |
| 每个VM的最大内存容量 | 8GB | 3.6GB |
| 所有VM的内存总和 | 无限制 | 最多64GB |
| 每个VM的IDE控制器/磁盘数 | 1/4 | 1/4 |
| 每个VM的SCSI控制器/磁盘数 | 1/7 | 4/60 |
| 每个VM的最大硬盘容量 (IDE/SCSI) | 950GB | 950GB |
| 每个VM的网络适配器数量 | 10个 | 4个 |
| 虚拟交换机数量 | 10个 | 9个 |
| 可否建立多个Snapshot | Yes | No |
| VM克隆 | Yes | Yes (需要VirtualCenter) |
| VM Recoding/Replaying | Yes (experimental) | No |
| VM Movie Capture | Yes | No |
| Host和Guest之间的Drag & Drop | Yes | No |
| 支持64-bit OS | Yes | Yes |
| 支持Para-virtualization | Yes (仅支持VMI3.0) | No |
| 价格 | $189 (网上下载) $209 (包装零售) |
免费 |
此外,VMware Server还不支持WinXP Home/Pro、Win2000 Pro等不是服务器版本的OS作为Host OS。
Capture和Record两个英文单词在中文中都有“记录”的涵义,但是在VMware Workstation 6中,这两项看上去相似实际上截然不同的功能常常会让没用过的人混淆。
Capture Movie是一项录制Guest OS为AVI视频的功能。这项功能非常适合用来做视频演示,例如演示一段关于某个新软件的使用方法等等。这一功能极其“傻瓜化”,只需要在启动Guest OS后,在VMware Workstation的菜单中选择VM > Capture Movie…,就会弹出一个对话框提示AVI保存的场所,以及画质(目前有高中低三种选项,并可选择忽略没有变化的帧)。之后,在窗口右下方的状态栏就会出现一个红色的圆表示正在录制中。录制过程中基本不会感觉到速度变慢等影响。
而Record/Replay则是Workstation 6中新增加的一个测试中的功能。该功能有些类似Snapshot——它不仅能记录下过去的某一点,而且会记录那一点之后到现在为止的期间中的所有系统的动作。这里的工作不仅包括鼠标键盘等输入动作,更包括内存、I/O等系统状态。该功能最大的用处就是,对于那些特别难以再现的系统现象(如BUG)一旦加以录制,就可以反复回放,极大地方便了程序特别是系统应用程序的DEBUG。
一点小小的遗憾的就是,由于目前Record/Replay功能不支持对虚拟外部设备的记录(想想也是,如果这些外部设备被移走了,读写外部设备的动作是无法再现的),在使用它之前必须移除VM设置中的USB Controller / 软驱 / 光驱 / 声音适配器 / SCSI设备 / LSI Logic Adapter,否则无法使用。另外,在录制过程中也要避免进行网络操作,否则将难以正确回放。
此外,设置了虚拟SMP的系统和64-bit OS也无法使用该功能。

VMware Converter是什么?对于经常使用VMware产品群的人来说,VMware Converter是一个不能不用的工具,主要用与各种虚拟机格式间的转换。
也许VMware老用户们会记得两个有名的工具:VMware P2V Assistant 和 VMware Virtual Machine Importer。前者大名鼎鼎是因为,它可以把一台物理计算机 (Physical Machine) 原封不动地转换为一台虚拟计算机 (Virtual Machine)。后者则是VMware为了与竞争对手抗衡,而推出的能够将其他形式的虚拟机映像(如微软的Virtual PC)转换为VMware的映像。
那么VMware Converter呢?VMware Converter就是上面两个工具合二为一,并且增添了众多新功能之后的新版本了。旧的P2V Assistant和VM Importer将不再有新版本,将会逐渐淡出市场。
VMware Converter有两个版本,入门的Starter版,企业级的Enterprise版本。Starter版是免费的,可以从VMware的主页上下载;而Enterprise版则是VirtualCenter Management Server的一部分,不单独出售。但是,除了要用VMware Converter进行大规模的、全自动的、企业级的转换之外,Starter版本和Enterprise版本基本上没有差别。这样,使用VMware Converter + VMware Player这两个免费产品,任何用户都可以把自己的电脑转换成虚拟PC,在虚拟世界里遨游一番了。
VMware Converter里最引人注目的,就是增强了的P2V (Physical to Virtual)功能了。VMware Converter 3里,有两种P2V方法:

今天在@IT网站看到一篇关于Expression Blend的文章,这篇文章开头部分对于.NET 3.0/WPF时代微软产品结构、地位作了简单介绍,觉得概括的很精妙,这里就加以借题发挥,做一个WPF入门。
什么是WPF?
要是到微软的网站查找答案,肯定能得到一大堆华丽却让人糊涂的辞藻。WPF (Windows Presentation Foundation)是.NET 3.0的一部分,是一种新的用户界面技术,用术语说是一种新的“图形子系统 (Graphic Subsystem)”。换句话说,在.NET 2.0当中我们可以开发两种应用程序:
那么在.NET 3.0当中,可以开发的应用程序又多了一种:
而WPF Application则又可以继续分成下面两种:
那么最近沸沸扬扬的Silverlight又是什么呢?Silverlight的前身是很早以前就万人期待的WPF/E,其中E的意义是Everywhere。众所周知,要想使用WPF,就必须安装.NET 3.0;而.NET 3.0虽然宣称跨平台,但目前还仅限于Windows XP以上版本。因此,WPF/E最初的目标,就是把WPF/XAML的丰富的用户界面表现能力带到各个平台。
带着这个目标,WPF/E经历了数十个月的秘密开发之后,作为Silverlight诞生了——其诞生之日起,就被人们命名为Flash杀手——因为它和Adobe的Flash太相似了。很多.NET程序员都乐了——以后可以用C#开发Flash了!从这一点,想必Silverlight的特点已经很清晰了:客户端是浏览器,在下载一个插件之后即可享受Silverlight带来的激动人心的用户体验了。
最后,用一张图表来总结各种产品的关系、地位:
- Next »