Web Analytics
yangyang

码农兼一个普普通通小青年

All Posts


Reactive Extensions入门(6):使用Rx进行单元测试

Rx本身就是一个功能强大的测试框架。本文将介绍如何使用Rx模拟异步方法调用返回预定的值来辅助针对一步方法调用的单元测试。Rx可以模拟经过一段预定时间返回结果的异步方法,从而简化了异步处理方法的测试。Rx也可以模拟异步方法返回错误的场景,使得代码测试可以覆盖多有的用例。本文将介绍Rx中的TestSheduler方法,他可以模拟耗时的异步操作,但是能在测试的时候能够立即执行。 1. 模拟异步方法 开发者可能会对测试与时间有关的异步方法会感到头疼。与测试同步方法不同,异步方法不仅需要返回需要的值,而且还要能够模拟出方法耗时以及延迟的效果。 有很多工具能够用来测试同步方法,但是测试异步方法则需要一定的技巧。我们可以使用Thread.Sleep()来模拟需要长时间执行的方法,但是该方法能用来测试的时间用例非常粗糙,在有些对执行时间要求比较高的场景,Thread. …

Reactive Extensions Rx Observable Scheduler UnitTest

Reactive Extensions入门(5):ReactiveUI MVVM框架

从前面几篇文章可以了解到,Rx作为LINQ的一种扩展,极大地简化了异步编程。但Rx的用法不仅如此,由于其可高的扩展性,在其他很多方面也有所应用。 在前面例子中,我们使用代码和UI界面上的元素打交道,这种方式在传统的Winfom编程中很常见,但是在基于XAML构造的界面这种应用程序中,这样显得不是非常友好,XAML中声明式编程可以使得程序更加简洁,传统的方式没有利用到XAML中强大的绑定功能。之前,我们大量使用了诸如Observable.FromEvent这样的操作,然后来使用后台代码来设置控件的属性,这都是传统的编程方式。 当然,对于规模较小的程序来说,这种方式无可厚非。这种方式的最大的缺点在于,对于测试很不友好,要测试这样的应用程序很困难,我们需要创建UI控件并模拟输入,这样效率不高而且不可靠。另一个缺点是,这种方式使得代码高度耦合而且脆弱。针对这些问题,一种 …

Reactive Extensions Rx Observable ReactiveUI MVVM

Reactive Extensions入门(4):Rx实战

Reactive Extensions(Rx)的优点在于能够将传统的异步编程方式从支离破碎的代码调用中解放出来。传统的采用回调的异步编程方式会使得代码很零散,尤其是异步嵌套异步的时候,代码块很难管理。这个和一般的编程语言不推荐使用goto语句的原因是一样的。Rx能够使的我们可以将异步代码写到一个单独的方法中,使得代码可读性和可维护性大大增强。 前一篇文章中我们了解了Rx中的一些比较重要的操作符。本文中我们将会学习如何将这些应用到我们的应用程序中。 1. 异步调用 在开始讨论异步调用之前,我们来看看同步调用。下面的代码是一个简单的Console程序。 static void Main(string[] args) { int x = 4; int y = 5; int z = PlusTwoNumber(x, y); …

Reactive Extensions Rx Observable

Kinect控制PowerPoint播放

有了Kinect,我们就可以使用手势来控制幻灯片的播放,而不需要一边演讲一遍按键盘或者手持一个ppt控制器,我们只需要做的就是轻轻的向右或者向左挥一下手就可以控制幻灯片向前或者向后翻一页,酷吧。虽然可能在演讲的时候做这个动作可能有点奇怪,但是这也是一种控制幻灯片放映的好方法。 实现Kinect控制幻灯片播放很简单,主要思路是:使用Kinect捕捉人体动作,然后根据识别出来的动作向系统发出点击向前,向后按键的事件,从而使得幻灯片能够切换。 这里的核心功能在于手势的识别,我们在开发之前需要定义怎么样的手势算是向前或者向后切换幻灯片。手势和姿势识别在我的Kinect开发入门第九,第十,十一篇文章有详细介绍。本文仅讨论主要思路及关键代码部分。 一 通过姿势识别实现ppt控制 姿势(pose)识别是通过关节点与关节点之间的相对位置关系来进行判断,相对来说比较 …

Kinect SDK Kinect

Reactive Extensions入门(3):Rx操作符

在第一篇文章里讲过,Reactive Extensions(Rx)是对LINQ的一种扩展,其关键的特性在于他不是基于IEnumerable接口的,Rx是基于IObservable接口,这个接口用来迭代Observable集合。自然Observable集合是基于观察者模式设计的。Observable模式的关键在于被观察的对象有一些行为或者属性,观察者可以注册某些感兴趣的属性或者行为。当被观察者发生状态改变时,会通知观察者(通常是发起一个事件)。 观察者模式是发布和订阅模式(Publish and Subscribe Pattern)的一个子集,发布者可以产生一些告知其订阅者他的一些状态信息。在Rx中Observable集合有订阅者,简单来说,就是观察Observable集合的行为,称之为对象订阅了这一集合。 在Rx中,Observable集合在有新的元素添加到集合 …

Reactive Extensions Rx Observable

Kinect for Windows SDK 1.5 的改进及新特性

昨天晚些时候,微软发布了Kinect for Windows SDK 1.5版本,新版本SDK对1.0版本的进行了较大的改动和更新。本文根据Microsoft Kinect for Windows SDK and Toolkit – v1.5 Release Notes 和 Kinect for Windows: SDK and Runtime version 1.5 Released 这两篇文章,并结合自己的安装和体验整理而成。 1. SDK 1.5 的下载和安装 新版本SDK和1.0版本的SDK完全兼容,如果您之前安装过1.0的,可以直接安装1.5的SDK,如果您之前的开发版本是Beta版的,则需要卸载之后再安装SDK 1.5版本。在Kinect for Windows SDK 1.0版本中,SDK和示例文件是打包一起安装的。而在SDK1.5 …

Kinect SDK Kinect face traking Kinect for Windows SDK

Reactive Extensions入门(2):LINQ操作符

LINQ和Reactive Extension(Rx)之间有很深的联系。本文将简要介绍LINQ中的一些比较重要的操作符和方法,因为这些方法在LINQ和Rx中的作用类似。 首先以一个例子展示LINQ的语法,然后讨论一些比较重要的LINQ操作,最后以两个例子展示了这些方法的综合运用。 1. LINQ语法 LINQ有许多分支,每一个分支对应操作不同的数据类型。LINQ to Object用来操作内存中的对象,而LINQ to SQL用来和数据库中的数据进行交互。虽然LINQ to Object更好的能揭示LINQ本质,但是他们本质上都是相同的。 考虑下面的代码。 var primes = new List<int>() { 1, 2, 3, 5, 7, 11, 13, 17, 19 }; var query = from num in …

Reactive Extensions LINQ SelectMany

[译]Kinect for Windows SDK开发入门(十五):进阶指引 下

上一篇文章介绍了Kinect for Windows SDK进阶开发需要了解的一些内容,包括影像处理Coding4Fun Kinect工具类库以及如何建立自己的扩展方法类库来方便开发,接下来介绍了利用Kinect进行近距离探测的一些方法,限于篇幅原因,仅仅介绍了近距离探测的三种方式。 本文接上文将继续介绍近距离探测中如何探测运动,如何获取并保存产生的影像数据;然后将会介绍如何进行脸部识别,以及介绍全息图(Holograme)的一些知识,最后介绍了一些值得关注的类库和项目。 2.4 运动识别 目前,利用运动识别(motion detection)来进行近景识别是最有意思的一种方式。实现运动识别的基本原理是设置一个起始的基准RGB图像,然后将从摄像头获取的每一帧影像和这个基准图像进行比较。如果发现了差异,我们可以认为有东西进入到了摄像头的视野范围。 …

Kinect SDK Kinect Emgu CV Face Identify Detecting Motion Kinect Hologram

[译]Kinect for Windows SDK开发入门(十四):进阶指引 上

前面十三篇文章介绍了Kinect SDK开发中的各个方面的最基础的知识。正如本系列博闻标题那样,这些知识只是Kinect for windows SDK开发的入门知识。本文将会介绍Kinect进阶开发需要了解一些知识(beyond the basic)。 读者可能会注意到,在学习了前面十三篇文章中关于Kinect开发的方方面面,如影像数据流、景深摄像机、骨骼追踪、麦克风阵列、语音识别等这些知识后,离开发出一些我们在网上看到的那些具有良好用户体验的Kinect应用程序还是显得捉襟见肘。Kinect SDK在某种意义上只是提供了一些其它Kinect类库的相同或者更好的功能。为了进一步提高Kinect for Windows应用程序的应用体验,我们需要了解一些其他的和Kinect有关的开发技术和类库。Kinect的真正应用潜力是和其他技术进行整合。 本文将会介绍 …

Kinect SDK Kinect Coding4Fun Kinect

[译]Kinect for Windows SDK开发入门(十三):语音识别 下

上一篇文章介绍了Kinect中语音识别的基本概念,以及一些语音处理方面的术语。在此基础上使用Kinect麦克风阵列来进行音频录制的例子说明了Kinect中音频处理的核心对象及其配置。本文将继续介绍Kinect中的语音识别,并以两个小例子来展示语音识别中的方向识别和语音命令识别。 1. 使用定向麦克风进行波速追踪(Beam Tracking for a Directional Microphone) 可以使用这4个麦克风来模拟定向麦克风产生的效果,这个过程称之为波束追踪(beam tracking),为此我们新建一个WPF项目,过程如下: 1. 创建一个名为KinectFindAudioDirection的WPF项目。 2. 添加对Microsoft.Kinect.dll和Microsoft.Speech.dll的引用。 3. 将主窗体的名称改为& …

Kinect SDK Kinect Speech Recognition