Dflying Chen @ joycode

Be an evangelist here.
随笔 - 18, 评论 - 142, 引用 - 1

导航

关于

本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。
欢迎到我的博客园Blog看看,其中内容非常丰富哦:)

标签

每月存档

最新留言

广告

2008年02月28日
almost a year passed and have to do something back.. -_-

joycode blog looks better than before but still many UI bugs left especially in firefox.

posted on 2008-02-28 08:06:28 by dflying  评论(1) 阅读(961)

 
2007年05月30日

《The Architecture Journal》介绍

The Architecture Journal》是微软公司为架构师准备的一顿丰盛的大餐,其中主要探讨进行架构设计时的一些常见问题以及最佳实践,每两个月一期。感兴趣的朋友们可以到Free Print Subscriptions这里免费索取。

这里我摘要翻译了《The Architecture Journal》最新发布的第11期中文章的主要内容,点击标题可以直接阅读内容,希望对朋友们有所帮助。

对于以往期刊,朋友们可以到这里下载其PDF版本(其中有一期提供了中文版,呵呵)。若想为《The Architecture Journal》撰写文章,也可以到这个页面了解更多信息。

 

Mass-Hosting High-Availability Architectures (高可靠性集群架构)

by Shaun Hirschman, Mathew Baldwin, Tito Leverette, and Michael Johnson

可扩展性和高可靠性是服务器集群架构中极为重要的一处。无论作为开源软件工程师、商业解决方案的使用者还是微软公司的IT部门工程师,对于这两个需求都没有什么“放之四海皆真理”的银弹。这篇文章就将专注于探讨创建可扩展、可靠、安全并易于维护的环境所需要的点点滴滴——一切都是为了提供高可靠性(high availability,HA)。

 

Delivering End-to-End High-Productivity Computing(创建端对端的高效能计算)

by Marc Holmes and Simon Cox

在当今,执行复杂的计算操作以及工程计算并不仅仅简单地如购买一台超级计算机那样简单。虽然传统意义上HPC表示的是“高性能计算,high-performance computing”,但我们认为在真实世界中HPC应该表示“高效能计算,high-productivity computing”。“高效能计算”包含的内容非常广泛,例如强大的计算和数据处理能力、良好的工具、技术、平台及其协调、执行和监视过程等。

在实现工程、科学方面“高效能计算”时我们将会遇到很多挑战。本文就将基于一些常见的需求对这类问题进行讨论,力求覆盖最常见的需求,给出供参考的范例。

 

Test-Driven Infrastructures(测试驱动的基础架构设计)

by Mario Cardinal

IT公司的主要职责均可以归为以下两种:“创建”和“运行”软件。这两个方面中的每一个都需要不同的能力。在公司的组织结构图中,“创建”和“运行”之间的隔阂非常大。以架构师的角度,应用程序架构师负责软件开发(创建),而基础框架架构师则专注于软件的执行(运行)。作为应用程序架构师,我认为这两个团队都应该相互学习对方的经验以及最佳实践方法。基础架构团队应该从软件开发团队中学习的一个重要经验就是用测试脚本表达架构具体实现。

 

Architecture Journal Profile: Don Ferguson(Architecture Journal每期一星:Don Ferguson)

本期的Architecture Journal每期一星中,我们荣幸地邀请到了Don Ferguson——一位微软公司的Technical Fellow(这是微软公司中搞技术所能达到的最高水平,待遇、地位等均相当于VP——Dflying注)。我们采访了Don Ferguson几个关于职业发展的问题,希望能够对那些想要成为架构师或对架构感兴趣的朋友们有所帮助。

 

Conquering the Integration Dilemma(克服集成难题)

by Jim Wilt

基于框架的可扩展架构非常流行——从门户网站到电子商务、从内容管理到消息通讯。这样的框架好用吗?大多数情况下确实不错。我们很容易地列举出一大堆基于这样框架所建立的非常成功的应用程序。这类框架提高了生产率、增强了软件质量、带来丰富的功能并减少了占领市场所需要的时间。

这样,为什么集成解决方案不考虑提供同样的改进呢?无论我怎样努力地将集成解决方案与现有工具或框架结合起来,却都很难达到结合Web应用程序或门户网站那样的效果。这正是我对“集成难题(Integration Dilemma)”的定义。

 

Ontology and Taxonomy of Services in a Service-Oriented Architecture (面向服务架构中服务的本体论和分类学)

by Shy Cohen

这篇论文分析了面向服务架构(SOA)中服务的本体论和分类学。其中讨论了各种不同类型服务的本质以及相互关系,描述了通用SOA系统的蓝图,并提供了一些创建和管理服务时的指导建议。本文提出的本体论和分类学有助于为架构师、工程师以及商业决策者提供明晰的服务定义,为不同职责、不同组织的人们之间的交流提供良好的便利条件。

 

Versioning in SOA(在SOA架构中处理版本变化)

by Boris Lublinsky

面向服务架构(Service-oriented architecture,SOA)在当前的企业架构中如日中天。SOA允许若干个开发团队并行开发同一个系统,每个团队可以自行确立其发布、维护的时间表。在本文中,我将分析在SOA架构中处理版本变化的方法,力求在实现服务时不影响到现有功能,为SOA带来更加松散耦合的实现方式。

posted on 2007-05-30 09:12:00 by dflying  评论(11) 阅读(5650)

 
2007年04月19日

借助于CodePlex上开源项目PHP for Microsoft AJAX Library的帮助,我们已经可以在PHP上使用ASP.NET AJAX的很多核心功能了。

 

下载安装

PHP for Microsoft AJAX Library目前仅仅处于Alpha阶段,想实际使用似乎还早了点,只能尝鲜了。

预先需求有PHP 5.2版本,且必须安装了php-json模块。

下载地址:http://www.codeplex.com/phpmsajax/Release/ProjectReleases.aspx?ReleaseId=1692

安装方法:

  1. 下载PHP for Microsoft AJAX Library并解压缩
  2. 下载Microsoft AJAX Library(http://ajax.asp.net
  3. 在PHP Web Service代码中include一下MSAjaxService.php。
  4. 在调用该Web Service的页面中,引入MicrosoftAjax.js文件。

下面来看一个“经典”的场景:调用服务器端方法取得复杂类型。

 

编写Service文件

新建一个php文件,命名为EmployeeService.php。首先写上这一句,include必要的支持代码:

require_once 'MSAjaxService.php';

 

然后定义一个Employee类。四个属性一目了然,不用多说:

class Employee
{
    public $Id;
    public $Name;
    public $Email;
    public $Salary;
 
    function __construct($id, $name, $email, $salary)
    {
        $this->Id = $id;
        $this->Name = $name;
        $this->Email = $email;
        $this->Salary= $salary;
    }
}

 

接下来是EmployeeService类,继承与MSAjaxService.php中的MSAjaxService基类。其中定义一个方法,用来返回一个Employee对象:

class EmployeeService extends MSAjaxService
{
    function GetEmployee()
    {
        return new Employee(12345, "Dflying Chen", "Dflying@some.com", 1000);
    }
}

 

然后新建一个EmployeeService的实例,并且调用基类的ProcessRequest()方法,处理该请求:

$theService = new EmployeeService();
$theService->ProcessRequest();

 

大功告成!

 

编写调用页面

新建一个页面,php或者html均可——程序比较简单。这回我们没了ScriptManager的帮助,引入ASP.NET AJAX客户端脚本文件以及上面的这个Service只能靠手工了。注意EmployeeService.php/js可以得到该Service的客户端代理,和ASP.NET平台上的语法一样:

<head>
    <title>ASP.NET AJAX On PHP Demo</title>
    <script type="text/javascript" src="MicrosoftAjaxLibrary/MicrosoftAjax.js"></script>
    <script type="text/javascript" src="EmployeeService.php/js"></script>
</head>

 

程序的UI部分很简单,按钮用来触发异步调用,<div />用来显示调用结果:

<body>
    <input id="btnGetEmployee" type="button" 
        value="Get an Employee" onclick="return btnGetEmployee_onclick()" />
    <div id="resultDiv">
    </div>
</body>

 

在该按钮的click事件处理函数中,调用该Service,语法也和ASP.NET AJAX中一致,非常方便:

function btnGetEmployee_onclick()
{
    EmployeeService.GetEmployee(onSucceeded);
}

 

在回调函数中,把得到的Employee对象显示到resultDiv中:

function onSucceeded(result)
{
    var sb = new Sys.StringBuilder("Server returns an Employee object: <br />");
    sb.append("Id: " + result.Id + "<br />");
    sb.append("Name: " + result.Name + "<br />");
    sb.append("Email: " + result.Email + "<br />");
    sb.append("Salary: " + result.Salary + "<br />");
 
    $get("resultDiv").innerHTML = sb.toString();
}

 

大功告成!

 

示例程序界面

第一次访问

 

点击Get an Employee按钮后

 

示例程序代码下载

在这里呢:ASPNETAJAXOnPHP.zip

 

好一阵子没用PHP了,生疏了不少。不过照猫画虎还是做出来了,这个项目我觉得非常有前途,各位朋友不妨参与一下。这一段比较忙,没写什么技术文章,这一篇也是草草而为,请朋友们见谅。

posted on 2007-04-19 00:51:00 by dflying  评论(1) 阅读(6201)

 
2007年04月14日

本书已经正式出版,请参考:《ASP.NET Ajax程序设计-第I卷:服务器端ASP.NET 2.0 AJAX Extensions与ASP.NET AJAX Control Toolkit》2007年4月16日 china-pub全国首发!+ 赠书名单已经确定

感谢朋友们的关注、支持与谩骂。如果不出意外的话,下周三《ASP.NET AJAX程序设计 第I卷 服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit》即可在各大网上书店购买,下周末即可在书店看到。特别感谢开心大哥百忙中为本书作序。

 

内容介绍

本卷从最易于理解和使用的部分入手,介绍ASP.NET AJAX框架中能够与传统ASP.NET无缝对接的服务器端部分,包括服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit。这部分内容不需要读者任何的客户端开发知识,只要在Visual Studio中拖拖拽拽即可实现强大的客户端Ajax功能,例如局部页面更新、异步回送、拖拽、动画等,非常适合为现有的ASP.NET 2.0应用程序添加少量的Ajax特性,或是基于ASP.NET 2.0的一些简单Ajax功能的实现。

本卷适合对ASP.NET AJAX有兴趣,并希望对其有更进一步了解的Web开发人员阅读。

 

相关信息

CSDN读书频道连载:http://book.csdn.net/bookfiles/326/

人民邮电出版社和我的赠书活动(朋友们抓紧,现在还有机会,但活动即将结束):http://www.turingbook.com/getajaxbooks/

Dearbook网上书店购买:http://dearbook.com.cn/book/170338

China-pub网上书店购买:http://www.china-pub.com/computers/common/info.asp?id=34372

图书编写的心路历程:http://www.cnblogs.com/dflying/archive/2007/04/03/697606.html

第二卷的章节计划(欢迎各位不吝给出意见):http://www.cnblogs.com/dflying/archive/2007/03/27/689714.html

posted on 2007-04-14 07:51:00 by dflying  评论(4) 阅读(7423)

 
2007年04月03日

4/4更新:赠书活动已经开始,请到这里了解详情


06年3月份,我终于鼓足勇气,在博客园开始了自己的Blog生涯。当时恰逢微软公司的ASP.NET AJAX(开发代号:Atlas)处于CTP阶段,加之业界对Ajax的热情高涨,于是我开始记下一些ASP.NET AJAX在我实际开发/使用中的心得体会。谁知无心栽柳间却得到了众多朋友的关注和支持,于是Blog中的ASP.NET AJAX相关内容一发不可收拾……

转眼间到了06年7月份,人民邮电出版社图灵公司的傅志红老师联系到了我,并给了我翻译第一本ASP.NET AJAX著作(《Atlas基础教程》)的宝贵机会。诚惶诚恐中我开始了第一次真正意义上的“写作生活”……昏天暗地的三个月后,在人民邮电出版社图灵公司和我的共同努力下,《Atlas基础教程》翻译本终于如期面世,半个月的时间首印5000册即告售罄,并荣登Dearbook当月销售榜第二……

可是喜悦总是短暂的,正当我们踌躇满志准备重印的时候,ASP.NET AJAX由CTP转为Beta。噩耗袭来,《Atlas基础教程》一瞬间便成了废纸,重印更是便成了空中楼阁……由此我也“荣获”了2006年CSDN读书频道“百折不挠奖”

…………

 

回溯到06年8月,那是我刚刚完成了《Atlas基础教程》的翻译工作,信心爆棚并信誓旦旦地开始准备编写我自己的原创ASP.NET AJAX图书。年少轻狂、好大喜功的我并不知道写书的艰辛,更是忘乎所以地没有意识到当时ASP.NET AJAX正处于巨变的前夜,洋洋洒洒列出了30多章的一本大书,1000多页的计划。然后还写出了一篇条理清晰的策划,摆事实讲道理让图灵公司同意了我的出版请求。

…………

 

随着时间的推移,我越发感到这本大书的分量,偶尔平静下来,也似乎隐约能够体会到表面平静的ASP.NET AJAX CTP下面隐藏的暗流。感谢同事Xiang YU的苦心劝说,在06年9月份,我决定将这本大书拆分成三卷,以求规避可能发生的风险,并再次用一篇“不容争辩”的策划说服了图灵公司。

没日没夜的06年十一七天长假之后,《ASP.NET Atlas程序设计:第I卷 服务器端》初稿完成。但ASP.NET AJAX仍在CTP中驻足不前,满怀欣喜的我对此并不在乎,抱着第一卷能在06年出版的幻想,立即投入到第二卷的撰写中……

…………

 

“出来混的,迟早要还”。该来的事情还是来了,虽然我曾想到可笑的分卷“规避”——06年10月末,ASP.NET AJAX一夜间从CTP转为了Beta,其改动之大,对我来说不啻于一个晴天霹雳

……

……

无法形容当时的感觉,正如我在《Atlas新版本的发布对我而言无疑是一个晴天霹雳》中写的,“这意味着我和人民邮电出版社图灵公司这三个多月的努力全部付之东流……现在这本书已经没有了任何的参考价值,没有了任何的出版意义……且CTP和Beta 之间的改变如此巨大,让修改原稿几乎成了不可能完成的任务……面对着眼前这一叠厚厚的400多页凝聚了我和出版社心血的成稿,真是让我欲哭无泪,心情沮丧到了极点……”。

好在时间可以治疗一切,朋友们的鼓励也让我逐渐恢复了过来。我开始从头学习曾经那么熟悉,而现在却“面目全非”的ASP.NET AJAX,并开始修改(或者叫重写)我的第一卷书稿

…………

 

06年年末,修改后的第一卷如期完成,想想仍旧可能是国内乃至全球第一本ASP.NET AJAX正式版图书,似乎让我又看到了远方的幻境。我也再一次地松懈了下来……

松懈的日子过得特别快,虽然期间我还翻译了著名的《CSS禅意花园》,不过很快就到了4月份。我还在这里不着急,因为据我了解国外第一本ASP.NET AJAX正式版图书5月份才能出版,做到全球第一本也似乎就是信手拈来么?

…………

 

突然有一天,偶然听到人民邮电出版社的一本ASP.NET AJAX正式版图书即将出版的消息,再次让我重重地摔了一下,第一本梦想再次如泡沫般破碎,自己的松懈也再次酿成苦果……

…………

 

这就是《ASP.NET AJAX程序设计 第I卷 服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit》的故事梗概,其间的酸甜苦辣,所得所失,只有自己才最清楚……不管怎样,一切都过去了。值此新书即将出版的时候,向各位曾经关注过我的朋友真诚地说声谢谢!我也将和图灵公司一起赠送一批新书给购买过《Atlas基础教程》的朋友,略表弥补寸心……具体的赠书活动流程以及相关宣传不日即将出炉,我在Blog上也会随时保持更新。

路漫漫其修远兮,吾将上下而求索……继续写第二卷去了!

4/4更新:赠书活动已经开始,请到这里了解详情

posted on 2007-04-03 02:08:00 by dflying  评论(11) 阅读(6434)

 
2007年03月26日

在Ajax程序中实现传统桌面程序中异常简单的拖放功能却并不是件容易的事情。然而Web上的拖放功能又如此的让人痴迷,所以几乎每个成熟的Ajax类库都提供了自己的一套实现拖放的封装,ASP.NET AJAX (Atlas) 自然也不例外。本文将总结并简要分析ASP.NET AJAX (Atlas) 中拖放功能的6种不同的实现方法,希望能够帮助朋友们选出最适合实际需求的方法。

其中第1到第4种方案,在我的《ASP.NET Ajax程序设计——第I卷:服务器端ASP.NET 2.0 AJAX Extensions与ASP.NET AJAX Control Toolkit》一书中有详细介绍(4月出版),本文中的代码和图示也节选自该书。第5第6种方案,在我的《ASP.NET 2.0 Ajax程序设计——第II卷:客户端Microsoft AJAX Library》一书中将有详细介绍(暂定7月出版)。

不过纵观这些解决方案,我很遗憾的发现,要么是使用简单,可定制能力差,要么就是可定制能力强,但使用起来要写很多代码。希望ASP.NET AJAX (Atlas) 团队能够再接再厉,努力把这个重要功能做得更好。或者我有哪种方法漏掉了,也请朋友们帮忙补充一下。

 

[1] 使用服务器端DragOverlayExtender或客户端DragOverlayBehavior

服务器端的DragOverlayExtender就是靠着客户端DragOverlayBehavior而实现的,前者是后者在服务器端的组件化封装,所以我们将二者放在一起讨论。

这个“拖放”功能很简单,其实这只是个“拖拽”,而没有“投放”。也就是说,你可以随意将某个Panel在页面中拖来拖去,不过却没有什么固定的地方可以“投放”,就像在Windows桌面上拖放某个窗口的位置一样——其实用处不大,也没有提供什么可定制能力。但它使用起来非常简单,也支持将Panel的位置保存在Profile中。

下面是一段DragOverlayExtender的示例代码,至于DragOverlayBehavior的用法,请查看DragOverlayExtender页面生成的HTML代码:

<asp:Login ID="floatLogin" BackColor="white"
  BorderStyle="Solid" BorderColor="black" 
  runat="server">
</asp:Login>
<asp:DragOverlayExtender ID="DragOverlayExtender2" 
  Enabled="true" TargetControlID="floatLogin" 
  runat="server" />

效果如下:

 

[2] 使用服务器端DragPanel

DragPanel是ASP.NET AJAX Control Toolkit中的一个扩展器控件。其功能基本与DragOverlayExtender和DragOverlayBehavior一样,且同样可以保存Panel的位置信息至Profile中。不同之处在于,DragOverlayExtender和DragOverlayBehavior的拖拽实现方式中,鼠标放在整个Panel的任何部分都可以开始拖拽,而DragPanel在进行拖拽时,只有鼠标放在指定的DragHandle(类似于Windows窗口的标题栏部分)中才能开始拖拽。

对于DragHandle的扩展性和实用性,同样不敢恭维。

下面是一段示例代码:

<asp:Panel ID="floatPanel" CssClass="floatPanel" runat="server">
    <asp:Panel ID="floatPanelHandle" CssClass="handle" runat="server">
        窗口的拖动
    </asp:Panel>
    <div class="content">
        在Windows中,对窗口的拖动似乎成了我们习以为常的事情。
        ………………
        ………………
        Window窗口的表现行为一样。
    </div>
</asp:Panel>
<ajaxToolkit:DragPanelExtender ID="dpe" TargetControlID="floatPanel" 
    DragHandleID="floatPanelHandle" runat="server">
</ajaxToolkit:DragPanelExtender>

效果如下:

 

[3] 使用服务器端ReorderList

ASP.NET AJAX Control Toolkit中的ReorderList控件将在页面中呈现出一个由数据绑定自动生成的条目列表。用户可以通过鼠标拖动某一项来直接改变该列表中条目彼此之间的相对位置关系,且在拖动的过程中,ReorderList控件提供了丰富的、可定制的视觉效果。当用户在某个位置放开鼠标之后,ReorderList控件也将同样会自动通知与其绑定的数据源控件,以Ajax的异步或整页回送的同步方式更新服务器端数据。

ReorderList控件的使用比较简单(服务器端控件),功能也相当的丰富,扩展能力也不错。不过仍称不上最灵活,比如我们想把条目在多个ReorderList之间拖放,那么就没办法实现了——因此,不要指望它能实现WebPart那样的功能。

下面是一段示例代码:

<ajaxToolkit:ReorderList ID="musicList" CssClass="musicList" 
  DragHandleAlignment="Left" PostBackOnReorder="false" 
  DataSourceID="musicDataSource" DataKeyField="Id" 
  SortOrderField="Order" runat="server">
    <ItemTemplate>
        <ajaxToolkit:Rating ID="rating" runat="server" 
           CssClass="rating" StarCssClass="ratingStar" 
           FilledStarCssClass="filledRatingStar" EmptyStarCssClass="emptyRatingStar" 
           CurrentRating='<%# Bind("Rating") %>' MaxRating="5" 
           ReadOnly="true">
        </ajaxToolkit:Rating>
    </ItemTemplate>
    <ReorderTemplate>
        <div class="dragDue">
            Drop Here!
        </div>
    </ReorderTemplate>
    <DragHandleTemplate>
        <asp:Label ID="lbTitle" CssClass="dragHandle" 
           ToolTip="Drag Me!" runat="server" Text='<%# Bind("Name") %>'>
        </asp:Label>
    </DragHandleTemplate>
</ajaxToolkit:ReorderList>

效果挺酷的:

 

[4] 使用UpdatePanel与ASP.NET AJAX中的新版本WebPart控件

ASP.NET 2.0中的WebPart相关的控件虽然非常丰富,易于使用且功能强大,我们在程序中也很需要它所提供的拖拽功能,但它却存在着两个致命的缺陷:

  1. 拖放功能只支持IE浏览器。
  2. 每次用户通过拖放改变配件的位置之后,页面总会自动进行回送以保存当前的设定。

其中第一个问题可以通过ASP.NET AJAX中的新版本WebPart控件搞定,第二个问题可以通过添加UpdatePanel搞定,本来在CTP版本中的ASP.NET AJAX里面,这些功能均已经完美实现了。谁知道在最新的Futures CTP中,却又不好用了。

既然现在已经不能用了,也就没必要分析其优点缺点了。不过还是给出一张截图吧,缅怀一下曾经的辉煌(注意,这可是在Firefox中啊!)……

 

[5] 使用客户端DragDropList

DragDropList定义于ASP.NET AJAX Futures CTP中,功能非常强大,且全部在客户端实现,给服务器端减轻了不少的压力。使用DragDropList实现第4种解决方案中的WebPart类似的效果完全没有问题,不过唯一让人感到遗憾的就是,其扩展功能不是很好,用户虽然可以随便将某个Panel从一个区域拖到另一个区域,但拖拽的结果却很难持久化下来……且使用起来也不是那么的容易,效率上更是不敢恭维……总之,这是个很让人矛盾的东西,有些鸡肋的感觉。

我曾经在《使用ASP.NET Atlas实现拖放(Drag & Drop)效果(下)》这篇文章中给出过DragDropList的示例程序,虽然是基于CTP版本的ASP.NET AJAX ,不过实际上并不需要多少修改就能运行于最新版本之上。感兴趣的朋友可以看看,也可以到官方论坛上搜索一下相关的主题。

 

[6] 在客户端自行实现IDragSource和IDropTarget接口

来到了这个解决方案,可以说你对ASP.NET AJAX中的拖拽实现有了一个较深入的了解。上面的DragDropList其实就是实现了IDragSource和IDropTarget接口,其中前者用来定义可以被拖拽的项目,后者用来定义可以被投放的区域。详细理论上的说明,可以参考我的文章《使用ASP.NET Atlas实现拖放(Drag & Drop)效果(上)》,虽然目前已经有所变化,不过仍可以参考。

这种实现方案应该说是最为强大的了,想要什么功能,肯定都能实现。不过实际开发中的难度也不小——甚至可以说是相当复杂,Jeff Prosise的这篇文章《Implementing Drag-Drop in ASP.NET AJAX》给出了一个非常简单的示例程序,感兴趣想要学习的朋友不妨看看……

posted on 2007-03-26 14:29:00 by dflying  评论(12) 阅读(10271)

 
2007年03月07日

[1] Technical Case Study - Infrastructure Management at Microsoft

这是一篇文档,其中描述了微软公司是如何管理其企业内部电子信息系统的,当然用到的都是微软技术。虽然有广告的嫌疑,但是看个新鲜也好,况且文章篇幅也不大。

 

[2] SQL Server 2005 SP2 Update

据说早先发布的SQL Server 2005 SP2包含了一个较为致命的Bug,好在微软亡羊补牢,发布了这个SQL Server 2005 SP2 Update。或许叫做SQL Server 2005 SP2 - SP1更好一些吧:) 辛苦DBA朋友们了……

 

[3] VS2005 SP1 Update for Vista

Vista的发布可真是大动作阿,一时间搞得鸡飞狗跳,原本用得好好的程序现在都不行了。Visual Studio 2005的SP1这不也出了问题。同样是亡羊补牢,各位在Vista下面用VS2005开发的朋友们要注意下载了。

 

[4] Sandcastle - March 2007 Community Technology Preview (CTP)

SandCastle确实是个很酷的东西,用来根据代码中的注释自动生成像模像样的参考文档(详细介绍请参考创建专业级别的类库使用文档——Sandcastle十一月份CTP发布)。三月份的CTP有什么变化呢?我也没仔细看……

 

[5] Visual Studio 2005 Team Foundation Installation Guide

要说VSTS可真是庞然大物阿,安装指南就出了一版又一版。这个200多K的chm就将帮助你安装(注意,是“安装”,不是“使用”)VSTS这个怪兽。

 

[6] Visual Studio 2005 SDK version 4.0

似乎国内卖VS插件的公司不是很多,不过这个Visual Studio 2005的SDK却非常不错——在开发工具中为开发工具编写用来辅助别人开发的软件(这句话要仔细读),听听就很酷!感兴趣的朋友可以试试看。

 

[7] Visual Studio Code Name "Orcas" March 2007 CTP

Visual Studio 2005已经够庞大难以安装的了(看看第5条),下一代的2007可想而知该有多麻烦。不过CTP总归是要发布的,但要是只为了尝个新鲜就要花费几天的时间来安装,那就没什么意思了。好在微软足够“体贴周到”,发布了已经安装好的VPC镜像供我们直接开始爽。不过说实话,光下载这个镜像也足够花费相当长的时间了——足足有4.5G大小!

posted on 2007-03-07 23:49:00 by dflying  评论(18) 阅读(8219)

 
2007年02月12日

胡百敬,具MCT、MCAD、MCSD国际认证执照。并获选为微软“最有价值专家”MVP(Most Valuable Professional)。现任台湾恒逸资讯资深讲师、微软专业顾问、联合报系技术顾问。拥有多年系统分析、设计与实际经验。曾参与许多大型项目开发,主讲微软台湾全省百场以上大型研讨会,同时也是一位活跃于IT媒体的专栏作家。

半年多前,胡百敬老师在Blog中写了一篇文章《撰写信息书籍注意事项》,其中给出了若干条言简意赅的指导意见。看到目前园子里很多朋友正在准备撰写/翻译技术书籍,Dflying希望能够和大家分享一下这几条意见,并总结自己的实际写作经验加上一些心得体会。(以下粗体部分为胡百敬老师的原文)

名声第一,利益第二,不要在别人案头留下骂名。

之所以在第一条就提到了这一点,是因为这是个态度问题。不可否认,对于某些朋友来讲,写书是创造财富的一条行之有效的道路,特别是那些胡拼滥造之作,一个月就可以写出一本——网上搜索一下代码、文章,甚至连调试都没有调就这样写了出来;或者是长篇累牍的代码,从<html>到</html>一字不少;更有甚者直接引用大段的官方文档……

自己的名声,要一点一滴的珍惜。书籍一旦出版,就像刻在了石头上,可能流芳百世,也可能遗臭万年。动笔之前,先端正我们的心态。

书籍定位清楚,没有适合所有人的书。

很多朋友,包括我在内,在第一次写作的时候都喜欢长篇大论,非要事无巨细将所有东西都涵盖才好。然而贪多嚼不烂,不要妄图写出百科全书——即使要写百科全书,也不会是你的第一本书。现在软件开发都讲究敏捷,小迭代,写书的时候难道不也应该参考一下么?太多太长,主题往往淹没在滚滚文字中,难免最后样样通、样样松。

章节目录由简而深,必要内容放在前面章节,选择性内容放在后方章节。

这一点是人之常情,符合人类(即使是动物也如此)的理解习惯,没什么好说的。最完美的就是,某一张开始承接上一章,结尾引出下一章。

第一章最后写。

第一章往往起到统领全书的作用:若是介绍一个框架,那么这一章就将大概把框架的特性,结合本书所讲的内容列出来。若是介绍语言,那么则会逐一阐述语言的特性、历史、发展等。若是开始的时候就写第一章,那么难免随着写书的过程不停地修改、调整,造成不必要的时间浪费。

我在撰写《ASP.NET AJAX程序设计》一书时,就是没有经验先写的第一章。刚刚察看了版本控制系统,这一章已经有了奖金200个版本,几乎每天都要修改……比较一下最初版本和最终版本,早已面目全非……

不要有漫画书的状况出现。在图与图间最好加一些引述,说明。否则书会像漫画书,读者不容易连续想象图文之间的关系。

每一张图示都要在正文中有所提及。每一张图示的说明都要表达明确的意思,不要写“图3 代码3-4的运行结果”,而要写“图3 将XXX属性设置为YYY之后,页面将显示ZZZ”。还有,珍惜读者的¥或$,只添加必要的图示和代码——这两者非常占版面。

具体不要抽象,分析比较不要批评。

在比较的时候,不要简单地列出一个表格:A高、B低、C一般……要具体地分析出是什么造成了这样的结果。

参与比较的各个项目,往往在某些领域、某些时期都有独到的优势,很难说出谁就一定比谁好。所谓萝卜白菜,各有所爱,特别是针对不同平台、框架的比较,更要格外小心,力求保持中立、客观。若是一本讲.NET的书中不停地带有诋毁Java的词句,那么相信谁都不会愿意看。

不要中英混杂,每小节第一次引用的术语,英文连同中译一起出现,以后仅出现中译。

很多朋友在实际工作,或是在写Blog的时候经常喜欢中英文混杂,当然我不是批评这样的用法。但毕竟图书——白纸黑字印出来的——需要体现严肃性。“写code的时候不test,checkin了之后build break你才后悔”——这样的话万万不能出现在书稿中!

但对于某些专业词汇,特别是在翻译时遇到的中文译名不是那么流行或是有争议的词汇,则在括号中保留原词不失为一个好办法。如果可能,在书中还要给出统一的关键词翻译参考,要是能够顺带解释一下为什么选择这种译法,那就更是锦上添花了。

引用在线说明时,要小心 Review 其内容,一般翻译错误很多,最好能参阅原文在线说明。

这一点比较明确,就不再多说了。不过要提及的是,引用任何非原创的作品都要得到明确的版权许可,以免日后带来不必要的麻烦。

翻译时,注意中英文习惯不同,少用定冠词(如“一个”),人称代名词(你、我、他),被动式。尽量「意译」,而不要「直译」。

特别要提到的尽量避免被动语态,中文很少很少使用。

说到意译,更要把握好不同文化之间的差异,有些外国人都看得懂的俗语、或是他们文化中的幽默,中国读者却根本摸不到头脑,这是一定要加上足够的译者注,或是干脆用中国的等同故事替代。

补充一条:英文中的长句子,特别是定语重句一定要拆开,不要让人看到译文之后都能联想到原文。

每日要有习惯性产出,脱稿是从第一天开始,不要妄想赶进度。

坚持——这是写作中最重要的一条。写书不是写Blog,心情好我就一天一篇,甚至一天几篇,心情不好我就一个月都不管。写书讲究的是涓涓细流,积少成多。人都是很懒的,都会为自己找到很多借口,有了第一次脱稿,那么就会有第二次,第三次……好比一个函数有几个间断点没什么问题,但要是间断点太多,就不可积了。若不是对你的毅力非常有把握,那么最好把你预先计划的撰写时间乘以二!

写完一章后,隔些日子重读内容,务求文字精简,图像精致。

慢工出细活,一点都不假。不要写完一章马上开始校对,等过了半个月再重新来看,你会很快发现自己当初的幼稚……

文笔是苦练出来的,没有浑然天成。说话与写作是两回事。

多看书,多看技术书,看看人家是怎么写出来的。把代码写好并不等于能把书写清楚,把牛皮吹破也不见得下笔就有神。 

找个有经验与耐心的人审稿。

书写完了,还要留一点时间给别人看看。一个人的能力总归有限,错误、误解都是在所难免,要不写代码的时候怎么要Code Review呢?

posted on 2007-02-12 21:25:00 by dflying  评论(6) 阅读(5998)

 
2006年12月28日

感谢CrazyCoder朋友的热心,这几篇文章均由他翻译完成。更多关于NLog的中文文章,请参考《NLog文章系列》。

  1. NLog文章系列——如何排错
  2. NLog文章系列——如何写自定义布局生成器(Layout Renderer)
  3. NLog文章系列——如何编写自定义的过滤器(Filter)
  4. NLog文章系列——如何优化日志性能

最近忙于翻译《The Zen of CSS Design》,争取在春节前上市(CSDN的介绍页面)。实在无暇顾及太多Blog,见谅……

Everything's gonna be fine...

posted on 2006-12-28 00:02:00 by dflying  评论(8) 阅读(5271)

 
2006年12月01日

微软公司昨天发布了一个Windows Communication Foundation (WCF)和Windows CardSpace的示例程序包,内容极为丰富,从最简单的Hello World到复杂的解决方案一应俱全。对于Windows Communication Foundation (WCF)和Windows CardSpace这两个新东西而言,这些示例程序无疑就是最好的学习资源。

下载地址http://www.microsoft.com/downloads/details.aspx?FamilyID=0043041f-95d6-4eb7-966a-c21a737e193a&DisplayLang=en

这是部分目录截图:

 

顺便简单介绍一下这两个东西:

Windows Communication Foundation (WCF)(开发代号:Indigo)是微软公司在.NET 3.0下的SOA框架,它也在微软公司的规划中占有非常重要的位置。无论是在组织内部还是组织之间,应用程序通信都是现代软件的基本功能,.NET Framework 3.0 用WCF以SOA的方式提供了程序之间沟通的渠道。下面是官方网站上的介绍:

The Windows Communication Foundation (previously codenamed "Indigo") is Microsoft's unified framework for building secure, reliable, transacted, and interoperable distributed applications.

关于Windows Communication Foundation (WCF),还有如下资源也不错:

  1. Windows Communication Foundation官方网站: http://wcf.netfx3.com/
  2. Bruce Zhang《WCF之旅》系列
  3. 这个PPT也不错,适合快速了解一下:http://wcf.netfx3.com/files/folders/6680/download.aspx

 

Windows CardSpace(开发代号:InfoCard)是微软公司新一代的统一数字身份标识控件,旨在解决现今网络上各种身份认证的复杂性、不安全性等问题。这是官方网站上的介绍:

Windows CardSpace enables users to provide their digital identities in a familiar, secure and easy way. In the physical world we use business cards, credit cards and membership cards. Online with CardSpace we use a variety of virtual cards to identify ourselves, each retrieving data from an identity provider. Don't struggle with usernames and passwords, just choose an information card!

这篇文章对Windows CardSpace有一些较为详细的介绍,尚不了解的朋友也可以借此入门。

posted on 2006-12-01 11:36:00 by dflying  评论(7) 阅读(7805)

 
2006年11月29日

随着Office System 2007的发布,微软公司的新一代企业业务平台变得前所未有的强大。Office相关开发也正逐渐变得炙手可热。为了帮助开发者更好地了解并基于Office System 2007进行开发,微软公司将发布一系列有关Office System 2007的参考文档以及相关辅助软件。

昨天微软公司就发布了如下三个与Office System 2007相关的软件和参考文档:

 

[1] 2007 Office System Document: Compliance Features in the 2007 Microsoft Office System

下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=d64dfb49-aa29-4a4b-8f5a-32c922e850ca&DisplayLang=en

这篇洋洋洒洒的67页的文档全面介绍了Office System 2007的适应性以及扩展性能力。每一个应用了Office System 2007的企业都将会有它自己的个性化、需要定制的需求。这份文档就将告诉我们Office System 2007开发者什么样的需求是能够实现的,应该怎样实现等相关内容。文档份为如下几大部分:

  1. Introduction
  2. An Overview of Regulatory Compliance
  3. The 2007 Microsoft Office System Products
  4. Compliance Capabilities in the 2007 Microsoft Office System
  5. Compliance Extensibility Opportunities
  6. Development Tools for Extending Office and Windows SharePoint Services
  7. Summary
  8. Appendix I: Resources
  9. Appendix II: References

如果你打算定制出一套自己的Office System 2007系统,那么这份文档绝对不容错过。

 

[2] 2007 Office System Document: Lists of Control IDs

下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=4329d9e9-4d11-46a5-898d-23e4f331e9ae&DisplayLang=en

Office System 2007的UI中引入了一个新东西——Ribbon。虽然对于这个Ribbon,使用者仁者见仁,众说纷纭,不过作为开发者,我们还是有必要赶上发展的脚步。Ribbon这个东西相关的开发也设计得独具匠心,具体内容就不详细说了,有兴趣的朋友可以先参考一下这篇MSDN文档:Customizing the Office (2007) Ribbon User Interface for Developers (Part 1 of 3) 。

微软公司发布的这个软件其实是一个自解压的压缩文件,解压后将得到24个Excel文件,其中分别列出了Office System 2007系列软件中使用的内建Ribbon的ID,方便我们开发时参考。

下图就显示了Word中内建的部分Ribbon的ID:

 

[3] 2007 Office System Sample: Open XML File Format Code Snippets for Visual Studio 2005

下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=8d46c01f-e3f6-4069-869d-90b8b096b556&DisplayLang=en

不得不承认,随着Office System 2007的发布,Office开发变得更加简化,提供的API也更加丰富。不过由于Office System 2007本身的复杂性,对于初学者来说,掌握Office System 2007开发仍旧不是一件容易的事情。甚至对于一些最常用功能的实现都无所适从。

微软公司发布的这个Visual Studio 2005的Code Snippets集合就提供了一系列关于Office System 2007开发中经常用到的功能的代码片断。关于Visual Studio 2005的Code Snippets,其实就是一系列常用的代码片断,可以看作是一种代码级别的复用。这里不再多谈Code Snippets,如果你还不是很了解这个强大功能,请参考这篇MSDN文章:How to: Manage Code Snippets

下面就是在Visual Studio 2005中使用该Code Snippets时的界面:

如上图所示,选择了“Excel: Get sheet info”之后,Code Snippets将自动插入如下一大段代码:

public struct SheetInfo
{
    public string SheetName;
    public string SheetType;
 
    public SheetInfo(string SheetName, string SheetType)
    {
        this.SheetName = SheetName;
        this.SheetType = SheetType;
    }
}
 
public List<SheetInfo> XLGetSheetInfo(string fileName)
{
    //  Return a generic list containing info about all the sheets.        
    const string documentRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
 
    //  Fill this collection with a list of all the sheets
    List<SheetInfo> sheets = new List<SheetInfo>();
 
    using (Package xlPackage = Package.Open(fileName, FileMode.Open, FileAccess.Read))
    {
        //  Get the main document part (workbook.xml).
        foreach (System.IO.Packaging.PackageRelationship relationship in xlPackage.GetRelationshipsByType(documentRelationshipType))
        {
            //  There should only be one document part in the package. 
            Uri documentUri = PackUriHelper.ResolvePartUri(new Uri("/", UriKind.Relative), relationship.TargetUri);
            PackagePart documentPart = xlPackage.GetPart(documentUri);
 
            //  Load the contents of the workbook, which is all you 
            //  need to retrieve the names and types of the sheets:
            XmlDocument doc = new XmlDocument();
            doc.Load(documentPart.GetStream());
 
            //  Create a NamespaceManager to handle the default namespace, 
            //  and create a prefix for the default namespace:
            XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable);
            nsManager.AddNamespace("default", doc.DocumentElement.NamespaceURI);
 
            //  Loop through all the nodes, retrieving the information
            //  about each sheet:
            foreach (System.Xml.XmlNode node in doc.SelectNodes("//default:sheets/default:sheet", nsManager))
            {
                string sheetName = string.Empty;
                string sheetType = "worksheet";
 
                sheetName = node.Attributes["name"].Value;
                XmlAttribute typeAttr = node.Attributes["type"];
                if (typeAttr != null)
                {
                    sheetType = typeAttr.Value;
                }
                sheets.Add(new SheetInfo(sheetName, sheetType));
            }
 
            //  There's only one document part.
            break;
        }
    }
    return sheets;
}

我们既可以直接使用这些已经生成好了的功能,也可以通过查看代码了解、学习Office System 2007的常用操作,简直爽呆了!

posted on 2006-11-29 22:46:00 by dflying  评论(3) 阅读(8001)

 
2006年11月26日

亚马逊网上商店的大名相信所有人都听过,随着2006年岁末的来临,亚马逊给出了今年一年来读者最喜欢的10本计算机图书的排行榜。说是“读者最喜欢的(Top 10 Customers' Favorites)”,其实也应该就是销售榜吧。榜上有名的10本中,我们对一些已经耳熟能详,且国内已经发售了中文版,也自然还有一些是我们不太熟悉的。

这里我就将这10本书一一列出,并加上一些我的陋见,希望能对朋友们的选择、阅读、学习有所帮助。当然,从这份榜单中,我们似乎也能看出这一年来的技术热点,甚至也可以悟出一些对未来走势的预测。

 

[1] Ajax in Action(中文版:《Ajax实战》)

作者Dave Crane

出版商:Manning Publications (中文版:人民邮电出版社)

出版日期:October 1, 2005

Dflying三言两语:意料当中(或者可以说意料之外)地,Ajax in Action夺得了年度总冠军。似乎这正是今年热炒的Ajax的最有力的见证吧。这本书我读过英文版和中文版两个版本,个人觉得似乎并不像所谓“Ajax圣经”那么的夸张的精彩。不过客观来说,确实是一本深入浅出的Ajax书籍,限于Ajax实现的多样性以及Ajax技术的复杂性,这本书自然无法在小小的篇幅中逐一展开仔细论述。本书有些地方显得简明扼要,有些地方却略显拖沓,但总体说来,仍旧无愧于目前Ajax的第一号好书(我的老板也这么评价)。无论是新手入门还是已经轻车熟路,这本书中都能让你对Ajax开发有一些新的想法。若你想现在开始Ajax之旅,那么这本书则毫无疑问地将成为你的不二之选。本书的中文版由李锟老师组织ajaxcn.org一起翻译,并由人民邮电出版社图灵公司出版,实为细心之作,同样非常值得推荐。

 

[2] CSS Mastery: Advanced Web Standards Solutions(中文版:《精通CSS--高级Web标准解决方案》) 

作者Andy Budd

出版商:friends of ED (中文版:人民邮电出版社)

出版日期:February 13, 2006

Dflying三言两语:Ajax在今年的火爆似乎造成了一系列关于Web,特别是标准化的Web技术图书的热销。虽然CSS并不是一个很新的技术,然而多年以来,CSS领域的“经典图书”却一直虚位以待。这样,CSS的复杂性、其中蕴含的种种鲜为人知的技巧以及Web标准化中对CSS的愈加依赖也让这本较为深入的书非常受读者欢迎。我曾粗读过本书,对于一些CSS的常见问题,特别是基于Web标准开发时所用到的CSS,书中都有非常不错的介绍。如果你刚刚不得已抛弃了“习惯好用”的<table>而转向“让人郁闷”的<div>,那么本书毫无疑问将能够让你尽快从郁闷中再次快乐起来。本书的中文版同样由人民邮电出版社图灵公司组织翻译,虽然我没有读过中文版,但对于图灵公司的作品,仍旧一如既往地非常信任。相信中文版不会让各位读者失望的。

 

[3] Agile Web Development with Rails: A Pragmatic Guide

作者Dave Thomas

出版商:Pragmatic Bookshelf

出版日期:July 1, 2005

Dflying三言两语:Ruby on Rails同样是今年的亮点之一,说RoR挽救了Ruby一点都不足为过。借助Web 2.0的热度,RoR的快速开发(号称开发速度提高10倍!?)显然成为各种追逐新技术、追逐拥抱变化能力的公司的掌上明珠(看看现在网站版本更新的速度以及那“永远去不掉的Beta Logo”)。RoR似乎也俨然成为了今后软件发展的潮流——更加自动化、更加简易的软件开发模式如同共产主义社会一样让我们向往。本书则正在这个时候应运而生,我曾粗浅了解过一段时间的RoR,也曾读过此书,如果你仍旧比较传统,不够“敏捷”,迫切地希望能有一本捧在手中细细研读的图书,那么此书将会非常让你满意。试想一下通过一种最传统的信息传播媒介去学习一门发展最快的技术,会是怎样一种奇特的感觉呢?

 

[4] SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055) (Certification Press Study Guides) 

作者Katherine Sierra

出版商:McGraw-Hill Osborne Media

出版日期:December 21, 2005

Dflying三言两语:不知道为何这本认证考试用书也如此地畅销,难道老外也是“认证不认人”的?不过我仍对几年前学习Java认证时使用的这本教材的兄弟图书印象深厚。我知道了怎样的一本书能够“讲明白”某件东西,而不是反过来“讲糊涂”某件东西。回顾一下国内的那些“故作深奥”的教科书(特别我要提到的是我在大学时编译原理课本,绝对让我永生难以忘怀……),差距就是这么明显。

 

[5] Dreamweaver 8: The Missing Manual

作者David Sawyer McFarland

出版商:Pogue Press

出版日期:December 22, 2005

Dflying三言两语:1998年,我开始接触Web程序设计,当然,那时的“Web程序设计”主要还是以“做网页”为主。Frontpage让我从傻瓜直至初入门道,又很快就陷入到它生成的垃圾HTML中,满屏的<font>标签曾将我郁闷不已。然而当时我的水平还很难手工书写复杂的HTML,幸运的是,1999年我接触到了当时还很稚嫩的Dreamweaver 3,虽然充满了Bug且对中文支持非常不好,然而在我眼中却已经将Frontpage远远地抛在了后面。Dreamweaver 4、5一直陪伴我走过了很长的日子,那时我的每一个网站中都有它的身影。随着后续版本添加的对PHP、ASP等编程语言的支持,Dreamweaver 似乎依稀有了一统天下Web开发IDE的影子。可是世事难料,转眼间就物是人非,Dreamweaver的版本号已经走到了8,Macromedia也已经皈依了Adobe。而今天,让我欣喜地看到了这本讲述Dreamweaver的图书也排到了前十名的榜单中。虽然我未曾读过此书,但从书名“missing manual”中,我们仍旧可以分辨出Dreamweaver的生机和活力以及开发者社区对其的厚爱。让我们祝愿Dreamweaver一路走好!

 

[6] The Photoshop Channels Book

作者Scott Kelby

出版商:Peachpit Press

出版日期:February 14, 2006

Dflying三言两语:同样是1998年,我在接触Web开发时也不可避免地开始学习图形图像处理,那时的Photoshop已经成为了领域内的霸主,我则怀着敬畏的心情开始了学习。日子一天天过去,Photoshop的强大功能(特别是其中的滤镜插件)让我深深陶醉于其中。2001年,我幸运地通过了Adobe的认证考试,成为了一名ACCD,那时的版本似乎还是5.0……Photoshop中的通道(也就是本书的主题——Channel)是学习以及使用过程中的一个难点,当然这个东西也非常的有用。真正的Photoshop高手,没有一个不把通道当作最重要的武器的,网络上如此多PS图片,每一张都少不了通道的功劳。我没有读过这本书,但看到它在榜单上的位置,仍旧让我有充分的理由相信其中的内容。熟练掌握通道使用技巧是每一个Photoshop专家的必要条件,如果你正处于这样的阶段,那么这本书应该非常值得一读。

 

[7] CLR via C#, Second Edition(中文版:《框架设计(第2版):CLR Via C#》)

作者Jeffrey Richter

出版商:Microsoft Press (中文版:清华大学出版社)

出版日期:February 22, 2006

Dflying三言两语:经典总归是经典,虽然改了名字,本书的风华却依旧不减当年。本书的第一版陪伴了我学习.NET的日日夜夜,我也正是由于这一本书对.NET开始了一段时间的痴迷,也对Jeffrey Richter和李建忠老师产生了深深的崇拜。学习过程中的一本好书,往往会成就一个天才(当然,不是说我自己-_-b),而一本坏书,则难免造就一个蠢才。虽然没有读过第二版,但我仍坚信本书就是造就出一批.NET专家的温床。如果你迫切地想了解.NET的精髓和基础——CLR,那么这本书就将是照亮你黑暗的火把。近日,本书的中文译本也由清华大学出版社出版,从我心里深处,很可惜李建忠老师未能执笔其中,新译者也让对本书的评论变得褒贬不一,不过作为我个人来讲,还是希望朋友们能够多一些宽容,特别是对于一些初出茅庐的朋友——多一些关心,多一些包容,或许就能让幼苗有了成长的空间……让我们相信一切都将变得更好。

 

[8] Adobe Photoshop Restoration & Retouching (3rd Edition) (Voices That Matter)

作者Katrin Eismann

出版商:New Riders Press

出版日期:November 17, 2005

Dflying三言两语:正如每一个基督教徒都必被一本《圣经》一样,这是一本每一个Photoshop使用者都必须阅读的书!本书的第一版就极为经典,当初无愧是我最好的Photoshop老师。现在推出的第三版基本都被重写,更是完全跟上了Photoshop CS2的变化,虽然我不曾亲自体验过第三版,但它占据的排行榜位置依旧印证了我的信心。如果你正开始学习Photoshop,那么除了这本书之外,还有什么是值得阅读的呢?

 

[9] iWoz: From Computer Geek to Cult Icon: How I Invented the Personal Computer, Co-Founded Apple, and Had Fun Doing It

作者Steve WozniakGina Smith

出版商:W. W. Norton

出版日期:September 25, 2006

Dflying三言两语:这似乎是一本讲述Apple计算机发明过程,同样也是发展历史的一本书,专业和非专业的朋友都适合阅读。不过这也是一本需要一定的背景,特别是文化背景才能够深入理解的书,如果能融入其中,想必一定会觉得非常有趣吧。Guy Kawasaki评价说“Every engineer—and certainly every engineering student—should read this book….It is, in a nutshell, the engineer's manifesto.”可见其分量。这本书已经被我添加到阅读计划当中,希望不会让我失望。

 

[10] Software Estimation: Demystifying the Black Art (Best Practices (Microsoft))

作者Steve McConnell

出版商:Microsoft Press

出版日期:March 1, 2006

Dflying三言两语:Microsoft Press出版的书一直很多,不过很遗憾,大多数都是中庸平凡之流。然而这本书却似乎不那么平凡,这是一本与项目管理、成本时间估算有着密切联系的书,其中触及了软件开发过程中很多旁人不愿、不能甚至不敢触及的东西——“Software Estimation focuses on the art of software estimation and provides a proven set of procedures and heuristics that software developers, technical leads, and project managers can apply to their projects.”(引自Amazon图书介绍)。仔细阅读一下本书,相信每个人都能够受到一些启发,产生一些新的想法。

posted on 2006-11-26 20:51:00 by dflying  评论(6) 阅读(7279)

 

前面几天我总结了一些ASP.NET AJAX(开发代号Atlas)重要参考资源大收集,近来偶尔发现了一个英文站点,也总结了一下ASP.NET AJAX(Atlas)的学习资源。粗略看了一下,比我前一个总结的内容丰富多了,实在不敢独享,搬过来希望能和朋友们分享。

注意,下面有些内容是针对CTP版本的ASP.NET AJAX,现在已经有些过时,还请朋友们多加小心,去伪存真。

 

ASP.NET AJAX Quick Start

  1. Definition: ASP.NET (SearchSQLServer.com)
  2. Definition: Ajax (SearchVB.com)
  3. Definition: Atlas (SearchVB.com)
  4. Podcast: Mike Gunderloy on the pros and cons of Atlas (SearchVB.com)
  5. Download: ASP.NET AJAX v1.0 beta (Microsoft)
  6. Overview: ASP.NETAJAX (Microsoft)
  7. Tutorial: "Hello World" in Atlas (Coding Atlas)

 

ASP.NET AJAX Basics

  1. Article: A Primer on Microsoft Atlas (Ajax World)
  2. Tutorial: An Introduction to Ajax and Atlas with ASP.NET 2.0 (Erich Peterson, 4guysfromrolla.com)
  3. Tutorial: Asynchronous Communication Layer Overview (Microsoft)
  4. Tutorial: Partial-Page Rendering Overview (Microsoft)
  5. Tutorial: How to install ASP.NET AJAX (Microsoft)
  6. Tutorial: Tips for new ASP.NET AJAX users (Microsoft)
  7. Tutorial: Common ASP.NET AJAX development scenarios (Microsoft)
  8. Download: ASP.NET AJAX sample applications (Microsoft)

 

ASP.NET AJAX Tutorials

  1. Tutorial: Atlas at last! (Adnan Farooq Hashmi) -- Part 1 | Part 2 | Part 3
  2. Tutorial: Beginning Atlas series: Why Atlas? (Omar Al Zabir)
    Introduction | Part 1 | Part 2 | Part 3 | Part 4 | Part 5 | Part 6 | Part 7
  3. Tutorial: ASP.NET Atlas Powers the AJAX-Style Sites You've Been Waiting For (Microsoft)
  4. Tutorial: Enhancing Existing Applications with ASP.NET AJAX Extensions (Microsoft)
  5. Tutorial: Using the UpdatePanel Control in ASP.NET AJAX Applications (Microsoft)
  6. Tutorial: Customizing Partial-Page Rendering with Client Scripting (Microsoft)
  7. Tutorial: Using Timer Control to Enable Partial-Page Updates (Microsoft)
  8. Tutorial: Creating Custom Client Scripts in ASP.NET AJAX (Microsoft)
  9. Tutorial: Call a Web Service from JavaScript using Server Types (Microsoft)
  10. Tutorial: Making JavaScript easier (Microsoft)
  11. Tutorial: Performing data access (Microsoft)
  12. Tutorial: Controls and UI (Microsoft)
  13. Tutorial: Call a Web Service with ASP.NET AJAX without writing client-side scripts (Fredrik Normen)
  14. Tutorial: Using Atlas with PHP (Shanku Niyogi)
  15. Tutorial: Update Panel: Having fun with errors (Luis Abreu)
  16. Tutorial: What's up with UpdatePanels and how come nothing works? (Eilon Lipton)
  17. Tutorial: Cool UI Templating Technique to use with ASP.NET AJAX for non-UpdatePanel scenarios (Scott Guthrie)
  18. Tutorial: Write controls compatible with UpdatePanel without linking to the ASP.NET AJAX DLL (Eilon Lipton)
  19. Tutorial: Sliding Task Lists project -- Building an Atlas application from a scratch (Coding Atlas)
  20. Tutorial: Sliding Task Lists project (day 1) -- Building a user interface (Coding Atlas)
  21. Tutorial: Sliding Task Lists project (day 2) -- Implementing ASP.NET 2.0 membership provider (Coding Atlas)
  22. Tutorial: Sliding Task Lists project (day 3) -- Using ModalPopup extender to create panels for adding new tasks (Coding Atlas)
  23. Tutorial: Sliding Task Lists project (day 4) -- Database tables and saving new tasks with Atlas (Coding Atlas)
  24. Tutorial: Sliding Task Lists project (day 5) -- Reorder Lists and client side update panel refresh (Coding Atlas)

 

ASP.NET AJAX Articles and References

  1. Article: Atlas renamed ASP.NET AJAX, to ship by end of year (SearchVB.com)
  2. Article: Atlas: Think before you lift (SearchVB.com)
  3. Article: Microsoft unleashes Atlas at MIX06 (SearchVB.com)
  4. Article: Atlas means "Ajax for the masses" (SearchVB.com)
  5. Article: Microsoft's Atlas -- Ajax in a box (Way.Nu)
  6. Article: Atlas Programming Model (Nikhil Kothari)
  7. Article: InPlaceEditing with Atlas Behaviors (Nikhil Kothari)
  8. Article: InPlaceEditing - Implementing Script Behaviors in Atlas (Nikhil Kothari)
  9. Article: Back Button Support for Atlas UpdatePanels (Nikhil Kothari)
  10. Article: Script Loading Tips (Nikhil Kothari)
  11. Article: Using Atlas Update Panel Server Control (Code4Vista)
  12. Article: From closures to prototypes (Bertrand Le Roy) -- Part 1 | Part 2
  13. Article: How to add Atlas to an existing site (Jay Kimble, CodeBetter.com)
  14. Article: Add "Atlas" controls to the Visual Studio 2005 Toolbox (Public Sector Developer Weblog)
  15. Article: Dragging and dropping with ASP.NET 2.0 and Atlas (The Code Project)
  16. Article: Implementing Ajax Using ASP.NET 1.1 (15 Seconds)
  17. Reference: ASP.NET AJAX client class library (Microsoft)
  18. Reference: Client-Side Type System & Reflection API Overview (Microsoft)
  19. Reference: Client-Side Error Type Extensions API Overview (Microsoft)
  20. Reference: ASP.NET AJAX server class library (Microsoft)

 

ASP.NET AJAX "How Do I?" Videos

  1. Get Started with Atlas: Watch | Download
  2. Get Started with the Atlas Control Toolkit: Watch | Download
  3. Use the Atlas CascadingDropDown Control Extender: Watch | Download
  4. Implement Dynamic Partial-Page Updates with Atlas: Watch | Download
  5. Make Client-Side Network Callbacks with Atlas: Watch | Download
  6. Write a Custom Atlas Control Extender: Watch | Download
  7. Add Atlas Features to an Existing Web Application: Watch | Download
  8. Atlas Enable an Existing Web Service: Watch | Download
  9. Use the Atlas TextBoxWatermark Control Extender: Watch | Download
  10. Use the Atlas Popup Control Extender: Watch | Download
  11. Use the Atlas ModalPopup Extender Control: Watch | Download
  12. Use the Atlas AlwaysVisible Control Extender: Watch | Download
  13. Use the Atlas Accordion Control: Watch | Download
  14. Use the Atlas Client Library Controls: Watch | Download
  15. Use the Atlas Collapsible Panel Extender: Watch | Download
  16. Use the Atlas Draggable Panel Extender: Watch | Download
  17. Build a Mashup using Microsoft Atlas: Watch | Download
  18. Use the Atlas DynamicPopulate Extender: Watch | Download
  19. Use the Atlas FilteredTextbox Extender: Watch | Download
  20. Use the ASP.NET AJAX HoverMenu Extender: Watch | Download
  21. Use the ASP.NET AJAX ToggleButton Extender: Watch | Download
  22. Use an ASP.NET AJAX ScriptManagerProxy: Watch | Download
  23. Use the ASP.NET AJAX DropShadow Extender: Watch | Download
  24. Use the ASP.NET AJAX PasswordStrength Extender: Watch | Download
  25. Use the ASP.NET AJAX RoundedCorners Extender: Watch | Download

 

More Webcasts and Videos

  1. Webcast: Creating a customer view with Atlas (Wahlin Consulting)
  2. Webcast: Simplifying XMLHTTP programming with ASP.NET Atlas (Channel 9) -- Part 1 | Part 2
  3. Webcast: Enabling Partial Page Updates with the ASP.NET Atlas UpdatePanel (Channel 9)
  4. Webcast: Attaching Client Functionality to ASP.NET Server Controls using ASP.NET Atlas (Channel 9)
  5. Webcast: AJAX Enabling ASP.NET 2.0 Web Parts with Atlas (Channel 9)
  6. Video: Atlas Technical Overview (Microsoft)
  7. Video: Mashup 101: Virtual Earth -- Part 1 | Part 2 (Microsoft)
  8. Video: Control Toolkit (Microsoft)
  9. Video The Ajax Experience (Microsoft)
  10. Video: Technology Preview (Microsoft)
  11. Video: Application Demos (Microsoft)
  12. Video: First Look (Microsoft)

 

Working with ASP.NET AJAX Controls

  1. ASP.NET AJAX Control Toolkit home page (Microsoft)
  2. Article: With Microsoft's Atlas toolkit, no wait for Ajax controls (SearchVB.com)
  3. Article: Atlas Control Toolkit: A large, open-source framework (SearchVB.com)
  4. Article: Atlas Control Toolkit (And Why It Is Really Cool) (Scott Guthrie)
  5. Article: Testing the Toolkit (Shawn Burke)
  6. Article: Free Atlas Control Toolkit Test Automation Harness Published (Scott Guthrie)
  7. Control: Introducing Drag-Drop and Animations with Microsoft Atlas (Shiju Varghese)
  8. Control: Microsoft Atlas Control Extender -- Focus (Chris Crowe)
  9. Control: Master / Detail drop down lists -- client side data binding (Coding Atlas)
  10. Control: Always visible loading image (Coding Atlas)
  11. Control: ReorderList control (Coding Atlas)
  12. Control: Atlas ScriptManager Control (Nikhil Kothari)
  13. Control: TextBoxCounter Atlas Extender (Scott Cate)
  14. Control: Atlas PasswordStrength Display Extender control (Paul Glavich)
  15. Control: UpdateProgress Control and Ajax Activity Image Animations (Scott Guthrie)
  16. Tutorial: Working with Atlas Control Toolkit (ASPAlliance.com)
  17. Tutorial: Dynamic content made easy (How to use the new dynamic population support for Toolkit controls) (Delay's Blog)
  18. Tutorial: Building a Mashup using the Atlas Virtual Earth Map control (Jonathan Hawkins)

 

General Ajax Resources

  1. Article: Ajax development: The what, how and when (SearchVB.com)
  2. Article: Ajax development: The what, how and when, continued -- Five tips for getting started (SearchVB.com)
  3. Article: 2005 in review: Ajax makes news, but will it make the grade? (SearchVB.com)
  4. Article: Ajax hype and reality (SearchWebServices.com)
  5. Article: Can Ajax be running partner of Web services? (SearchWebServices.com)
  6. Article: Ajax and interface design (Luke Wroblewski)
  7. Quiz: Ajax quiz: Do you speak geek? (WhatIs.com)
  8. Reference: Ajax Learning Guide (SearchVB.com)
  9. Reference: Comparison of Ajax frameworks for ASP.NET (Daniel Zeiss)
  10. Tutorial: Populating a DropDownList using Ajax and ASP.NET (ASPAlliance)

 

ASP.NET AJAX Forums and Blogs

  1. Where peers share know-how and experience: ITKnowledge Exchange (SearchVB.com)
  2. Forum: AJAX Discussion and Suggestions (ASP.NET Forums)
  3. Forum: AJAX UI (ASP.NET Forums)
  4. Forum: AJAX Networking and Web Services (ASP.NET Forums)
  5. Forum: Atlas general questions (DotNetSlackers)
  6. Forum: Atlas code samples (DotNetSlackers)
  7. Blog: ASP.NET AJAX Blog Roll (Microsoft)

posted on 2006-11-26 11:19:00 by dflying  评论(6) 阅读(9269)

 
2006年11月22日

Anthem.NET近日有朋友和我提到Anthem.NET这个同样基于ASP.NET的Ajax框架,今天有机会亲自尝试了一下。初步的感觉似乎和ASP.NET AJAX不相上下,甚至某些地方要强于ASP.NET AJAX。当然,半个小时的尝试不能算作什么,这篇文章的很多比较结论可能只是因为我的“无知”造成的,取名“管中窥豹”,其意正在如此。

Anthem.NET的主页在这里,提供了下载文件以及大量的示例程序。同时,博客园的木野狐兄弟也写了一些很好的关于Anthem.NET的文章,值得我们学习(希望木野狐兄弟再接再厉啊!)。

本文将分别用ASP.NET AJAX和Anthem.NET实现一个最最最最简单的Ajax应用,即:页面中一个Button一个Label,点击Button将在服务器端设置Label中的Text,当然,这一切都是以Ajax异步回送的方式进行的。并比较这两种实现方式的编写代码、生成客户端脚本大小、执行效率等。

 

ASP.NET AJAX程序代码

我想,对于ASP.NET AJAX这部分内容,大家已经非常熟悉了:ScriptManager和UpdatePanel而已:

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div>
    <asp:Button ID="btnSetText" runat="server" Text="Set Text" OnClick="btnSetText_Click" />
    <asp:UpdatePanel ID="up1" runat="server">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnSetText" EventName="Click" />
        </Triggers>
        <ContentTemplate>
            <asp:Label ID="lbText" runat="server" />
        </ContentTemplate>
    </asp:UpdatePanel>
</div>

服务器端的处理函数也很简单:

protected void btnSetText_Click(object sender, EventArgs e)
{
    lbText.Text = "This text is set on server side.";
}

大功告成!

 

Anthem.NET程序代码

将Anthem.dll拷贝到Web Site的bin文件夹下,然后在web.config的<configuration>\ <system.web>\ <pages>\ <controls>中添加如下一行,注册Anthem.NET控件:

<add tagPrefix="anthem" namespace="Anthem" assembly="Anthem"/>

Anthem.NET页面不用添加ScriptManager,而是提供了一套自己就带有Ajax功能的、继承于现有ASP.NET控件的服务器端控件。根据上面在web.config文件中的注册,这部分控件的前缀为anthem。

Anthem.NET程序的页面显得非常简单:

<div>
    <anthem:Button ID="btnSetText" runat="server" Text="Set Text" OnClick="btnSetText_Click" />
    <anthem:Label ID="lbText" runat="server" />
</div>

服务器端的处理函数比ASP.NET AJAX的多出一行,明确指出需要更新Label中的内容(这一句其实与ASP.NET AJAX的UpdatePanel有着异曲同工之妙):

protected void btnSetText_Click(object sender, EventArgs e)
{
    lbText.Text = "This text is set on server side.";
    lbText.UpdateAfterCallBack = true;
}

似乎更加简单!

 

运行结果

两个示例程序运行结果完全一致:点击按钮将执行一次异步回送,然后Label中将显示出服务器端设定的文字。

 

ASP.NET AJAX和Anthem.NET实现方式的比较

一样的功能,但是却有比较:

 

结论

了解还不够深入,结论先不下了……上面的数据似乎可以说明一些问题,所谓滴水藏海啊! 

posted on 2006-11-22 15:37:00 by dflying  评论(20) 阅读(9042)

 
2006年11月21日

posted on 2006-11-21 10:28:00 by dflying  评论(5) 阅读(2912)

 
2006年11月20日

Enterprise Library for .NET Framework 2.0是一个非常好的东西,让我们在企业开发应用中有章可循。最近微软公司又在我们关心的32位和64位平台性能问题上给出了一份比较测试文档,又需要选择32位和64位平台的朋友们可以参考一下(在此下载)。

这份文档中首先给出了测试用机的配置:

然后针对如下几个场景在32位和64位平台中进行了性能测试比较:

  1. Logging Application Block Scenario: Write to Event Log
  2. Data Access Application Block Scenario: ExecuteNonQuery
  3. Scalability View of the Data Block
  4. Caching Block Scenario: Adding Random Item in the Cache in Memory

最后给出了两条结论,摘录如下:

  1. The 64-bit machine has 2 & 4 processors compared to 2 & 4 processors on the 32-bit machines. Also, the processor speed on 64-bit machines is 1804 MHz per processor as compared to 2790 MHz per processor on 32-bit machines. With these performance numbers in perspective, it can be observed that with less CPU processor power the gains on scalability moving to 64 bit was 100%.
  2. The second important factor for nominal performance of a 64-bit machine revolves around the use of system resource and memory space. For this analysis, we used the Enterprise Library Application Block default test cases. These test cases are not specifically targeted to assess the new features of 64-bit architecture. Since one of the main benefits of 64-bit machine is its high memory and improved architecture, this would be good future work.

总体说来,这份文档还是非常具有指导意义的!且文档只有19页,足够简明,强烈推荐每个使用Enterprise Library for .NET Framework 2.0的朋友都去看一下。

顺便说一句,TerryLee的Enterprise Library系列文章也极为精彩,而且使用中文写的,非常值得一读!

再列出几本不错的Enterprise Library的图书,感兴趣的朋友可以读一下:

  1. Microsoft Patterns & Practices Library-january 2006 (Patterns & Practices)
  2. The Definitive Guide to the Microsoft Enterprise Library
  3. Effective Use of Microsoft Enterprise Library: Building Blocks for Creating Enterprise Applications and Services

 

顺便问一下各位在博客堂用Windows Live Writer写Blog的朋友们,我在用Windows Live Writer的时候,修改一个已经发布了的帖子会出现下面图示的错误,以致根本无法修改。有没有朋友遇到同样问题呢?应该如何解决呢?谢谢!

posted on 2006-11-20 22:36:00 by dflying  评论(2) 阅读(7559)

 
2006年11月19日

英文网站部分

  1. http://www.google.com 或者http://search.msn.com :不必多说
  2. ASP.NET AJAX官方网站:不用多说了……
  3. ASP.NET AJAX Control Toolkit官方网站:同样不必多说……
  4. 官方参考文档:必备资料,虽然现在还不是很全。
  5. 官方讨论社区:直接和ASP.NET AJAX顶级开发者以及ASP.NET AJAX开发组成员交流,得到他们的建议并提交反馈。ASP.NET AJAX的最新动态、最新问题基本都是从这里散发出去的。
  6. Scott Guthrie的Blog的Atlas分类:ASP.NET之父的Blog,更新非常频繁,及时带来最新的官方消息。
  7. Nikhil Kothari的Blog的ASP.NET分类:Atlas架构师的Blog,更新不是很多,但是内容足够深入。
  8. [RSS Feed]ASP.NET AJAX Team的Blog订阅:ASP.NET AJAX开发团队高层成员的Blog的相关内容的聚合。ASP.NET AJAX最新的动态,最新的使用技巧在这里都能找到。

以下是一些零零碎碎的内容,不成系统,但是空余时间也值得参考:

  1. http://weblogs.asp.net/bleroy/archive/tags/Atlas/default.aspx
  2. http://www.west-wind.com/WebLog/
  3. http://weblogs.asp.net/despos/archive/tags/ASP.NET+AJAX/default.aspx
  4. http://weblogs.asp.net/leftslipper/archive/tags/AJAX/default.aspx

 

中文网站部分

  1. http://www.baidu.com:不必多说
  2. Scott Guthrie 博客中文版的ASP.NET AJAX部分:感谢思归大哥翻译。
  3. 博客园ASP.NET AJAX (Atlas)学习团队:说是国内最全的ASP.NET AJAX学习资源一点都不为过。包含大量各种层次、系列、形式的文章。
  4. 思归的“关注AJAX”系列:文章比较简洁,以引用链接英文文章为主。适合已经入门了的朋友进一步提高。
  5. Jeffrey Zhao的Blog:很多ASP.NET AJAX的相关文章,理论性较强,适合已经入门了的朋友进一步提高。
  6. TerryLee的ASP.NET AJAX入门系列:针对初学者最好的ASP.NET AJAX学习教程。目前还在写作过程中,希望Terry大哥继续努力。
  7. Dflying Chen的Blog的相关分类:入门和高级内容都有涉及,早期CTP版本内容丰富,不过已经过时。最近更新比较频繁。
  8. CSDN的Atlas标签:内容良莠不齐,需要仔细挑选甄别之后再吸收。

 

图书部分

  1. Atlas基础教程:入门书籍,内容针对CTP版本的Atlas,现在已经过时。
  2. (若干本英文图书,加上我的三本,现在尚未出版,暂且不列)

 

附:建议学习过程

  1. [预先需求] 了解AJAX基本原理(随便找本书看看或是搜索一下网络资源)
  2. [入门] TerryLee的ASP.NET AJAX入门系列
  3. [继续入门 稍加深入] ASP.NET AJAX官方网站ASP.NET AJAX Control Toolkit官方网站官方参考文档
  4. [应用 问题求解] Dflying Chen的Blog的相关分类博客园ASP.NET AJAX (Atlas)学习团队官方讨论社区
  5. [深入原理] Jeffrey Zhao的Blog
  6. [把握技术趋势] Scott Guthrie的Blog的Atlas分类Nikhil Kothari的Blog的ASP.NET分类ASP.NET AJAX Team的Blog订阅思归的“关注AJAX”系列
  7. [全程都要用的] http://www.google.comhttp://www.baidu.com
  8. [日常点滴积累] 上述其他资源

 

匆忙写成,定有遗漏疏忽,欢迎朋友们继续补充推荐并对错误不吝指正……人工分类总是比搜索引擎自动进行要精确一些,起码现在如此 :-)

posted on 2006-11-19 23:50:00 by dflying  评论(16) 阅读(8204)

 
2006年11月18日

我是Dflying Chen,感谢开心就好大哥的提携,让我能再博客堂有了自己的一片地方。今天第一次到这里发帖,向各位问好了!

来到博客堂之前,我在博客园中的Blog中写了很多ASP.NET AJAX(Atlas)的内容,欢迎各位阅读并赐教!

关于在博客堂中的文章内容形式,我想了好几天都没有想好。不过无论写什么,都希望朋友们能够对我的文章提出意见,发表留言。我会尽快逐一回复。

谢谢!

posted on 2006-11-18 17:47:00 by dflying  评论(25) 阅读(5960)

 

Powered by: Joycode.MVC引擎 0.5.2.0