Hello World
Spiga

HTML Metro开发里的数据绑定(1):WinJS.Binding.List

2012-05-01 22:53 by 老赵, 3519 visits
摘要:前段时间接触了一些WPF开发方面内容,了解如何使用MVVM模式将界面与模型几乎彻底分离开来,只通过其强大的绑定功能连接两者,让人叹为观止。Win8的Metro开发支持使用XAML(配合C#,C++等语言)或是HTML(配合JavaScript),前者的控件和数据的绑定已经相当完备,而后者一直没有一个标准的模型。之前我也简单了解过如Knockout这样的绑定支持与MVVM模式实现,理论上说也完全可以在Metro开发里使用,但其实Metro开发本身也已经提供了一些内置的绑定支持,基本对应于XAML/C#开发里涉及到的ObservableCollection与INotifyPropertyChanged。 阅读全文

关于C#中async/await中的异常处理(下)

2012-04-12 09:26 by 老赵, 12162 visits
摘要:上一篇文章里我们讨论了某些async/await的用法中出现遗漏异常的情况,并且谈到该如何使用WhenAll辅助方法来避免这种情况。WhenAll辅助方法将会汇总一系列的任务对象,一旦其中某个出错,则会抛出“其中一个”异常。那么究竟是哪个异常?如果我们要处理所有的异常怎么办?我们这次就来详细讨论await操作在异常分派时的相关行为。 阅读全文

关于C#中async/await中的异常处理(上)

2012-04-11 09:15 by 老赵, 17543 visits
摘要:在同步编程中,一旦出现错误就会抛出异常,我们可以使用try…catch来捕捉异常,而未被捕获的异常则会不断向上传递,形成一个简单而统一的错误处理机制。不过对于异步编程来说,异常处理一直是件麻烦的事情,这也是C#中async/await或是Jscex等异步编程模型的优势之一。但是,同步的错误处理机制,并不能完全避免异步形式的错误处理方式,这需要一定实践规范来保证,至少我们需要了解async/await到底是如何捕获和分发异常的。在开发Jscex的过程中,我也在C#内部邮件邮件列表中了解了很多关于TPL和C#异步特性的问题,错误处理也是其中之一。在此记录一下吧。 阅读全文

使用Jscex改进Node Club(4):改写首页

2012-03-10 14:11 by 老赵, 3621 visits
摘要:上次我们分析了Node Club的首页实现,了解了它的功能以及目前的实现方式。这次我们便来使用尝试使用Jscex来改进首页的逻辑。作为一个面向开发人员的工具,Jscex除了隐藏必要的复杂度之外,还要让目标程序“可控”,无论是串行、并发还是逻辑表达——Jscex使用JavaScript语法,保证了程序逻辑的灵活与可控,尽可能地避免出现Leaky Abstraction。EventProxy的确提供了一种“完全并发”的抽象,但是对于需要“可控并发”,或是“串行执行”的逻辑和场景便显得无能为力了。 阅读全文

使用Jscex改进Node Club(3):分析首页实现

2012-02-29 23:44 by 老赵, 3105 visits
摘要:上次我们已经将Jscex成功地引入项目,现在便可以正式开始关注Node Club的实现了。Node Club中存在大量基于回调的JavaScript代码,颇有无从下手的感觉。既然如此,我们便随便挑一个,从首页入手吧!首页的目标其实很简单,加载几部分数据组成一个对象,再交给模板引擎生成HTML代码并输出。Node Club使用EventProxy类库来尝试解决大量异步函数的嵌套问题,但是在我看来,在这里使用EventProxy并没有带来太多的益处,从简化编程的角度来说,效果十分有限。 阅读全文

使用Jscex改进Node Club(2):引入Jscex类库

2012-02-20 21:57 by 老赵, 3291 visits
摘要:之前我们已经将Node Club在本地运行起来了,接着我们便来引入Jscex类库,为常用异步方法扩展出Jscex版本,并试着编写一些最简单的Jscex代码。在编写Jscex方法中,我们无需操作回调函数,只要在异步点上使用$await进行“等待”即可。我们也无需显式地处理错误,因为一旦出现错误便会抛出异常,异常如果没有被某个try…catch捕获到,则会顺着调用路径一路向上传递,直到被我们的代码或是系统捕获为止。Jscex将简单易用的传统编程模式与实践重新带回异步编程中,做到“同步编写,异步执行”的效果。这就是Jscex诞生的意义。 阅读全文

使用Jscex改进Node Club(1):运行Node Club网站

2012-02-20 14:24 by 老赵, 6133 visits
摘要:一直想做个相对完整的项目来演示下Jscex的使用,可惜缺少创意和精力,一直没能实现。前几天看到Node Club将其网站开源了,不禁让我十分欢喜。Node Club网站是个真实案例,复杂度适中,既是Jscex的典型使用场景,又能避开我不擅长的网页样式设计和制作,简直是一个再合适不过的基础样板了。周末我大致看了下代码,也试着将几个部分使用Jscex改进了一下,效果也十分显著,于是打算写作一个系列指引,希望可以对Jscex类库的推广有所帮助。在此第一篇,自然是最基本的环境建设开始说起。 阅读全文

增强Jscex目标代码可调试性:已包含输入代码

2012-02-16 23:30 by 老赵, 2593 visits
摘要:经过了糜烂堕落的春节长假,Jscex的改进和推广又该步入正轨了。尽管使用Monad形式的目标代码已经比状态机展开要易读许多,甚至可以直接翻译回原始代码,但总还是有朋友被“编译”两个字和略显复杂的代码吓退。因此我最近一直在修改Jscex的代码生成器,即将发布的0.6.0版本的编译器会在目标代码已经包含了原始的输入代码,并且和目标代码行行对应。如今在调试Jscex的代码时已经可以把注意力更多放在原始代码上,而不用肉眼去识别相对复杂的Monad代码了。 阅读全文

一份用于学习单元测试的案例需求(实现)

2012-02-03 18:44 by 老赵, 6716 visits
摘要:终于把这份实现写完了,比想象中要花时间,尤其是为了可测试性而增加的代码结构。我并没有使用TDD来开发这个类库,依然是先写代码,再写单元测试,测试代码也只关注了代码主体,没有刻意去测试边界情况。一部分原因是其中都是内部实现,可以把握住输入,令一部分原因是这段实现主要是各种交互,而没有复杂的业务逻辑。我个人满足于单元测试而不是测试驱动开发,但如果您是使用测试驱动开发(TDD)甚至传说中的BDD来实现这个方案,那就更好不过了。 阅读全文

使用Mono.Cecil解决无法Mock非虚方法和密闭类的问题

2012-01-12 22:50 by 老赵, 4769 visits
摘要:之前我在微博上抱怨单元测试会让代码中的接口数量激增,有些同学回复说,这是因为在C#里只能Mock接口,如果是Java的话便可以Mock普通类。不过其实在Mock实现方面,C#和Java没有任何区别,只不过C#的成员默认“非虚”而已,因此无法使用继承后重载的方式实现Mock行为。我不喜欢默认的虚方法,但我也十分不愿意为了“单元测试”这个与具体功能无关的角度而破坏设计本意。幸好,我们可以用Mono.Cecil在单元测试执行之前,将目标程序集里的所有方法修改为虚方法,并去除所有密闭标记,这样遍可以轻而易举的解决无法Mock的问题了。 阅读全文

求助:一份用于学习单元测试的案例需求

2012-01-07 15:23 by 老赵, 5332 visits
摘要:一直熟知单元测试的重要性,也算是了看了几本这方面的经典书籍,但是真开始上手的时候总会遇到各种各样的坎。例如,为什么总感觉自己的单元测试之间有较多的重合,为什么每个单元测试都要准备那么多依赖?有的说法是,这意味着代码设计不够好,单元测试也有问题,或者说没有使用TDD的缘故,等等。但是,现实开发过程中在这方面也颇感无力。前段时间在微博上咨询了几个问题,感觉收获不大,这次干脆整理一份需求,仔细认真向高手学习一下代码设计,单元测试,甚至测试驱动开发的方式吧。我也会准备一些礼物来感谢一部分同学的帮助。 阅读全文

Node.js中相同模块是否会被加载多次?

2011-12-27 23:19 by 老赵, 6835 visits
摘要:JavaScript的包管理一直是个软肋,但既然它流行了,既然人们想要用它做大事了,就要开始为它制定一些模块的约定。Node.js使用了CommonJS模块机制,最近在InfoQ上也有一篇文章讨论了这方面的问题。这篇文章提到Node.js在载入模块时,如果之前该模块已经加载过则不会有重复开销,因为模块加载有缓存机制。这篇文章是我初审的,当时也正好在思考Jscex在Node.js使用时的模块化问题,但研究了它的规则之后,我发现在某些情况下还是可能加载多次。现在我们便来分析这个问题。 阅读全文

受禁锢的异步编程思维

2011-12-19 21:49 by 老赵, 7951 visits
摘要:最近一直在努力推广,补充了很多中文文档和示例,因此博客上都已经有两篇文章有了“上”而没有“下”,即使最复杂的图示也已经绘制完毕。在推广Jscex的过程中,我发现有个比较明显的问题是,许多使用JavaScript的程序员已经习惯旧有的操作方式,甚至推崇一些据说很漂亮“模式”。但其实跟许多GoF模式是在修补OO语言的不足类似,很多异步模式都只是因为JavaScript语言特性不足而设计出来的“权宜之计”。我们在传统JavaScript编程环境下并没有其他选择,单纯地认为这是“美”,说实话只不过是一种安慰罢了。 阅读全文

Jscex正式发布至npm

2011-12-01 14:23 by 老赵, 4574 visits
摘要:之前一直不敢将Jscex发布至npm上,因为有些问题还没有完全拿定主意,例如“取消”任务的模型。一个异步任务一定是需要取消功能,尽管这个模型不一定需要直接定义在Jscex里。但是我还是为Jscex提供了一个统一的标准化的取消模型,一是易于使用,二是提供模型这个之后,API在设计时可以有更多表现力(例如,现在的task的status可能是canceled了)。上周末我实现这个模型(其实也就十几二十行代码),昨天我又修改了模块的加载方式,使其支持CommonJS规范。在发布到npm之后,现在可以说Jscex已经正式对外公开了! 阅读全文

尾递归对时间与空间复杂度的影响(上)

2011-11-15 22:12 by 老赵, 7569 visits
摘要:以前我也在博客上简单谈过“尾递归”及其优化方式方面的话题。前几天有同学在写邮件向我提问,说是否所有的递归算法都能改写为尾递归,改写成尾递归之后,是否在时间和空间复杂度方面都能有所提高?他以斐波那契数列为例,似乎的确是这样的情况。我当时的回答有些简单,后来细想之后似乎感觉有点问题,而在仔细操作之后发现事情并没有理论上那么简单,因此还是计划写篇文章来讨论下这方面的问题。 阅读全文

挖坟鞭尸:当年Sun公司的白皮书《About Microsoft “Delegates”》

2011-11-09 01:07 by 老赵, 7970 visits
摘要:这是一桩当年的Sun公司与Java的旧事,还要追溯到C#还没出现,微软还在搞J++的时代。这篇著名的白皮书便是《About Microsoft “Delegates”》,其中列出了Sun眼中的Delegate的多个缺点。最后,在白皮书里信誓旦旦地写到:“Bound Method Reference并不是语言发展的正确道路”。我的感觉是:不谈Java语言设计者的水平如何,至少这篇白皮书的作者,在语言设计的能力或品味上几乎落后了Anders Hejlsberg十年。从我之前翻译过的一篇文章来看,Anders一直扮演着指引语言发展方向的作用,这也是为什么C#在这十年的发展能比Java要健康得多的主要原因之一。 阅读全文

老赵书托(4):浪潮之巅(内含牢骚,不喜勿入)

2011-11-06 14:35 by 老赵, 16063 visits
摘要:我是一个码农,一个很彻底,很标准的码农,自认为比我遇到过的绝大部分技术人员要码农得多。我喜欢搞技术,玩技术,不喜欢搞管理,搞人,或是搞产品等等。我是死脑筋,凡事都要想很多遍,想个明白,想不明白就不表态。我不喜欢猜测,不喜欢无法验证的事物,因此我成不了那种常见的,著名的,经常指点江山的分析师。每次有人问我对某某事物未来的看法,十有八九我只会婉言谢绝。其实照我的个人口味,我是不太会对《浪潮之巅》这中类型的书感兴趣的,但之前在网上看过谷歌黑板报上的连载,感觉不错,因此也去“搞”来一本品读一番。 阅读全文

使用Mono.Cecil辅助ASP.NET MVC使用dynamic类型Model

2011-09-06 00:21 by 老赵, 11234 visits
摘要:这也是之前在珠三角技术沙龙上的示例之一,解决的是在ASP.NET MVC使用dynamic类型Model时遇到的一个真实问题。C# 4编译器支持dynamic类型,因此在编写页面模板的时候自然就可以把它作为视图的Model类型。表现层的需求很容易改变,因此dynamic类型的Model可以减少我们反复修改强类型Model的麻烦,再配合匿名类型的使用,可谓是动静相宜,如鱼得水。不过,如果把一个匿名类型直接作为Model交给视图去使用,在默认情况下会抛出异常。我们可以用Mono.Cecil来改变这一情况。 阅读全文

在.NET平台下使用C#交互式控制台(上):简介

2011-09-01 00:25 by 老赵, 8520 visits
摘要:上周日在广州的珠三角技术沙龙上,我的演讲题目是“Mono之于.NET程序员”。Mono一直是我十分喜爱的产品,我也一直关注它的发展,总有很多人用各种方式对它进行FUD,甚至是.NET程序员自己。这其实跟程序员使用盗版一样,自掘坟墓,是种无比愚蠢的行为。在演讲中,我提到.NET程序员可以如何从Mono项目中得到帮助,现在便以C#交互式控制台为例,演示下在.NET平台下使用Mono项目的常见方式。 阅读全文

谈谈年度最佳代码“不管你们信不信,反正我信了”

2011-08-05 23:15 by 老赵, 21240 visits
摘要:最近有段十分流行的代码,是从江湖传闻“身怀八蛋”的铁道部发言人王勇平同志的一句名言:“不管你们信不信,反正我信了……这是生命的奇迹……它就是发生了”所引申出来的。这段代码虽然只是在调侃,但是围绕这段代码也产生了一些讨论(如代码风格,编程规范等等),在此顺手记录一下,就当无聊罢。 阅读全文
< Prev 1 2 3 4 5 6 7 8 9 ... 31 Next >
使用Live Messenger联系我