老赵书托(1):写在前面
最近我思考和总结地越来越多,感觉也是时候把自己许多年来的经验进行一番总结和整理。谈基础与能力的时候,我把人脑比喻为“存储器”,里面存放了“知识”和“能力”等信息。而思考和总结便可以看作对这些信息的索引进行整理,好比数据库在运行一定时间之后需要整理索引碎片一样。因为种种原因,一些重要的内容可能已经淡忘...
语言真是不重要的吗?谈语言的*层次*与技术的三六九等
关注——或“专注”于多语言编程之后,老赵对于语言的关注也越来越多,对于语言在编程中所带来的“美感”也有了越来越深的体会,还在博客的标题中加上“追求编程之美”。关注语言多了,关注纯粹的编程实践多了,自会有所比较,然后写出了引人注目的《为啥老赵不喜欢Java*语言*》。这篇文章所得到的负面评论的确也和想...
WPF学习流水账 4.30 - TestApi(1)
到 www.CodePlex.com/wpf . 看到了TestApi的东东。 http://www.codeplex.com/TestApi。好像是用于测试和调试WPF的工具。可能是在程序中实现snoop类似功能的东西。 功能点: 1. Input Injection(输入注入?) 模拟用户输入...
关于基础与能力,谈一点我的看法
时不时会有朋友写信问老赵学习上的一些迷茫,其中都有一些共性。例如说不知道该如何学习,说不知道朝哪个方向前进。也例如大家虽然基本上都知道“算法”的重要性,但是却总觉平时用不到。说它锻炼能力,但“能力”是看不见摸不着的,学着学着就会“麻木”,感觉就“学不进去”了。当然这方面有几个原因,有主观也有客观的,...
使用ASP.NET Abstractions增强ASP.NET应用程序的可测试性
概述 在阅读本文之前,兄弟们请先注意两点: 我们现在谈的是传统ASP.NET应用程序的可测试性,而不是ASP.NET MVC应用程序的可测试性。 我们现在谈的是“增强”,而不是说传统ASP.NET应用程序做不到良好的可测试性,一切皆在人为。 关于可测试性的重要性,老赵觉得已经不需要再过多强调了...
事理越辩越明,那么就来详细说说为什么我不喜欢Java*语言*
写在前面:这篇文章是在谈Java“语言”,文章里面也会再强调一下的。支持.NET的朋友也不用认为Java平台就此没落了,搞Java也没必要用Java平台的其他优势来反驳。咱吵架也要专业点,不是么。最近我对Java语言唱衰似乎凶狠了一点,让有些朋友不是很爽,认为我不负责任凭个人感觉乱说话,影响不好。这...
高阶函数、委托与匿名方法
http://www.infoq.com/cn/articles/higher-order-function 这是几个月前就写的文章,只是一直忙于QCon的各项事宜,最近才发表出来。这篇是对.NET中委托,匿名方法和高阶函数使用的一个介绍,非常简单,目的是强调一下C#中对于高阶函数的使用,体现一下现...
游戏人生Silverlight(4) - 连连看[Silverlight 2.0(c#)]
[索引页][源码下载]游戏人生Silverlight(4) - 连连看[Silverlight 2.0(c#)]作者:webabcd介绍使用 Silverlight 2.0(c#)开发一个连连看游戏玩法用鼠标左键选中卡片,如果选中的两卡片间的连线不多于 3 根直线,则选中的两卡片可消除在线DEMO思...
辅助方法不嫌多
经过了一些《表达式树》、《尾递归》等冷门内容,我们再回到一些人民群众喜闻乐见的话题上来,继续《最佳实践》的讨论。 在开发项目过程中,总是会出现大量的辅助方法,例如字符串处理,代码检验,格式输出等等。如果您发现自己在多次编写类似的代码,可能就要想着如何把这些代码进行提取,变成辅助方法(亦或是类库甚至框...
尾递归与Continuation
这几天恰好和朋友谈起了递归,忽然发现不少朋友对于“尾递归”的概念比较模糊,网上搜索一番也没有发现讲解地完整详细的资料,于是写了这么一篇文章,权当一次互联网资料的补充。:P 递归与尾递归 关于递归操作,相信大家都已经不陌生。简单地说,一个函数直接或间接地调用自身,是为直接或间接递归。例如,我们可以使用...
使用IronPython检测ASP.NET程序状况(下)
在上一篇文章中,我们在一个请求中执行了IronPython代码,通过这个方法我们可以轻松地的检查系统运行的状态,或对系统进行一些简单修改。但是这种做法只能检查系统在当前时刻的状态,在很多情况下,我们需要对系统的请求进行一段时间的采样。对于简单的数据(例如每秒执行的请求数量,请求时间),我们可以通过查...
使用IronPython检测ASP.NET程序状况(上)
在ASP.NET应用程序运行过程中,很可能会遇到各种意料之外的问题。如果在开发环境下,我们可以设置断点,对程序状态一探究竟。但是很显然,在产品环境中我们几乎无法使用这样的状态。也正因为如此,Dump一个内存快照并进行分析才成为一种“高级技术”,同时在线调试也成为一种需要结合技术能力、分析能力,甚至抗...
谈表达式树的缓存(5):引入散列值
到目前为止,我们已经实现了三种缓存方式:首先我们设法构建唯一字符串,但是由于它的代价较高,于是我们使用了前缀树进行存储;又由于前缀树在实际操作中所花的时间和空间都有不令人满意之处,我们又引入了二叉搜索树。那么二叉搜索树又有什么缺点呢?其实前文已经谈到过了,那就是从理论上来说,它的时间复杂度相对前两个...
谈表达式树的缓存(4):使用二叉搜索树(AVL树)
上一篇文章中谈到的前缀树实现方式,时间复杂度从理论上来讲已经达到了最优,而空间复杂度理论上也可以做到较优。但是理论和实际是有差别的,而对于上文前缀树的实现来说,这两方面并不是非常理想: 时间:前缀树时间复杂度为O(m)的前提是每次哈希表查找操作的时间复杂度为O(1),不过这个O(1)与一次数值比较...
游戏人生Silverlight(3) - 打苍蝇[Silverlight 2.0(c#)]
[索引页][源码下载]游戏人生Silverlight(3) - 打苍蝇[Silverlight 2.0(c#)]作者:webabcd介绍使用 Silverlight 2.0(c#)开发一个打苍蝇的游戏玩法用鼠标控制瞄准镜的移动,鼠标左键开火在线DEMO思路1、苍蝇的移动轨迹用一个简单的公式计算,即正...
谈表达式树的缓存(3):使用前缀树
在上一篇文章里我们设法将前缀树构造为一个唯一的字符串,然后使用字符串作为key缓存在字典中。这个想法非常直接,做法也不困难(在遍历时记录详细信息便可)。不过事实上,老赵在思考表达式树的缓存问题时,这种字符串拼接的方式只存在于脑海当中,而上文的实现是为了这一系列文章的完整性而特地编写的。这是因为它的缺...