今天继续周末,周末继续上班。
我的这一排的实习生座位彻底空了一天,昨天多少还有一个人。
依旧啊,看了一天代码。我正在做的这个东西因为之前好几个人一起写的,所以很乱很乱,不是一般乱…
代码风格更是诡异,什么命名方式都有,登峰造极是这种类型的:

[code=’c#’]
internal void SomeInvoke(SomeThing Node, Action onfinish) { }
[/code]

一个不大的解决方案build时间N长,大部分时间被Code Analysis的warning占据了…
不能忍啊,这代码风格甚至比我们实验室项目差远了,留给我的只好慢慢改了…

今天是周末。早晨八点半照例到公司来上班,确切说是来加班。
到了前台先跑去登记,保安说给他几分钟让他找找加班登记的单子,这才发现我居然是第一个到的。这个…好吧,两年前好像不是这种阵势啊,比我早的人还是有一些的…
最夸张的是整个Intern Lab一整天居然不到十个人,FTE更是只看到一个。看来真的是项目压力小了,风气变了很多。跟实习生私下交流发现,加班竟然变成了被人鄙视的原因,大家都不加班…记得当年虽然我们天天加班,抱怨自然有一些,整体还是很勤奋的啊。
看代码。
中午的时候大鹏打来电话,说腐败一下吧。我说好。于是我们三个骑车去了沃尔玛,买了两只烤鸡,回去吃了。还买了两个手柄,价值78元,大鹏权衡了很久,来自东北的他自称从小到大吃过10个馒头,必须吃米饭才习惯,一直喊着买电饭锅。电饭锅价值88元,在78一对的手柄和电饭锅直接,我们选择了更加紧迫的需要——手柄…
吃过饭,两局实况都菜掉他之后,回公司继续看代码。
元元来了,听说我们买了手柄很是兴奋,于是晚上一起去我们那边踢实况。他们踢了多久多少局战绩如何我没看见,一直在厨房做饭。
炒饼,茄子,土豆,卷心菜,紫菜汤。就这些,很生活,很惬意。

2995612426_88be9fdda9

两年前临走的时候,就觉得,与MSRA的缘分还没结束,早晚一天会重返这里啊。果然,最终还是回来了。
我决定继续接着两年前的编号继续写下去。
说起来到了北京快一周了吧,前一段日子一直在住的地方整理房子,大鹏两个月前到了北京,就让他去租个房子我和会斌加他一共三个人住,能省点开支,加上微软给外地学生提供的丰厚(必须用这个词了,因为,真的很…)的住房补贴,能住的很爽。到了北京,发现确实很爽,我们豪爽的大鹏同学租了一个房子,没有水,没有电,空调就像电风扇;满地爬小强,还留给我个朝北房。
哈哈,不过好消息是,经过和物业维修,房屋中介,和传说中清华大学篮球教练的房东的扯皮,最终花了三天时间把房子给房东收拾出来了,结果还是一样,确实住的很爽。

因为是暑假,需要Check In的实习生很多,Check In的日子从每周二一次改成了每周二和周五各一次,我在2009年07月10日重新Check In。其实两天前曾经穿着以前的实习生黑色的T恤跑到西格玛,请保安开门,溜进来看了看…其实是来三国杀了。三国杀这是后话,一会儿再说。Check In流程和之前没什么区别,一共5个人,我最先到,后面连续三个都是本科生,让我足够郁闷。终于来了一个大哥,迫不及待地问,你是博士吧。答曰是。复问哪个学校的?答曰米国来的。汗…

MSRA里面,没有任何变化。当然墙壁装饰变了些,这个属于季节性之类的,一个注定要经常更换的地方更换了内容,也不算什么变化。最大的麻烦是FTE们的位子有了些调整,让我找不到人啊…最惨的是Intern的位子,物是人非啊。站到一个位子上和人聊天,不可遏制地我就会想起两年前坐在这里的Intern。

当然也不是没有认识的Intern,当年在BBQ小品上和我演对手的张红光,还是在他的位子上,还是在实习哦。说起最老的Intern,HR MM在领着我进来的时候说,她早晨在数据库里查了下,发现一个兄弟已经在MSRA实习了四年,Check Out日期还是2010的…哈哈。

来了继续做Silverlight。两年没动了,现在拿起来还是费点劲。第一天智涛就给我N多重量级的内部源代码,让我学习怎么写一个产品级的Code。至于是哪些产品,这个肯定不能说,不过很重量级…

今天先写这些,赶紧干活了,这是2009年07月10日的日记,我在11日早晨写的。虽然是周末…不过~

概述. 在美国第44任总统就职日这个历史性的日子,让我们来分析一下新的白宫网站(whitehouse.gov)代码结构吧。网站基于ASP.NET构建。

[singlepic=18466]

whitehouse.gov网站使用IIS 6.0. 网站的HTTP头信息中包含键值对”Server: Microsoft-IIS/6.0″。网站并没有使用微软公司最新版本服务器软件,IIS/7。

whitehouse.gov网站使用ASP.NET 2.0. HTTP头中标识自己的程序版本为”X-Aspnet-Version: 2.0.50727″。这个信息可以去掉,这样可以为每次服务器响应节省30字节带宽。

whitehouse.gov网站使用JQuery 1.2.6. JQuery JavaScript库,使用了其最小集版本,位于/includes/文件夹下。很多开发者使用Google服务器托管的JQuery以便提升性能和减小下载脚本的延迟时间。这样做可以提升站点性能。

<script type="text/javascript" src="/includes/eop/jquery-1.2.6.min.js"></script>

whitehouse.gov网站使用GZIP压缩. 所有网站文本都采用了GZIP压缩,显著地提升了性能。

未压缩大小:  48218 bytes
压缩后大小:   8370 bytes
节省带宽:           ~80%

whitehouse.gov网站使用Vary: Accept-Encoding. 在HTTP头中添加Vary: Accept-Encoding是一种强制代理不向不能解码GZIP的客户端发送GZIP内容的手段。

whitehouse.gov网站使用Cache-Control: privatemax-age. 它使用了”max-age=85895“,大约1 天。这样,html页面应该只会在你的计算机中缓存1天。

whitehouse.gov网站使用Web Trends Live追踪技术. WebTrends声称是“领先的网页分析和客户为中心智能市场营销解决方案(leading provider of web analytics and consumer-centric marketing intelligence solutions)。”

whitehouse.gov网站使用meta keywords标记. 这样做很奇怪,因为Internet上的访问者很少有不知道这里是干什么的。meta标记如下:

<meta name="keywords" content="President, Barack Obama, White House,
United States of America, 44th President, White House history, President Obama,
Barck, Barek, Barak, Barrack, Barrak, Obma, Barack" />

这样并不会对提升whitehouse.gov网站的Google PageRank有多少贡献。我认为搜索Barack Obama的用户无论如何都会被导引到这个网站的。

whitehouse.gov网站使用ViewState. 这是一个隐藏表单,允许网站在浏览器中存储服务器端数据。ASP.NET自动解析发送到浏览器的ViewState信息。浏览器不应该解析这个信息。

whitehouse.gov网站使用WebResource.axd. 这是ASP.NET生成的一个脚本文件。通常它们不能被有效地缓存,并且我发现它们的确降低了性能。

whitehouse.gov网站包含了很多空白字符. 如果你的浏览器启用了GZIP,这并不会带来性能影响,但是如果去掉这些空白字符,网站代码可以减小20%以上。

whitehouse.gov网站包含注释标签. 网站使用了很多HTML注释分割页面代码区域。如果能将这些注释写在服务器端代码中,可以在编译页面时不将注释编译在最终页面代码中,从而提升效率。

<!-- Start -->
<!-- End -->

whitehouse.gov网站包含很长很长的ASP.NET ID. 页面中的很多元素包含非常长的ID,是浪费带宽的主要因素之一。这些长ID可以很容易地在服务器端替换成短ID。

<a id="ctl09_rptNavigation_ctl00_rptNavigationItems_ctl01_hlSubNav"...

whitehouse.gov网站使用的GIF多于PNG. 网站使用的GIF图片多于PNG图片。PNG格式的图片可以更加优化,从而节省带宽和消耗。网站中使用了两个GIF动画。

whitehouse.gov网站使用了5个层叠式样式表(stylesheets)文件和12个JavaScripts脚本文件. 如果能把这两类文件合并成两个文件,网站可以更快而且更轻量级。当然这是针对访问首页的访客而言。奇怪的是,用于修饰管理页面的层叠式样式表也被加载进了普通用户的访问中:

/* admin styles */
/* cms */
.adminNavigation {width:996px; position:relative; z-index:100;}

whitehouse.gov网站使用了高度压缩的JPG. 如果你距离屏幕较远,或者视力不是那么好,这些图片看起来还行。开发者对JPG图片采用了高度压缩。这里显示的图片被放大并且轻微地二次压缩过。

[singlepic=18465]

whitehouse.gov网站使用了image sprites技术. 这项技术可以大幅提升站点性能,因为它将若干个小图片合并成了一张图片。这是一项先进的技术。采用了image sprites技术的图片是”nav-sprite.png“.

whitehouse.gov网站使用了Packer. Dean Edward的Packer是一个用于压缩JavaScript文件的工具。JavaScript脚本将在被下载时自动解压缩,这是一项很差的优化手段, 因为往往JavaScript经过GZIP压缩之后,比经过YUI压缩器(YUI Compressor)压缩之后更小。[参见 jquery-plugins.js]

eval(function(p,a,c,k,e,d)...

使用Packer的决定不像是一个深入了解GZIP或者文本压缩技术的人做出的。压缩之前的文件确实变小了,然而这导致了最终需要被下载的文件变大了。[http://dean.edwards.name/packer/]

whitehouse.gov大小821 KB, 在我的线路上(cable modem)使用了1.58秒完成加载。这个数字大约是新的、基于图片的网站的平均值。

加载时间:  1.58 seconds
总计大小:  821 KB

whitehouse.gov网站包含了几个隐藏链接. 在源文件里,大部分是在JavaScript中,大约嵌入了6个链接。这样,这些幸运的人就得到了来自白宫网站的外链(译者注:PageRank 9啊!9!)。

www.youngpup.net
http://sorgalla.com/jcarousel/
http://billwscott.com/carousel/
http://www.codylindley.com

whitehouse.gov网站使用了一个不透明的favicon.ico. 为了站点在加入书签后具有更好的视觉效果(译者注:对很多非IE浏览器而言,无论是否加入书签,favicon文件都会显示在标签栏),一个具有透明背景的favicon是更好的选择。这项改变对于一个知道怎么修改的人来说可以在10分钟内完成。

结论是,whitehouse.gov网站还是很吸引人的。虽然它并不算是一个非常有效率的站点,并且过多地注意了视觉效果。一个网站优化专家可以在几天之内将它的加载速度提升到现在的两倍。

最后,记住本届政府和奥巴马总统并不是写这些代码的人。

翻译自:http://dotnetperls.com/Content/whitehouse-gov-Site.aspx

经济危机,计算机行业自然冲击不小,因为一直被认为是烧钱行业嘛。先温饱然后才会需要计算机…
最近与实验室学长学姐交流不少,基本是见到机会就问。整体感觉是,他们感觉到了今天工作很难找,尤其是对上交大、复旦招聘会里面排着长龙的找不到工作的人的忧虑…
不过我们实验室的学长学姐还都不错。
一个学长去Intel面试,完事之后Intel称其为“最优秀的人才”,并且请他吃饭。他去了微软。
另一个学长暑假的时候被eBay鄙视,现在去了底薪16万的百度,告诉我,强人在百度钱很多的,今年一个清华的毕业研究生拿到33万。这每年按20%增长起来,几年就能在北京买房子啦!
学姐在微软实习了一辈子,最后转FTE面挂了。去百度啦。

百度钱多,要不我也去百度?

前几天Google黑板报上出现了一篇介绍新产品的帖子,《看图新体验,贴图新选择:谷歌看图、谷歌贴图论坛插件发布》。按理说,Google发布新产品咱都得去捧捧场,看看有啥新想法不是。进去一看大惊:谷歌看图(Google Viewer)和谷歌贴图(Google Uploader)居然标称:谷歌看图支持Discuz! 6.0及其以上各个语言及编码版本。

[singlepic=18208]

Google啊,Google是做平台的,目的是和微软一样一统天下,你们都用我的,我说了算。这下怎么和Discuz搞起来了?
决定学习一门技术的时候主要有两个考量,第一个是是否很快上手,比如有C基础的人接下来学C++、C#和JavaScript以及PHP都是正常的事情,学Ruby就费点劲。第二个是有没有前途,现在相信没人去学ASP(非ASP.NET)和Foxpro了吧,没前途不是。当然这个事情也不是绝对的,全靠命。参加这篇文章:《Windows Azure使COBOL焕发新机》
其实还有一个重要因素,说出来有点崇洋媚外嫌疑,就是这个东西是谁推出的,基本上国外公司推出的平台会好一些。咱都是中国人,中国人怎么做事情在学校咱都看得清楚,忽悠人是必然的,中国产品说10估计也就只能信其5。外国人比较纯洁,至少人家觉得欺骗别人是比较大的错误吧。所以平时我用的东西都是国外品牌,而且我从来不用百度(除了搜盗版MP3的时候…中国人嘛)。
说说Discuz怎么了。Discuz的确是我见过的最好的论坛程序,并且开源且免费。要命的是Discuz年年一个大版本号,5.0,6.0,7.0,更要命的是每个大版本都互相不兼容啊!辛辛苦苦为前一个版本开发的模板和插件,换了新的大版本号,就要做不小的修改。
真搞不懂Google为什么会去趟这滩浑水。还是因为谷歌不等于Google?

Windows Server 2008是最新的Windows Server。Windows Server 2008公平地说还是相当不错的,性能和安全性都没有太大的问题,稳定更不用说。

这篇文章里,我会详细介绍如何在Windows Server 2008下,安装使用和配置IIS 7.0的FTP服务。

环境说明:

  • 操作系统:Windows Server 2008 Standard Edition,英文版(由Microsoft DreamSpark支持)
  • 相关软件:Internet Information Services 7.0

首先假定IIS已经安装好。如果不会安装IIS,请参阅其他文章。

1. 安装FTP服务

[singlepic=18135,640,462]

在Server Manager中右键Roles中Web Server(IIS),添加服务器角色(Add Role Service)

[singlepic=18136,640,481]

添加的是FTP Publishing Service,同时要添加其他两个依赖项。

2. 配置FTP服务

[singlepic=18137,640,514]

很遗憾地是,Windows Server 2008中,FTP服务仍然需要老版本IIS6的管理器来管理。在管理工具中打开(Internet Information Services(IIS)6.0 Manager),可以看到一个FTP站点。

[singlepic=18138]

FTP Site,如端口等如果不希望是TCP 21,那么在这里修改。

[singlepic=18139]

Security Accounts,这是一个很危险的选项,默认打开了匿名访问,一定记得关掉。

[singlepic=18141]

Home Directory,这里设置FTP的根目录和权限,以及FTP的目录的列表方式,为了兼容性,我设成了UNIX。

[singlepic=18145]

Messages,这里可以设置当用户被FTP禁止、连接、离开和达到最大连接数时收到的消息。

[singlepic=18142]

Directory Security,这里可以设置默认的访问方式,默认是允许所有访问,然后除去下列表中的例外。也可以按照计算机IP打开某些访问,而禁止所有其他的连接。

3. 添加FTP用户

[singlepic=18147,640,458]

在Windows FTP中,用户是Windows用户。要想添加一个FTP用户,必须添加一个Windows用户,然后去设权限。在Computer Management中,Local Users and Groups下的Users中添加一个普通Windows用户。

[singlepic=18146,640,458]

也许你会担心添加Windows用户会导致安全问题,比如可以远程桌面连接之类,其实不必。首先,添加的Windows用户是普通用户,这样在权限上低于管理员。其次,一个Windows用户要想远程桌面连接服务器,必须同时是Remote Desktop Users这个组的成员,新建用户默认不是的,所以用户不能连接系统。

[singlepic=18143,640,514]

在IIS6 Manager中,右键FTP Site,选择Permissions,把刚才添加的用户赋予FTP权限。其实就是Add,然后找到刚才的用户,然后添加进列表,赋予相应的权限即可。
到这里,常规的FTP就可以连接了。

4. 高级应用——如何开启Passive Mode

主流的FTP客户端一般首选Passive Mode去连接FTP服务器,而Windows默认是不允许的。这样的后果就是在FTP客户端登陆时,可以看到通过了用户名密码认证,在列目录时卡住,不能进行。但是使用PORT Mode则可以连接。其实是可以解决的。方法如下:

[singlepic=18148,640,451]

首先,在IIS6 Manager中,右键整个计算机节点,选择属性。

[singlepic=18149]

然后打开Enable Direct Metabase Edit,允许在IIS运行中改变其配置。

[singlepic=18136,640,481]

然后安装IIS 6.0的脚本工具,默认是不安装的,不安装,则在C盘inetpub中就找不到AdminScripts这个文件夹,因为我们需要AdminScripts下的adsutil.vbs这个脚本。安装方法同添加FTP服务,只不过这次需要勾选“IIS 6 Scripting Tools”,同样有几个依赖项需要安装。

[singlepic=18150]

打开一个命令行(Command Prompt),注意,如果你不是Administrator帐户登陆Windows Server 2008,需要邮件使用“Run as administrator”打开,否则权限不足,会提示:

[code=’c#’]
Permission denied
Err Number: 70 (0x46)
Error Trying To Get the Object: MSFTPSVC
[/code]

正常打开后,输入这条命令:

[code=’c#’]CSCRIPT.exe C:\Inetpub\AdminScripts\adsutil.vbs set /MSFTPSVC/PassivePortRange “5500-5515″[/code]

这样可以允许FTP服务在5500到5515这16个端口中选择端口,供FTP客户端使用。需要说明的是,FTP Passive Mode合法的端口号是从5100到65535,但是都打开是明显不安全的,这个参数要根据你的服务器的并发连接数适当选择。

[singlepic=18151]

执行成功会显示:

[code=’c#’]
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation. All rights reserved.

PassivePortRange : (STRING) “5500-5515”
[/code]
如果你的防火墙是关闭的,那就结
束了,可以在FTP客户端使用FTP Passive Mode连接了。

5. 高级应用——配置Windows Firewall with Advanced Security

[singlepic=18152,640,477]

Windows Server 2008默认配置并打开了Windows Firewall with Advanced Security这个高级Windows防火墙,很好很强大。我们刚才设置的16个端口,现在还通不过防火墙,必须加以配置。
下面开启5500到5515这16个端口的入站操作,也可以作为目的是打开某个端口的配置Windows Firewall with Advanced Security的一般方法。
Windows Firewall with Advanced Security区分Inbound Rules和Outbound Rules,分别对应入站和出站规则。FTP Passive Mode的实质其实是FTP Server选取一个没人(其他FTP客户)占用的端口,然后返还给你的FTP客户端,然后FTP客户端使用这个端口去连接FTP服务,这样可以提高并发连接数及并发连接性能。FTP Passive Mode对服务器来说是一种入站操作。
首先打开Windows Firewall with Advanced Security,然后在Inbound Rules上右键建立新的规则(New Rule)

[singlepic=18153,720,512]

在New Inbound Rule Wizard向导的Rule Type中选择Port,因为我们要配置TCP端口。

[singlepic=18154,720,512]

第二步Protocol and Ports中选择TCP端口,因为FTP属于TCP。下面选择Specific local ports指定特定端口,不要全部打开,否则防火墙变成李雷雷了。
遗憾地是,Windows Firewall with Advanced Security不能使用类似5500-5515的IP段(IP Address Range)表达式。不知道这是出于什么考虑,作为微软技术支持者,我不理解为低下的用户体验,而善意地理解为为了避免管理员图方便打开不必要的端口。因此你必须手工填入这16个端口,并用英文逗号分割。

[singlepic=18155,720,512]

Action中决定,对于前面选择的目标,Windows Firewall with Advanced Security采取何种操作。因为FTP是普通应用,不带安全选项,这里选择Allow the connection。

[singlepic=18156,720,512]

Profile中,可以指定连接来源类型,这是在其他防火墙中少见的一层,可以按照Domain,Private和Public来选择,Domain只允许当前AD中的连接,Private只允许本地网络的连接,Public则是所有连接。不用说,安全性又提高不少。

[singlepic=18157,720,512]

Name中,给这条规则取个名字和描述。将来管理方便,不至于在列表里找不到。

[singlepic=18159,640,477]

我们刚才做了什么?允许5500-5515这16个端口的入站连接。还是很不安全的,因为如果一个端口被打开,而没有相应的监听程序,属于一个安全漏洞。理想的状态是,给这条规则指定程序,指定到Windows FTP的服务。可惜我试了多次不能找到FTP的程序到底是哪一个(本来以为是C:\Windows\system32\inetsrv\inetinfo.exe,因为服务是启动了这一个。也不能只指定到FTP Publishing Service这个服务,连接不上)。
选择刚才添加规则的属性。

[singlepic=18160]

在Programs and Services中,选择Services Settings。

[singlepic=18161]

理想的情况应该是Apply to this service中选中FTP Publishing Service,这样就完美了。可惜这样其实连不上。无奈我只好选择了Apply to services only,只允许到系统服务。这样,除非另一个恶意程序把自己注册为系统服务来监听5500到5515这16个端口,其他普通程序是不可以的,安全性稍微提高了一些。
如此,一个完整的Windows Server 2008下IIS 7.0的FTP(支持Passive Mode)就建立起来了。

本文图片使用Nocoo.Tools提供的工作窗口截图工具ScreenCapture截取。