在微软创新日北京站ASP.NET MVC部分的Video

这段时间正在全国各地跑,在微软创新日上讲ASP.NET MVC相关的内容,以下Video是在北京场录制的视频内容。如果大家感兴趣,可以直接观看.课程内容非常简单,适合于ASP.NET MVC初学者或者ASP/JSP/PHP开发人员。

Special thanks to Sandro Nigris. 🙂

ASP.NET MVC课程第一部分

ASP.NET MVC课程第二部分

本视频上所使用的Demo非常简单,就不再放Demo Code了,Slides可以从下面下载:

观止之读后感

新闻报导总是喜欢一些比较吸引眼球的话题,所以最近N年以来,我看到了太多的报道来渲染事实。报道IT人物时会将其打造成“中国的比尔 盖茨”,而介绍IT公司时则会同等思路的介绍“中国的微软或者IBM”。很好很强大!可惜就像我在八几年看到的一篇关于前苏联要建造人造月亮的文章一样,从小学开始让我激动了二十余年。但我现在大学毕业了,天上还是只有一轮明月。

我们从来不否认梦想的魅力。正如央视的某广告语:心有多大,舞台就有多大。但如果光做梦,不干活,那就成了白日梦了。即使你每天可以睡十二个小时,估计这个梦想也永远无法实现。那么“起来挑战微软”的那个人也就只是梦想家,而非实干家了(看到现在方兴东已经开始使用IT评论家的Title了,不再做其博客网的实际工作了)。

很多人可能看过了N多关于微软/比尔盖茨的传记,从企业文化等角度对于微软进行了方方面面的介绍,包括狗食文化(Dog food)、三权分立等等。不可否认的是,这些文章或多或少的对于一些历史事实有一些主观美化的臆测,毕竟里面的大部分人物是现实中的人物。某些决策失误该忽略就忽略,所以从这些书籍里面,我们看到的微软的成功是必然的。

而《观止-微软创建NT和未来的夺命狂奔》则尽可能得再现了微软的一段真实历史。这本书没有从微软的企业文化角度着手,也没有从行业历史着眼。只是介绍NT产品组以及卡特勒个人在创建Windows NT的历史,某种程度上,甚至有些平铺直叙。但在这些平铺直叙当中,你仍然会感觉到很多“刀光剑影”。如果当年没有卡特勒,如果当年卡特勒拒绝加入微软,如果微软与IBM继续OS/2,如果NT开发到一半被取消,如果NT开发再延期三年,那么,一切都不可想像。

在看此书的过程当中,我使用公司内部的Exchange Server查找了这些历史人物,发现大部分人现在还在微软,比如主人公卡特勒现在是微软资深技术院士(SR. Technical Fellow),而Jim Allchin在完成了Windows Vista之后离开了微软等等。我很敬佩作者这种不为尊者讳的写作态度,让我们可以更加真切的去读这段历史。从中感觉到微软的成功是建立在无数的偶然过程,而这些偶然的背后也有着一些必然,比如盖茨的宽松以及宽容等。

读此书我仅用了一周时间,在临睡着阅读一小时。阅读时我也遇到了一些困难,从小到大,我无数次拿起了《红楼梦》想看一遍,但都是受束于其错综复杂的人物关系而从来没有完成过。同样,《观止》这本书的人物也受多,每当引入一个新人物的时候,都会把其祖宗三代介绍一遍,也让我烦恼不已。

不过,我仍然强烈推荐大家去读一下这本书,如果你还有“起来,挑战微软”的梦想的话…

Joycode.MVC 0.5已经发布了

博客堂源代码自从去年开始就一直紧跟ASP.NET MVC的进度,开发了很长时间,一直都不好意思拿出来给大家显白显白。主要原因是Bug太多,实在是拿不出手。但在开发过程当中,实在是需要听取大家的反馈意见,所以现在把相关的工作做了一下整理,先把0.5的第一个CTP发布出来,以听到相关的建议。目前博客堂还运行的是0.4版本,所以像BING的搜索在博客堂上还没有出现,取而代之的是Google的BlogBar功能(不过Google的BlogBar对页面加载还会有一定的阻碍的)。

如果您希望下载源代码,请确保您的开发环境与我一样(其它环境主要是我个人没有进行过测试,希望各位有测试结果可以通知一下)。

1. IDE: Visual Studio 2008 SP1;

2. .NET Framework Version: 3.5 SP1;

3. ASP.NET MVC: 1.0;

4. OS: Windows 7 RC/Windows Vista/Windows Server; (ASP.NET MVC在IIS6下运行还需要特殊配置);

5. SQL Server 2008: 2005应该也可以,但我没有做过测试。

点击此处查看或者下载源代码;点击此处下载安装文件(不含源文件)

目前版本尚有很多Bug,不推荐普通用户下载。非常感谢。

如何判断当前浏览器是否是IE8?

IE8发布之后,市场份额在节节上升当中。由于目前Windows 7在市场当中的反响相当不错,相信随着Windows 7的上市,IE8的市场份额更会打着滚儿的上升。

对于网站主来说,除了做好IE8的兼容之外(其实就是W3C的标准兼容),还有一个细节需要注意,那就是如何来判断当前用户使用的是不是IE8。有很多哥们儿就说了,这还不容易吗?使用UserAgent不就可以了,根据当前的UserAgent字符串,查看一下是不是IE8?类似于展波兄给出的如何判断.NET版本一样。

如果你真的认为使用这个字符串就可以正确判断目标浏览器的版本号,那就有些很傻很天真了。作为一个完全兼容W3C标准的微软浏览器,在IE8当中为了照顾目前世面上大部分网站的需要,其总共提供了三个渲染引擎,即IE8标准模式,IE7的兼容模式,以及IE6的Quirks模式。而IE8的UserAgent字符串也会动态的根据渲染引擎不同而采用不同的字符串。比如以下三种情况:

1. 在最终用户访问你的网站时,点击了地址栏右侧兼容模式按钮;

2. 你的网站中的相应页面使用了IE7兼容字符串,即<meta content="IE=EmulateIE7" http-equiv="X-UA-Compatible"/>,或者在Web服务器 (IIS/Apache)的HTTP Header信息当中作了相应的设置;

3. 微软为了协助贵公司的网站页面在IE8下显示更加兼容,在IE8兼容列表当中将贵公司的网站地址加入了一个Windows Update维护列表中(如果您的网站在此列表当中,并且您相信您的网站其实已经完全兼容W3C标准,所以想从此列表移除,可以发送邮件至[email protected]申请移除)。

那么在以上三种情况下,你得到的UseAgent字符串将会是IE7,而不是IE8。

那么如何正确判断当前浏览器是不是IE8呢? 使用以下代码即可:

   1:  function getInternetExplorerVersion()
   2:  // Returns the version of Windows Internet Explorer or a -1
   3:  // (indicating the use of another browser).
   4:  {
   5:     var rv = -1; // Return value assumes failure.
   6:     if (navigator.appName == 'Microsoft Internet Explorer')
   7:     {
   8:        var ua = navigator.userAgent;
   9:        var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
  10:        if (re.exec(ua) != null)
  11:           rv = parseFloat( RegExp.$1 );
  12:     }
  13:     return rv;
  14:  }
  15:  function checkVersion()
  16:  {
  17:     var msg = "You're not using Windows Internet Explorer.";
  18:     var ver = getInternetExplorerVersion();
  19:     if ( ver> -1 )
  20:     {
  21:        if ( ver>= 8.0 )
  22:           msg = "You're using a recent copy of Windows Internet Explorer."
  23:        else
  24:           msg = "You should upgrade your copy of Windows Internet Explorer.";
  25:      }
  26:     alert( msg );
  27:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

其实此问题,是我负责的一个客户前端时间询问我的。美国一个好哥们Giorgio Sardo帮我解决了此问题。在他的贴子当中,还有其它一些您可能感兴趣的内容,比如如何判断当前浏览器是否支持网页快讯(WebSlice),加速器(Accelerator)以及可视化搜索(Visual Search)等。您也可以一并阅读。

使用IEAK创建自属品牌浏览器

可能这段时间,很多朋友已经关注了IE8的相关发布活动,在3月20日,微软全球发布了包括简体中文版本在内的超过25个语言的IE8。在短短八个小时内,其下载量超过了一千二百万,取得了很好的市场响应。

除了微软自己的发布活动以外,我们还与新浪在3月23日共同发布了新浪定制版IE8,并且在未来,还会有其它的互联网网站发布其定制版IE8。其实这种定制技术,在难度上并不大,因为微软提供了IEAK供所有用户进行自有品牌的创建,其实定制过程非常简单,大体上类似于一个向导过程,将您所有的开发以及希望的属性进行一个统一的打包而已。如果贵公司感兴趣,只需要下载本文后,我个人撰写的一个使用说明文档即可以完成相关的创建活动。不止可以把加速器、网页快讯、可视化搜索、工具栏、ActiveX控件加入到IE8包当中,还可以定义IE8的默认主页、默认搜索引擎、收藏夹等等内容。

其实除了面向公网发布以外,在企业内部也完全可以使用该工具,再配合IE8的组策略设置功能,可以让企业内部更加方便得建立统一的浏览体验。

针对中国特色,网吧的管理者来说,使用了自定义版本的IE8,对于网吧管理者也可以更加方便进行管理。

关于兼容性,我们除了与国内领先的互联网网站合作,在一年前就开始解决兼容性以外,还与万网等托管商合作,帮助中小企业的网站解决了IE8的兼容性问题,稍后还会有其它一系列的行动以及合作,解决其它目前还存在的兼容性问题(包括相关网上支付应用等)。当然也非常期望得到各位关于IE8的相关反馈,以便我们在规划下一代浏览器产品时,能够给用户更好的体验。

Messenger中的病毒营销

相信使用Windows Live Messenger的朋友可能都遭遇过类似的情况。由于开心的好友众多,现在MSN上会经常收到类似的病毒营销方式。开心每次都要提醒对方赶快换一个MSN密码。因为很明显,他们应该把MSN密码泄露给了不该泄露的网站。

现在国内SNS网站众多,基本上都会有一个功能,即通过来邀请好友,大体实现方式是让最终用户提供MSN用户名以及密码,然后网站代理登录,将邀请函发给所有的MSN好友,实现起来非常简单,因为现在MSN的协议也比较透明,网上也有很多开源的源代码了。比如像“校内”、“CSDN空间”以及“新浪空间”等都有类似功能(我注册了国内十几个SNS网站的用户,这几个只是脑海中的第一印象。使用功能截图并不包含任何暗示)。

image

image

image

那么有多少朋友敢在上面的文本框当中输入用户名以及密码呢?开心原来以为比例会比较少,但根据现在开心每天在MSN上接受的骚扰来看,比例并不小。原来以为做IT的应该有很高的安全意识,但现在的感觉是做IT的人胆子还是非常大的。连病毒营销式网站都敢输入,那么这些正当的网站大家可能应该更会放心了。

那么这些网站会不会记录你的MSN密码呢?从技术上来讲,肯定是保存了,只不过是时间长短而已(至少会在服务器端内存会保存一段时间吧),有的网站会遵守承诺,在发送完一轮邀请后,会把密码删除,但有一些我猜测应该不会,所以这些将会是你的定时炸弹。指不定什么时候,通过你的MSN进行亲情营销,所以大家在输入自己的MSN密码的时候,一定要慎之又慎。

另外,以于这些服务提供商来说,开心建议他们应该采用Windows Live ID Delegated Authentication来实现这个功能(可以使用C#、VB、Java、PHP、Python、Ruby等语言来实现)。这个功能会帮助你实现以下功能:

1)用户不需要在服务提供商的网站上输入MSN的用户名以及密码,而是在live.com处输入自己的用户名以及密码。增强用户的信任度;

2) 用户可以选择将什么信息与服务提供商进行共享,共享多长时间,以什么权限分享(读取、更新)等;

image

如果您也有自己的SNS网站,建议研究一下这个SDK,而且提供了源代码,实现起来也不难。而且相信会有更多的朋友使用这种方式邀请其MSN上的朋友加入贵网站。:)

@Me功能进入测试期

博客堂刚刚更新到了最新的Build版本,在这个版本当中已经完成了留言管理功能,博主现在可以在后台管理相关的留言(批量删除以及按照IP地址、用户名、关键词查询等功能尚未完善,所以尚未加链接)。同时,向大家隆重介绍@Me功能。

记得博客堂刚刚开始的时候,JGTM(金戈)当时引入一种风气,在留言当中如果是发给某人的话,就在某人的注册名字前加一个@字符,然后再加上想对他/她所说的话,后来我与其他博主也喜欢上了此种功能,在后来留言时也经常使用这种方式,再后来很多常来博客堂的朋友也使用这种功能,而今天,我们正式将此功能给进行了改善,这就是今天要隆重介绍的@Me功能。

@Me功能:在您留言时,您可以输入“@[注册用户名]:”,然后后面输入您想对它所说的话,那么这一份留言除了会在本贴的留言本当中出现以外,还会以邮件的方式发送到该注册用户的邮箱处。可以起到快速通知对方,同时又不会向其它公众曝露您以及对方的邮件地址。以下是该功能需要注意到的一些地方:

1. 所有符号请使用半角符号,尤其是冒号部分,我刚才自己测试的时候就不小心使用了全角符号;

2. 现在博主的留言邮件通知功能默认都设置为了False,也就是新留言不会通过邮件功能通知博主,主要是因为后台管理尚未完成,为了避免博主打扰,所以暂时屏蔽了此功能,如果您想让博主注意,可以以“@[博主]:”的方式通知对方,注意博主的名字并不一定是URL中的Folder的名字,比如我的用户名是“开心就好”,而不是“Joy”。

3. 部分用户在本站并没有使用真实的邮件地址,如果您原来使用了虚假的邮件地址,您不会收到@Me功能的邮件。如果您想修改为正式使用的邮件地址,可以在本贴后留言,我在后台先帮助大家更新信息。

4. @Me功能目前使用了smtp.gmail.com的发送功能,据我所知,好象有发信限制,所以如果超过限制了,后面的@Me留言可能无法收到邮件,我们稍后会使用本地的邮件服务器。另外,@Me功能现在限制为每半小时统一发送邮件,避免过于打扰大家。

大家有什么好的建议,还可以继续交流. 🙂 Please @Me. 🙂

Joycode.MVC Blog Engine Announcement

博客堂从去年最后一天开始升级到Joycode.MVC Blog Engine上面来,现在基本上每两天会进行一个小型版本升级,目前已经完成了大约50%的前端功能,后端功能(管理端)仅完成10%。

本次升级的版本使用了ASP.NET MVC框架,并且准备在ASP.NET MVC正式发布会,将该博客引擎的所有源代码都进行开源。在这次改版当中,学习了OxiteSubtext以及BlogEngine等开源的博客项目,借鉴了其中很多非常棒的设计亮点:比如在实体类设计、事件模型以及泛型使用上学习了BlogEngine,Controller以及Views方式学习了Oxite,而数据库架构借鉴了Subtext。感觉这段时间内获盈颇多。

当然,由于这次改版时间比较匆忙,肯定还是有很多Bug出现(昨天进行版本升级时,在后台管理系统部分就忘了增加关键代码,出现了一个所有用户均可以自由删贴的Bug,幸亏今早自己发现了)。如果您发现了Bug,并且在Codeplex上有帐号,可以直接去Codeplex提交Bug,当然,也可以在本随笔后方直接添加留言。如果有任何功能需求,也可以在本贴后提交。

非常感谢大家对于博客堂的支持。

(另,征集两个博客的管理员以及志愿翻译人员: http://blog.joycode.com/haacked  以及 http://blog.joycode.com/brada,如果您有意协助翻译这两个博客,请在留言中表明,并且进行一下简单的自我介绍,在博客堂升级结束后,我们会将随贴广告位以及侧边栏广告位移交给管理人员以及志愿翻译人员,以作收益)。

(另,所有注册用户的帐号都已经自动激活,本站注册用户功能也已经开放)

恭祝大家新年快乐

终于在2008年最后一天,将博客堂进行了更新。这次更新主要是使用了ASP.NET MVC重新进行了架构,由于目前ASP.NET MVC本身还处于Beta 阶段,而RC应该在下个月初发布,届时本堂还会进行相应更新。

请所有博客堂堂主重新使用Windows Live Writer更新帐号设置。在更新帐号结束后,就可以使用Windows Live Writer直接编写文章了(新建、更新以及删除),目前页面端的后台管理界面还在开发当中,应该在本周末可以发布。

非常抱歉这一年来让各位堂主受累了,由于工作繁忙,前期的改版半途而途,这次开心不会了。最后祝各位新年快乐. 🙂

西雅图的东亚司机

来西雅图N多次了,以前还和同事聊过,希望再来美国出差就不要来西雅图或者Redmond了,毕竟太熟了,而且很没有意思,那些好莱坞电影当中美国丰富的夜生活根本没有,过了下午五点点,所有商店就都关门了,也没有什么好逛的地方,只能在酒店里面发呆。

这次我却发现我还是喜欢上了西雅图,因为我终于在冲动之下还是租了一辆雪佛兰,勇敢得徜徉在西雅图与Redmond之间,在美国开车的感觉真的很爽的:

1. GPS是必备品:在美国开车没有GPS,对于我们东亚司机来说是非常困难的,有了GPS,就根本不需要查看地图。所以这次租车也租了GPS,一路行来太爽了。

2. 注意并道:美国开车的车速非常快,大部分时间都是60Mile以上(换算成公里大约是九十六公里每小时),所以不要轻易并道,而且老美们开车一般很有耐心,即使前面的车非常慢,而旁边车道很快,也不会鸣你笛的,大敢的开就是了。如果要并道,除了看后视镜/侧镜之外,一定要把头扭过来看一下盲区,否则很容易出现事故。这次在五号高速上就遇到一个可能刚满十八岁的小孩在不打方向灯,也未有提示的情况下,不到十米的距离,直接并我的车道,吓出我一身冷汗。

3. 驾照问题:美国是承认中国驾照的,也有一种说法是持护照入境者,在前三十天之内是可以使用国内护照,过后再考美国驾照(美国驾照很好考,但需要待很长时间)。所以大胆去租车吧。

4.加油:美国加油是自助的,只需要刷了信用卡,选了油品种,自己把油嘴放到油箱里面就可以了。所以加油很方便,需要注意的是美国是真正的市场经济,油价每天在变,今天是4.83每加仑,明天可能就是4.23每加仑,完全随着国际油价而变化。另外,注意,每家加油站的油价也不会一样,甚至同一个街区相邻的两个加油站的油价有时候会差几毛钱呢,这可是不小的数字呀。

5. Carpool: 这个好玩,类似于北京的公交专用车道,只要你的车上有两个人或者两个人以上,就进入这儿开快车吧(会标明允许几个人以上的车进入,如果是2+,就是两人以上)。不过大部分时候,Cappool与其它车道速度没有啥区别。上下班高峰时优势才显现出来。

6. Stop Sign: 在这儿,大部分路口都会有Stop Sign。在任何路口,如果遇到Stop Sign,一定要停车,左右观望,确认没有危险才可以走车。如果该路口连红绿灯也没有,那么谁先到谁先走,大家都很礼让。如果遇到有人横穿马路,切记要停下来等人家完全过去再走,即使那人就在人行横道上来回溜达。

还有啥,暂时想不起来了。通过这些天的驾车经历,俺开始热爱美国生活了。:)