用户名:
  密    码:
  验证码:
看不清?点击这里换一个
  注    册
  忘记密码   修改密码
首页
知名架构师博客中心
微软架构师网络广播
在线架构技术教程
架构师技术阅读
经典.NET架构启蒙
Architect Journal
国内成功案例
国外成功案例
历史活动
  .NET架构师论坛
  微软活动资讯
当前活动
会员登陆
立即注册
个人信息
会员推荐
RSS 源   simonguest.com
投递时间 2007年12月6日星期四 12:15
作       者 smguest
主       题 请勿打扰!
整篇文章链接:http://simonguest.com/blogs/smguest/archive/2007/12/05/Do-Not-Disturb_2100_.aspx
       和许多人一样,我在家里也使用VOIP - 我现在的提供商是Vonage。Vonage的其中一个特点是,它是一个国际虚拟号码。它可以分配给我一个英国的本地号码,我的家人可以拨打这个号码,它将自动重定向到我在美国家里的电话号码。这样可以相对便宜一些(每个月4.99美元),而且我的朋友和家人在联系我的时候也相当方便。
       拥有这个国际虚拟号码的缺点是,人们有可能会不小心拨错号码 - 一旦他们拨错号码,由于时区不同(太平洋标准时间与格林尼治标准时间相差了8个小时),就可能会比较麻烦了。这周我就接到了3、4个拨错号码的电话,而且都是在凌晨两点钟接到的。如果你想睡个好觉的话,那这可不太妙。
       Vonage有一个功能,叫做“请勿打扰”,可以将电话重定向到语音信箱 - 这个功能可以通过他们的网页激活。这个功能非常简单,但是我经常会忘,因此在睡觉前启用这个功能(以及在起床后禁用它)成为了一件烦心事。为了解决这个问题,我决定试试“Web应用程序测试”,看看我能否使用Visual Studio 2008来编写一个自动化的Web测试,来登录到Vonage的网站,并为我激活或取消这个功能。首先,我在VS2008中创建了一个新的测试项目,并从“测试”菜单中添加了一个新的Web测试。然后,我将记录整个启用“请勿打扰”功能的动作:
       我可以将整个请求页面简化为三个请求(一个是登录,一个是查询电话号码,还有一个是设置功能),并验证了它在IDE当中也是可用的。然后,我复制这个测试来创建另外一个测试,用来重新启用这个功能。(我觉得还有另外一种向Web测试传递参数的更好的方法,但是还没有想出来)。这个测试按如下的方式运行:
       第一个请求是一个HTTP POST,它将向网站提交我的Vonage用户名和密码:
<Request Method="POST" Version="1.1" Url="https://secure.vonage.com/vonage-web/public/login.htm" ThinkTime="6" Timeout="300" ParseDependentRequests="True" FollowRedirects="True" RecordResult="True" Cache="False" ResponseTimeGoal="0" Encoding="Windows-1252" ExpectedHttpStatusCode="0" ExpectedResponseUrl="https://secure.vonage.com/vonage-web/dashboard/index.htm">
  <FormPostHttpBody>
    <FormPostParameter Name="countryURLs" Value="http://www.vonage.com" RecordedValue="http://www.vonage.com" CorrelationBinding="" UrlEncode="True" />
    <FormPostParameter Name="username" Value="USERNAME" RecordedValue="USERNAME" CorrelationBinding="" UrlEncode="True" />
    <FormPostParameter Name="password" Value="PASSWORD" RecordedValue="PASSWORD" CorrelationBinding="" UrlEncode="True" />
    <FormPostParameter Name="submit.x" Value="30" RecordedValue="30" CorrelationBinding="" UrlEncode="True" />
    <FormPostParameter Name="submit.y" Value="13" RecordedValue="13" CorrelationBinding="" UrlEncode="True" />
  </FormPostHttpBody>
</Request>
       第二个请求(这次是一个HTTP GET),将来到“请勿打扰”功能的页面。在这里需要填写一个电话号码作为表单的参数,用来在下一个请求中使用:
<Request Method="GET" Version="1.1" Url="https://secure.vonage.com/vonage-web/features/DoNotDisturb/edit.htm" ThinkTime="4" Timeout="300" ParseDependentRequests="True" FollowRedirects="True" RecordResult="True" Cache="False" ResponseTimeGoal="0" Encoding="iso-8859-1" ExpectedHttpStatusCode="0" ExpectedResponseUrl="">
  <ExtractionRules>
    <ExtractionRule Classname="Microsoft.VisualStudio.TestTools.WebTesting.Rules.ExtractHiddenFields, Microsoft.VisualStudio.QualityTools.WebTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" VariableName="1" DisplayName="Extract Hidden Fields" Description="Extract all hidden fields from the response and place them into the test context.">
      <RuleParameters>
        <RuleParameter Name="Required" Value="True" />
        <RuleParameter Name="HtmlDecode" Value="True" />
      </RuleParameters>
    </ExtractionRule>
  </ExtractionRules>
  <CorrelationExtractionRules>
    <ExtractionRule Classname="Microsoft.VisualStudio.TestTools.WebTesting.Rules.ExtractFormField, Microsoft.VisualStudio.QualityTools.WebTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" VariableName="FormPostParam1.on" DisplayName="" Description="">
      <RuleParameters>
        <RuleParameter Name="Name" Value="on" />
        <RuleParameter Name="HtmlDecode" Value="True" />
        <RuleParameter Name="Required" Value="False" />
      </RuleParameters>
    </ExtractionRule>
  </CorrelationExtractionRules>
  <QueryStringParameters>
    <QueryStringParameter Name="did" Value="PHONENUM" RecordedValue="PHONENUM" CorrelationBinding="" UrlEncode="False" UseToGroupResults="False" />
    <QueryStringParameter Name="dndButton" Value="Configure" RecordedValue="Configure" CorrelationBinding="" UrlEncode="False" UseToGroupResults="False" />
  </QueryStringParameters>
</Request>
       第三个请求是一个HTTP POST,它将根据“on”参数的值来将“请勿打扰”的功能打开或关闭:
<Request Method="POST" Version="1.1" Url="https://secure.vonage.com/vonage-web/features/DoNotDisturb/edit.htm" ThinkTime="0" Timeout="300" ParseDependentRequests="True" FollowRedirects="True" RecordResult="True" Cache="False" ResponseTimeGoal="0" Encoding="iso-8859-1" ExpectedHttpStatusCode="0" ExpectedResponseUrl=https://secure.vonage.com/vonage-web/features/DoNotDisturb/edit.htm?did=PHONENUM&amp;success=true&amp;settings=com.vonage.service.feature.DndSettingsDTO+%7BphoneNumber%3DPHONENUM%2C+isOn%3Dtrue%7D>
  <FormPostHttpBody>
    <FormPostParameter Name="on" Value="True" RecordedValue="true" CorrelationBinding="{{FormPostParam1.on}}" UrlEncode="True" />
    <FormPostParameter Name="phoneNumber" Value="{{$HIDDEN1.phoneNumber}}" RecordedValue="PHONENUM" CorrelationBinding="" UrlEncode="True" />
  </FormPostHttpBody>
</Request>
       在测试完成后,我写了两个批处理文件(DNDOn.bat和DNDOff.bat),并在里面调用Web测试的命令行工具。使用MSTest.exe,可以在IDE外面运行Web测试:
set VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio 9.0
"%VSINSTALLDIR%\Common7\IDE\MSTest.exe" /noresults /testcontainer:bin\debug\DNDOn.webtest
       在测试批处理文件可以正常使用后,我只需要添加一个新的计划任务(在Vista当中,可以从开始菜单中键入“任务计划”来找到它),在晚上10点钟的时候运行DNDOn.bat文件,并在早上7点钟的时候运行DNDOff.bat。
       (顺便说一下,这也是我第一次使用Vista当中的任务计划功能。有两点让我非常吃惊:1. 它创建一个新任务非常简单(我以前在NT4上创建备份的批处理文件时可吃了不少苦头!)。 2. 在Vista当中可以使用非常多的任务 - 我需要花些时间来学习它们都是干什么用的!)
       ... 这样就可以了!我可以将这个快速的解决方案部署到家里的服务器上,免得以后深更半夜再有打错电话的。
       如果你希望试一试,可以从这里下载我的测试文件。当然,你需要将USERNAME、PASSWORD和PHONENUM(10位数字,记住要包括1)替换成你的账户的值。
>> 查看文章
RSS 源   simonguest.com
投递时间 2007年11月28日星期三 1:32
作       者 smguest
主       题 选择适当的用户体验平台
整篇文章链接:http://simonguest.com/blogs/smguest/archive/2007/11/27/Choosing-the-Right-Platform-for-User-Experience.aspx
       富应用(Rich Application)还是Web应用?ASP.NET还是Sharepoint?传统ASPX控件还是AJAX?
       最近在巴塞罗那的TechEd上的一些会议中,我讨论了许多架构师与开发人员每天要面对的选择,特别是在用户体验方面。为了帮助他们更加深入的了解,我使用了一个工具来帮助你关于平台的选择问题,这个工具叫做UXIQ。它是一个小WPF应用程序,上面有一些滑动条控件,你可以用它来为用户体验设置不同的约束条件,相应的,它会为你推荐出最为适当的技术平台。
       这个工具中的约束条件如下
       角色 – 用户的位置,是否有移动用户,用户是否可以被培训,以及用户体验应当如何进行客户化定制。
       应用 – 应用所需的连接性,应用的外观与感觉,图形化需求,及交互需求。
       环境 – 是否需要在本地的设备/机器上安装,与其它软件集成,与其它硬件集成,以及开发人员的知识储备。
       这个小工具将这些约束条件映射到一些数据(存储在一个XML文件当中)上,并显示出最符合的三个技术。然后,你可以将鼠标停在这些选项上,查看离它们有多远,以及有关这些技术的更多信息。注意,这个工具所描述的值都是我的看法,基于我个人的经验 - 如果你希望改变这些值或添加/删除某些技术,您可以编辑那个XML数据文件。
       你可以从这里下载这个工具 – 正确要运行,你需要安装.NET 3.5运行时,可以在这里下载。如果你对这个工具非常感兴趣,您可以从这里找到源代码。
>> 查看文章
RSS 源   simonguest.com
投递时间 2007年10月9日星期二 8:08
作       者 smguest
主       题 ALT.NET 会议
整篇文章链接:http://simonguest.com/blogs/smguest/archive/2007/10/08/ALT.NET-Conference.aspx
       上个周末(即10月的5号至7号)我在德克萨斯州的奥斯汀参加了ALT.NET 大会。ALT.NET可以理解为由一些业界的领导者所组成的团体,他们“在.NET平台上努力创造优质的软件”(全部注释详细参考 这个Yahoo 讨论组)。会议的一些焦点甚至涉及了软件主流之外的东西(比如使用开源,敏捷软件开发,或 .NET 中的ruby 等等)。这个会议主要是由Scott Bellware 组织并发起的,出席者的名单包括Martin Fowler,Roy Osherove,以及 David Laribee。
       这次会议的参加者总共大约100人左右,并且是以“Open Space”形式,这就意味着会议没有固定的日程,并且任何主题都可以被提出讨论。如果人们决定讨论你所提出的主题,那么就由你主持这个部分。
       Howard Dierking(MSDN Magazine的主编),他与我一同主持了关于“integrating ALT.NET principles in guidance we deliver”的专题。除了一些常规的讨论以外,还有许多关于“有趣的材料/演示”和“可持续软件”之间平衡的意见。许多的与会者都对一些演示产品实力的视频和示例代码提出了自己的见解,但是这样却导致了在系统中很难继续下去。
       总之,有一点很清楚的是我们还需要和参加ALT.NET研讨会的与会者做更多的事情,特别是在指导的领域内。许多参与者都比较热衷于将他们所从事的工作用演讲和文章的形式表达出来,而我相信 Microsoft 需要做的是提供适当的渠道让他们做这些事情。我也非常希望看到ALT.NET的一些概念和其他的技术产品整合在一起。举个例子,如何使TDD (Test-Driven Development – 测试驱动开发)适用于Sharepoint/Office的开发?只要看一下在这个社区中使用的一些工具(见这张图片),就会让你能够了解我们能够的指导可以覆盖的范围。
       综上所述,这是一个很有趣,很有启发的观点。让这种关系继续向前发展是十分重要的,明年年初我将继续关注着在西雅图举行的下届会议。这次会议的照片请点击这里
>> 查看文章
RSS 源   simonguest.com
投递时间 2007年9月18日星期二 5:43
作       者 smguest
主       题 Architecture Journal: 征集案例研究
整篇文章链接:http://simonguest.com/blogs/smguest/archive/2007/09/17/Architecture-Journal_3A00_-Call-for-Case-Studies.aspx
       从出饭发行的14期期刊起,Architecture Journal每一期都将会刊登一些关于架构的案例研究。在每一期中,我都将题献一两页内容,写一些关于在全世界范围内比较感兴趣的架构项目方面的文章,其中包括用到那些知识,哪些有用,哪些是没有用的,等等。我们觉得这是一种非常不错的方式,它既能够辅助我们目前正在从事的工作,又能够在我们的产业范围内给读者很好的启蒙。
       如果你有方案,想在下一期中刊登的话,请递交一份简短的(1至2页)关于这个项目的概要到editors@architecturejournal.net。 这个概要应当包括一份方案的概览,一个关于它优点或缺点的描述,你的个人简历,并总结一下你在这个项目当中扮演了什么样的角色。因为我们正在寻找与架构设计相关的一些案例,所以这个方案不一定是单独地以Microsoft 的技术为基础的。为第14期文章投稿的最终期限是10月1日。
Alternative
       如果你的项目被选中,你将有大约4个星期的时间来写这篇文章。文章最长是1,500字,并且最好可以使用一些与项目相关的图表。你必须事先获得你的公司的允许,然后才可以写这篇文章,并且你还必须签署一份出版许可,同意我们在Architecture Journal上发表这篇文章。
>> 查看文章
RSS 源   simonguest.com
投递时间 2007年6月18日星期一 12:55
作       者 smguest
主       题 在 PowerPoint 中嵌入 XAML
整篇文章链接:http://simonguest.com/blogs/smguest/archive/2007/06/18/Embedding-XAML-in-PowerPoint.aspx
类       别 翻译
       你是否曾经有一些XAML的片断,希望放在一个PowerPoint幻灯片当中并且非常出色的显示出来?你是否希望将一些XAML嵌入一个现有的幻灯片中呢?下面是一个快速的教程,告诉你如何去做:
       1.你需要安装一个PowerPoint的插件,它支持显示嵌入的Web页面。你可以到这里进行下载,LiveWeb,它是由一个Microsoft的MVP Shyam Pillai创建的,它看上去没有任何问题。
       2.确定你可以从本地的浏览器访问你的XAML页面 - 或者是一个.xaml文件(如果你希望访问开放的功能,那么你也可以使用一个.xbap文件)。
       3.创建一个新的PPT幻灯片,嵌入一个新的Web页面,将它指向你本地的XAML,然后如下图所示…
       一种更为快速简单的方法来将漂亮的XAML插入到一个现有的PowerPoint幻灯片当中。下面的这些内容可以使它更为出色:
       1.在浏览器窗口中看到的是一个透明的背景,这样可以帮助将XAML更好的混合到幻灯片的设计当中。
       2.可以改变浏览器窗口的Z-order,从而使得PowerPoint的对象可以与XAML的背景更好的混合在一起。
>> 查看文章
RSS 源   simonguest.com
投递时间 2007年5月16日星期三 8:16
作       者 smguest
主       题 拍卖项目应用程序
整篇文章链接:http://simonguest.com/blogs/smguest/archive/2007/05/15/Auction-Projection-Application.aspx
在这个周末,我儿子的学校将组织每年一度的基金筹措拍卖会。这个大会由一个匿名拍卖(人们使用桌子上的纸条来竞价)和一个现场拍卖(所有的高价位的东西都是在人们面前现场竞拍)组成。今年,我们希望在现场拍卖的过程中显示竞拍获胜者的姓名,这样在"596号"赢得竞拍的时候,所有人都可以知道他是谁…
为了实现这种场景,我编写了一个应用程序,它使用我们用于注册和结账(它是一个单独的应用程序叫做"AuctionPay Event")的数据库,但是在我最近所谈论的UX的基础上,我希望确保在将它们放到一起时可以从我正在说的听众那里得到回应。
为了帮助验证它,我首先为这个应用程序创建一个人物(叫做Janice)。我不知道谁将会在那天晚上运行这个应用程序,但是Janice是一个非常不错的志愿者。这非常非常的有用,因为在设计这个应用程序时,如果只是从我这个工程师的角度来进行设计的话,"只是在屏幕上放置一个按钮来完成"对于Janice是不够的。结果,最终的产品花费了更长的时间来开发,但是我相信它将会更加成功。一个很好的例子就是以全屏的方式运行应用程序。起初,我开始考虑"是的,我将一放置一些按钮来实现最大化/恢复功能",而后我发现Janice根本就不希望恢复窗口 - 而且她可能根本就是理解这个术语 - 所以,取而代之的是,我编写了一些代码以最大化的方式启动应用程序,并且一直让它保持在那里…
假设,Janice在家有一台电视机,我希望让应用程序像电视机的遥控器一样去控制(你只需要按一些数字 - 而不需要按"确定"键,而且也不需要为鼠标和任何编辑区域设定焦点)。但是,就像电视机的遥控器控制一样,如果你按了一个错误的数字(如8--)而没有去按其它的键,则输入将会在几秒钟后消失。我使用了一个System.Windows.Threading.DispatcherTimer类来为我的应用程序重新创建了用户体验(提示 - 如果你正在寻找一个线程安全的计时器来与UI一起工作,那么这个类可能就是你需要的,而不是处理你自己的委托)。这个计时器将会监视你的输入,并且决定你当前是否输入了一个有效的数字,或者输入是否应当被取消。
在考虑完输入后,下一个需要考虑的就是确保输出可以在最上方显示(如果没有全部显示)。我使用的是我的T60p开发的,而我怀疑它是否可以在那天晚上在一个不同分辨率的笔记本上工作,所以我需要确定文本可以正确的缩放,而不会受到显示器的分辨率的影响。在XAML中,最好的方法就是使用一个Viewbox,它将会随着屏幕分辨率的改变,同时缩放文本和图片的内容。
我花了一些时间来处理label标签的边缘(而且我必须要在一些比较短的名字上添加一些间隔,使它们可以真正显示在中间),但是总体上节省了大量的用来缩放文本的自定义代码。最后,为了加一些"彩",我在WPF中创建了一些倒影(例如文本的倒影)。这在WPF当中是非常简单的,但是也并不是我想像的那么简单(OK…我希望它是这么实现的, - 可惜,并没有那么幸运 )。取而代之,我创建了另外一个标签,应用了一个Y方向上的镜面转换,然后使用了一个opacity brush来减弱文本的颜色。
总体来说,这绝对是出色的用户体验(虽然真正的测试将会在周六晚上进行,届时将会有500个人看到我的应用程序 - 可能我还需要在用户测试上加以更多的思考 )。
>> 查看文章
RSS 源   simonguest.com
投递时间 2007年5月4日星期五 3:13
作       者 smguest
主       题 WPF架构师内容关系图
整篇文章链接:http://simonguest.com/blogs/smguest/archive/2007/05/03/WPF-Content-Map.aspx
昨天,我们的团队在MSDN上发布了一个新的站点Skyscrapr,它致力于为希望成为架构师的读者提供指导。我经常会从别人的口中听到的一个抱怨就是,他们很难找到关于架构师的文章和内容。在Google上查找"SOA"这个词,你将会得到3千6百5十万条结果。如果你正在查找一个特定的文章,那么这绝对一个天文数字。
在Skyscrapr上,让我感到非常兴奋的是我们的content map,可以通过网站来访问。这个是一个WPF XBAP控件,它显示了MSDN上所有与架构师相关的内容之前的特殊关系 - 现在大约有1500篇文章和网络广播。您可以使用这个控件来查看所有相关的主题,查看哪位作者是我们的"联系人",以及他写了哪些文章。
例如,上面的截图显示了与"面向服务体系结构"主题相关的其它架构设计主题(离中心的主题越近,和它的关系就越紧密)。我们还可以为作者创建一张关系图。下面这张图显示了与Ron Jacobs相关的其它作者(这是一个很好的例子,因为里面的大多数人都被ARCast采访过)。在截图中,注意关系图是如何显示相关团队的分组的(从左到右)。
最后,你也可以看到与作者相关的所有文章。例如,下面显示了所有Scott Guthrie所写的文章:
这非常有用,特别是可以在你查找一篇你喜欢的文章时 - 你可以看到类似的一些文章(无论是相关的作者或主题)。
现在还有一些Bug(特别是它在加载时所需要的时间,以及更多文章的浏览),但是我认为这是一种非常有潜力的方式,可以使用它来浏览其它类型的数据(例如,您可以将它嵌入到您自己的实体和关系之中)。
需要重申的是,你可以使用这个链接来访问关系图this link。如果你有兴趣学习更多内容,我非常乐意听取你的反馈。
>> 查看文章
RSS 源   simonguest.com
投递时间 2007年2月6日星期二 8:44
作       者 smguest
主       题 WPF客户端和XBAP设计的考虑
整篇文章链接:http://simonguest.com/blogs/smguest/archive/2007/02/05/WPF-Client-and-XBAP-Design-Considerations.aspx
如果你已经涉及到WPF的开发当中,你将会了解到主要有两种部署WPF应用程序的方式:你可以创建一个客户端可执行程序,它将单独的运行,或者创建一个XBAP(XAML浏览器应用程序),它将在一个浏览器的上下文当中运行。无需考虑选择哪一种方式的问题,我相信有一些设计的实质,许多人直到开始选择其中一种方式进行开发的时候都没有真正的意识到。
例如,我最近已经在一个项目工作了一段时间,它将一个Windows窗体应用程序迁移到WPF中。在我开始迁移的过程当中,我开始考虑部署 - 我们的目标是尽量无痛的部署WPF应用程序。在进行全面的考虑后,我们决定使用浏览器来宿主WPF应用程序 - 使用XBAP的方式。我们的结论是,这种方式将会提供最佳的用户体验,并且运行在一个沙箱环境当中的安全性也可以得到保证。
但是,我们不会在做出决策的时候考虑设计的问题。例如,原有的客户端应用程序大量的依靠"右键上下文菜单"来浏览数据。这确实是一种使用客户端应用程序浏览数据的最为自然的方式 - 即使是使用WPF - 但是当我们迁移到XBAP模式时,从用户最先得到的反馈就是他们在没有指导的情况下"完全得不到"。(只有极少的人才希望在一个Web页面中点击右键而不是标准的浏览器右键菜单。)
虽然应用程序的功能没有发生改变,但是我们可能忽略了应用程序宿主所带来的用户体验上的不便。(结果,在我们发布给更为广泛的用户之前,现在不得不回来实现更多的"浏览器可接受"的设计原则。)
是出于职业道德?只是因为你可以从一个技术的观点来交付一个不同的用户体验,并不意味着你就可以依赖于相同的用户体验原则。
>> 查看文章
  个人信息中心 | MSDN中文速递邮件
  ©2007 Microsoft Corporation.版权所有. 保留所有权利 | 商标 | 隐私权声明