Silverlight 3 OOB (2)

Silverlight 3 OOB (1)
前文对原理做了简要分析,该篇将针对做部分应用。
总述
在Silverlight 3正式版发布之前,开启该功能,需要修改Properties文件夹下的AppManifest.xml文件。
代码如下:










Saving your Silverlight offline.




可设置的OutOfBrowerSettings属性。

ShortName – 程序在桌面或开始菜单中的显示名称。
Title – 程序运行时标题栏的现实内容。
Blurb – 程序的备注内容。

当F5运行该程序时,可以看到下面的菜单:

选择第二项。选择添加到开始菜单或者同时安装到桌面,默认选择开始菜单:

移除离线程序也很简单。右键单击运行中的离线程序,选择第二项:
silverlight-oob-3
在Silverlight离线程序中同样可以自定义桌面图标,开始菜单图标等。需要创建四个不同尺寸的PNG文件,16X16、32X32、64X64、128X128。把它们添加到项目中并指定路径,设置图标文件的Build Action的属性为Content。


Images/sl16.png
Images/sl32.png
Images/sl64.png
Images/sl128.png


现在就可以得到自定义图标了。
完整的AppManifest.xml文件。










Saving your silverlight offline


Images/sl16.png
Images/sl32.png
Images/sl48.png
Images/sl128.png




Silverlight 3 的OOB并不支持对窗体的修改。
在Silverlight 3 以及 Expression Studio 3 (Expression Blend 3)正式发布时,这个OOB设置方式进行了简化。无需设置Appmanifest.xml,你可以在Properties看到OutOfBrowserSettings.xml文件。




A short description of the application.





在Expression Blend 3中,选择Project->Silverlight Projects Options->Enable Application Outside Browser。

Demo
联系人管理器(由微软提供)

Silverlight 3 OOB (1)

名词解释
OOB (Out of Browser): Silverlight 3新特性之一。在浏览器中运行的Web应用界面与传统桌面软件比起来总是死板,不够灵活的。因此,人们就产生了需求,想在浏览器之外运行web应用。Adobe的Air可以实现这个功能,而Google的解决方案是Chrome里的shortcuts。给Web应用建立了shortcuts之后,就可以按照人们习惯的方式启动这个应用,而界面也很传统软件非常接近了。微软的解决方案则是Mesh,或者最新的Silverlight OOB功能。
原理简析
分离程序
当用户第一次浏览应用程序可能是在浏览器的某个位置。当你的程序支持out-of-browser(OOB)体验时,用户可以通过引起事件分离程序。接着会出现下面的情况:
detach
该动作捕获浏览器(例子中虚拟地址 http://foo.com/mysloob.xap)并创建一个OOB程序。

  • 程序(XAP)需要再一次通过浏览器请求数据。
  • 当XAP下载时,在低信任区域中取得本地存储的元数据,包括XAP的原始URI元数据以及重要的ETag信息(本质上是时间戳)。

首次运行OOB
如果我们关闭程序并再次在桌面上运行程序:
launch1
在这种情况下程序会检查它的元数据XAP的原始URI并进行一次请求。对比HTTP的响应数据(代码以及Etag)。如果程序没有更新,程序会正常运行。事实上,程序的检查请求基本上会是这样:

GET /silverlight/oob/ClientBin/OutOfBrowser.xap HTTP/1.1
If-Modified-Since: Thu, 19 Mar 2009 03:52:35 GMT
User-Agent: Silverlight
Host: timheuer.com
X-P2P-PeerDist: Version=1.0
Accept-Encoding: peerdist
HTTP/1.1 304 Not Modified
Last-Modified: Thu, 19 Mar 2009 03:52:15 GMT
Accept-Ranges: bytes
ETag: “f2e3a81746a8c91:445”
X-Powered-By: ASP.NET
Date: Thu, 19 Mar 2009 03:55:18 GMT

需要注意的是HTTP 304 Not Modified的响应。没有更新信息发送时我们可以看到没有传递信息。程序不会发生变化。在API层,作用于改变DetachedUpdatesAvailable状态的Application.Current.ExecutionState没有被触发。
用户从桌面运行,程序升级
现在我们更新程序并上传到服务器。用户下一次运行程序时,同样的请求出现:
launch2
再一次,请求发送元数据信息。不过这次,有更新了。过程也是加倍的。连同响应发送了新时间戳/ETag,请求同样包括了更新程序。请求会是这样的:

GET /silverlight/oob/ClientBin/OutOfBrowser.xap HTTP/1.1
If-Modified-Since: Thu, 19 Mar 2009 03:52:35 GMT
User-Agent: Silverlight
Host: timheuer.com
X-P2P-PeerDist: Version=1.0
Accept-Encoding: peerdist
HTTP/1.1 200 OK
Content-Length: 15557
Content-Type: application/x-silverlight-app
Last-Modified: Thu, 19 Mar 2009 03:56:29 GMT
Accept-Ranges: bytes
ETag: “ce39d0ae46a8c91:445”
X-Powered-By: ASP.NET
Date: Thu, 19 Mar 2009 03:56:45 GMT 17:

“data”之上的部分事实上是更新XAP的数据(注意Content-Length与Content-Type headers)。

  • Application.Current.ExecutionState改变为DetachedUpdatesAvailable 状态。
  • 本地存储的XAP更新了数据。

当前还没有选项可以拒绝更新数据。如果程序已更新,用户就会获得它们。这是开发团队考虑到不同使用环境的设定。同样的,不能强制用户关闭程序或者阻止程序继续使用。在某种意义上,你或许可以通过更新程序使下次运行时屏蔽UI。再次运行程序(从本地机器)会进行数据更新,更新请求会跟首次相近:

GET /silverlight/oob/ClientBin/OutOfBrowser.xap HTTP/1.1
If-Modified-Since: Thu, 19 Mar 2009 03:56:49 GMT
User-Agent: Silverlight
Host: timheuer.com
X-P2P-PeerDist: Version=1.0
Accept-Encoding: peerdist
HTTP/1.1 304 Not Modified
Last-Modified: Thu, 19 Mar 2009 03:56:29 GMT
Accept-Ranges: bytes
ETag: “ce39d0ae46a8c91:445”
X-Powered-By: ASP.NET
Date: Thu, 19 Mar 2009 03:57:12 GMT

上述是Silverlight 3 OOB的基本原理。当程序被分离,与app相关元数据被存储。每一次运行时检查一次元数据,确认升级是否可用。如果程序离线,也不会阻止程序运行。这与部署.NET Framework的ClickOnce观念类似。
延伸阅读
微软 Google云计算基础技术的比较
silverlight 3 offline update framework

在Expression Blend 3中快速创建图像笔刷

之前在Blend中创建一个图像笔刷需要很多步骤。Blend3中对此进行了改进。
复制一个图像到剪贴板
粘贴图像到Resource Dictionary
打开Blend 3 并选择 Resource标签,选择可定义图像笔刷的资源区域。右键点击App.xaml文件并选择粘贴Paste。
clipblend-paste-resource
增加下列xaml代码到App.xaml文件中Application.Resources部分



空镜头一组

空镜头:影片中没有人物只有景物的镜头。
设备 Sony A300 Kit
地点 青岛大学 浩园15






EVA·破

新世纪福音战士新剧场版:破 ヱヴァンゲリヲン新劇場版:破
EVANGELION:2.0 YOU CAN(NOT)ADVANCE

EVA破 海报

EVA破 海报


好久没动过笔,手生。
Read More …

腐败零六二三

青岛石老人海边烧烤腐败集.
设备 Sony A300 Kit.
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤
石老人烧烤

罪行的另一面


依靠虚拟,我们不仅进入了取消现实和参照系的时代,而且跨入了消灭他者的时代。
这是种族净化的同义语,它不仅会涉及一些特殊的民族,而且会穷追猛打所有相似性的形式。
死亡的形式——人们以顽强的治疗避免死亡。
脸形和体形,人们通过外科美容术追求着。
世界的形式,人们通过虚拟实在使人忘却着。
每个人的形式,某一天将通过克隆个体细胞而取消之。
还有他者的形式,因不间断的沟通而正在淡化。
如果说信息是完美的罪行对抗实在的场所,那么沟通就是对此罪行对抗相似性的场所。
不再有他者:沟通。
不再有敌人:谈判。
不再有掠夺者:友好相处。
不再有消极性:绝对的积极性。
不再有死亡:伤风败俗的克隆。
不再有相异性:同一性和差别。
不再有诱惑:性冷淡。
不再有幻觉:过度实在,虚拟现实。
不再有秘密:透明。
不再有定命。
完美的罪行。

Expression Design 图标设计


这同样是一篇适用于入门的简明设计教程,以RSS图标为设计对象。使用Expression Design2与Expression Blend3工具创建。
首先看一下最终的静态完成效果。下图为单一图标,组图点击这里查看Design源文件,动态效果点击这里查看
Silverlight rss图标
接下来打开Expression Design,在画布上绘制一个矩形并调节适当的圆角半径。
Read More …

Expression Design人工橡皮擦

前面要说的是,Expression Design是没有illustrator里面的橡皮擦工具的。有些需求可以通过Expression Design里的其它工具组合完成。下面做两个演示,前者主要使用剪刀工具,后者则以路径功能为主。
目标:对圆形进行切口。
Read More …

片语(1)

  • 知识是一种信息,与一般信息不同的是知识具有价值属性。既然知识也是一种信息,那么我们不妨先从信息的传播原理角度来探寻阻碍知识传播的答案。
    我们往往这样来描述信息沟通:首先有信息的发送者(信息源),经过信息发送者对信息进行加工处理(编码),然后通过某种途径(传播途径、传播介质)传递给信息的接收者(接受源),信息的接收者在接收到信息后会对信息进行理解(信息解码)后根据自己对信息的理解做出某种反馈给信息的发送者,沟通一定是在某种沟通环境中进行的。以上8个要素构成了一个沟通过程,通常也被称为“有效沟通8要素”,也就是说要做到有效传递信息,这8个要素缺一不可。从这里我们可以看得出,沟通质量的关键在于信息源和接受源,而双方又受限于自己的专业领域、工作经验、学历背景、个人喜好、民族和企业文化等方面的程度至关重要。
  • 不对称相互依赖——同盟就好比一个长期供求合同,价格是固定的,而且反映的是最初某种特殊情况下的供求关系。而当供求关系逐步发生变化,日积月累,与那个最初的固定价格之间的背离越来越严重,那么整个合同的废弃或修正是迟早的事。
    一是不能太拿自己的恩惠当回事,究其不能把自己美化为舍己为人的道德楷模,因为那种虚伪态度比如会导致言行之间的背离和盟友之间的离心离德;而是应当把目光集中在当下和未来的“供求”变迁上,保持双边关系的“弹性”;三是应该记住:同盟,是个不安全的产物。盟友获得安全之日,往往是同盟结束之时。
  • 科技的进步越来越变成技术爱好者的自我追求而忽略了消费者较弱的技术需求。
  • 当信息过多,它们变成垃圾的可能性也越大,过多的信息使人产生对有效信息的迷失。
  • 所谓需求,反映的是一种消费者行为过程中的问题,而绝对不能把消费者提出的解决方案误理解为需求。