silverlight-host

用过Silverlight的兄弟都清楚,当在Visual Studio 2008中建立一个Silverlight Application Project时,首先会弹出一个提示框如上图,询问是否自动生成一个ASP.NET网站来托管这个Silverlight应用。默认会建立。一般情况下我们都会选择不建立,这样会在解决方案里少生成一个项目。
自动生成一个ASP.NET网站来托管这个Silverlight应用的好处是,在每次Debug整个解决方案的时候,Visual Studio 2008会自动首先编译Silverlight项目,然后把编译结果,一个xap文件,自动拷贝到ASP.NET网站项目的ClientBin下,然后启动ASP.NET网站项目的默认页面,显示了最新版本的Silverlight应用。如下图所示。

silverlight-host2

问题是,如果你一开始没有让Visual Studio 2008建立那个网站项目,如果哪天你需要一个网站了,可能是各种原因,比如需要一个本地的Web Service等等,自己新建一个ASP.NET网站,就不能实现上面的自动拷贝xap文件了。

解决方法比较绕。这是一个MSBuild问题,你需要Unload各个项目,然后用写字板打开ASP.NET的项目文件(csproj文件),然后在PropertyGroup中加一个SilverlightApplicationList项,如图:

silverlight-host3

注意相对路径,项目名称以及项目的GUID。这些东西都可以在解决方案文件(sln文件)里找到。就不详细解释了。

silverlight-host4

Reload项目之后Build,就会发现你的项目可以自动把xap文件拷贝到ClientBin下了。

后记:作为一个使用Silverlight开发了无数年的工程师,这似乎是我第一次写关于Silverlight的博文。现在想想,大概是公司政策使然?我应该是个很守规矩的人。

c-sharp-comment

public sealed class ScrollViewer : ContentControl

[code=’csharp’]
//
// Summary:
// Gets a value that represents the horizontal size of the area that can be
// scrolled; the difference between the width of the extent and the width of
// the viewport..
//
// Returns:
// The horizontal size of the area that can be scrolled. This property has no
// default value.
public double ScrollableWidth { get; internal set; }
[/code]

Silverlight Control里面的小细节,小小小细节…
好几篇这样的文章了,以后学着粗枝大叶一点,产品中的这些小细节太让我恼火了。

补充几句,觉得C#里面的注释写得太像八股文了。最近写了好多好多,现在随便开个东西开始无意识输出的是“Gets or sets a value indicating whether…”。

picture-6

问题

在我的Mac OS X 10.5.6中,通过自动升级安装Microsoft Office 2008 for Mac的SP1后,再次打开任意Office程序时,都会出现一个Microsoft Office Setup Assistant:

picture-1

问题是下一步通过这个窗口后,都会弹出Mirosoft Autoupdate升级窗口:

picture-2

在这里,任何选择最终都会关闭这个窗口.然后再次点击Office的任意程序,循环重新开始上面的过程.

解决

删除这两个文件:
/Users/username/Library/Preferences/Microsoft/Office 2008/Microsoft Office 2008 settings.plist
picture-4

/Applications/Microsoft Office 2008/Office/OfficePID.plist

picture-3

删除这两个文件后,再次打开Office程序时会要求重新输入用户名,单位名和序列号,但是通过后就可以正常使用了.

ie-bug

1. size,padding和margin距离异常

在IE6中,各种size,padding和margin总是感觉怪怪的,有时候死活差那么几个像素.这时候可以使用单独为IE准备的CSS文件来纠正.只需要在页面头部加类似这样的CSS文件即可:

[code=’html’]

[/code]

其中的ie.css是对主CSS文件中,那些在IE6下显示异常的元素,重新定义的CSS.

2. 块元素居中问题

在现代浏览器中,一个块元素,假设是一个p,设置了宽度,设置左右margin都是auto之后,渲染效果应该是居中.但是在IE中,必须对其父元素,假设是body,加text-align:center;才能看到居中效果:

[code=’css’]body { text-align: center; }[/code]

并且,你还要在子元素p里把继承的居中纠正回来:
[code=’css’]p { text-align: left; }[/code]

3. div最小高度不能低于12px的bug

如果你需要一个高度很小的div,假设说做一个分隔线之类,你会发现div最小高度不会低于12px.这时候要设置div的line-height: 0;才行.

[code=’html’]

[/code]

如果还是不行,你要在div里套一个p,并且指定这个p的line-height: 0;.

[code=’html’]

[/code]

4. 浮动元素的双倍margin距离bug

这是一个非常严重的bug.你会发现你的侧边栏总会跑到第二行去显示,或者明明你计算好宽度,平分两半,还预留了些空隙,在Firefox显示正常,在屏幕左右分布的两个块元素,在IE下非换行不可.说起来应当是IE的float块元素,margin加倍渲染的bug.
这样的代码:
[code=’css’]
.floatbox {
float: left;
width: 150px;
height: 150px;
margin: 5px 0 5px 100px;
/*This last value applies the 100px left margin */
}
[/code]

正确的渲染应该是这样:

marg-norm

但是在IE5和IE6里,margin的100px被加倍,渲染成这个样子:

marg-doubled

margin被加倍成了200px.
浮动元素的双倍margin距离bug的出现条件和特点是:

  1. float块元素
  2. margin方向与float方向相同,即float: left;的块只会加倍margin-left的值.
  3. 这个float块与其父容器的内边之间夹着这个margin的情况下,才会加倍.当前行的第二个float块,因为其左边不是父容器的内边,就不会出现这个bug.
  4. 浮动元素的双倍margin距离bug具备左右对称性.

修复很简单,在所有float的元素的CSS中加入display: inline;即可.其实根据W3C对float的定义,当float具备left或者right时,display效果应当是不起作用的,除非是display: none;,但是指定了display: inline;确实让IE6正确显示了margin.

5. 盒模型的bug

看这样一段代码:

[code=’css’]
div#box {
width: 100px;
border: 2px solid black;
padding: 10px;
}
[/code]

根据盒模型定义,这个div的宽度应该是2+10+100+10+2=124px.大部分浏览器也是这样解析的,唯独IE6认为它是100px宽.
这个bug会对布局带来严重影响.消除这个bug只需要在页首制定DTD即可.

[code=’html’][/code]

此前的一篇文章这样解释:在页首制定了DTD,浏览器就认定Web开发者知道并理解DTD,于是就会使用兼容标准的方式来解析和渲染页面.

6. PNG图片不能透明bug

在IE6中,PNG图片原本透明的部分被渲染成不透明的颜色.可以使用这篇文章提到的办法修复之.
其实这个bug只会出现在设置为alpha透明方式的png图片上,导引色透明方式在IE6中则不会出现不能透明的bug.

参考资料

hpc_headers_04_sl

寒假的时候让杨光帮我投了下简历,然后过了一阵子就组织面试了。说起来比较神奇,之前我在joinms里自己投过简历,没多久就收到STBC的HR写来的written test通知,我延了一次,第二次约好的时间因为和杨光介绍过去的STBC HPC的电话面试时间冲突,被我拒掉了…神奇的是,当STBC HPC电话面试结束后,收到的却是之前写来written test通知的同一个HR发来的on site面试通知…岂不是给人一种错觉:Microsoft的written test通知直接无视即可获得面试机会,呵呵。
Anyway,STBC是一个很远的地方,我九点半出门,约好下午一点面试,我觉得肯定够用了,说不定还能找个KFC吃顿像样的饭,没想到当我最终赶到,是12点50分…
饿着肚子面试一下午,三个FTE(最后一个是STBC HPC组的一个PM),每人一小时,当我回到学校的时候已经是晚上7点,一天被占用掉了~
面试过程…没什么好说的,实验室这边不见得会放我走,所以我去的时候是抱着面着玩的心态去的,无欲无求我就很放松,所以一点也不紧张。第二个小伙是个复旦的帅哥,被他一阵鄙视算法,无奈了,还是继续加油吧…
不过收获总是有的,至少我知道了别人是怎么看待我的简历的,他们注意些什么,不注意些什么,看来简历要大改了~