代码改变世界

F#中的异步及并行模式(3 - 上):代理的基本使用

2010-03-15 01:35 by Jeffrey Zhao, 6634 阅读, 收藏, 编辑
摘要: 之前的文章中我们了解了F#中并行及交互式程序的编程方式。在本系列的第3部分中,我们会来探索F#中轻量级的,交互式的代理,以及与代理有关的一些模式,包括“隔离的内部状态”。(译注:由于原文较长,因此译文分为两段,目前是第一段,讲解了F#中异步代理的基本使用方式。)阅读全文

一种以ID特征为依据的数据分片(Sharding)策略

2010-03-09 21:51 by Jeffrey Zhao, 17115 阅读, 收藏, 编辑
摘要: 假如您有一个应用程序,随着业务越来越有起色,系统所牵涉到的数据量也就越来越大,此时您要涉及到对系统进行伸缩(Scale)的问题了。系统的扩展方式往往分为“向上伸缩”和“向外伸缩”两种,而从“硬件成本”或是“系统极限”的角度来说,“向外伸缩”一般都会优于“向上伸缩”,因此大部分上规模的系统都会在一定程度上考虑“向外”的方式。由于许多系统的瓶颈都处在数据存储上,因此一种叫做“数据分片(Database Sharding)”的数据架构方式应运而生,本文便会讨论这种数据架构方式的一种比较典型的实现方式。阅读全文

F#中的异步及并行模式(2):反馈进度的事件(包含Twitter示例)

2010-03-08 00:33 by Jeffrey Zhao, 6648 阅读, 收藏, 编辑
摘要: 上一篇文章中谈到,“异步CPU并行”与“异步I/O并行”两个模式的限制之一便是无法通知组合操作的进度或结果。在这篇文章中,我们讲关注一个常见的异步模式:反馈进度的事件(Reporting Progress with Events),这是一种用于强大而优雅的做法,用于在某个边界之后对并行的执行过程加以封装,并同时汇报执行的结果或是进度。在文章最后,我们会使用这个设计模式开发一个示例,从Twitter中获取一系列记录。阅读全文

谈谈微软技术,以及对待技术应有的态度

2010-03-04 23:20 by Jeffrey Zhao, 19253 阅读, 收藏, 编辑
摘要: 昨晚在家上网,一边对那些有趣而奇妙的微软技术感叹不已,同时却又产生出一种忿忿之情。为什么?因为在国内的技术圈子里,经常有一种在我看来莫名奇妙的鄙视微软技术的风气。这样的风气在国内的推特圈里也非常明显,基本上只有我一个人对微软的技术抱有好感并“勇于”和大量意见向左的人争辩。忿忿之余,我便在推特上不断表达我对这种风气的抱怨及否定,在这个过程中也基本表达了我在这方面的大部分看法,在这里也进行一番总结总结吧。同时,我也想对微软社区的许多弟兄讲一些话。 阅读全文

F#中的异步及并行模式(1):并行CPU及I/O计算

2010-03-03 23:37 by Jeffrey Zhao, 8239 阅读, 收藏, 编辑
摘要: F#是一门并行(parallel)及响应式(reactive)语言。这个说法意味着一个F#程序可以存在多个进行中的运算(如使用.NET线程进行F#计算),或是多个等待中的回应(如等待事件或消息的回调函数及代理对象)。 F#的异步表达式是简化异步及响应式程序编写的方式之一。在这篇及今后的文章中,我会探讨一些使用F#进行异步编程的基本方式──大致说来,它们都是F#异步编程时使用的模式。我们从两个简单的设计模式开始:CPU异步并行(Parallel CPU Asyncs)和I/O异步并行(Paralle I/O Asyncs)。阅读全文

MongoDB与Tokyo Tyrant性能比较(2):并发写入操作

2010-02-26 19:38 by Jeffrey Zhao, 17385 阅读, 收藏, 编辑
摘要: 在上一次的测试中我们比较了MongoDB与Tokyo Tyrant的Table Database两种存储方式的性能。不过由于条件限制,我只能在自己的MBP上测试,而这至少会带来两个问题。首先,真实环境下客户端和服务器是通过内网连接的,它的性能比本地回环要慢不少,一些和网络传输性能有关的问题可能会体现不出。其次,由于无法进行并发测试(并发测试的客户端资源占用较高,放在同一台机器上准确性较差),这又和生产环境有很大区别了。因此,我前两天向同事借了台性能测试用的机器,希望可以得到更可靠的结果。阅读全文

MongoDB与Tokyo Tyrant性能比较(1):基础CRU操作

2010-02-24 23:45 by Jeffrey Zhao, 22119 阅读, 收藏, 编辑
摘要: 以前的项目大都把数据存放在关系型数据库中,但是它们的问题比较明显的,一是在数据量上升的情况下伸缩性比较差,且进行结构调整的代价比较高。因此现在有个所谓NoSQL的“运动”也逐渐普遍起来了,它便是借助一些非关系型存储方式来开发项目。因此在新项目里,我也想尝试一下使用之前一直只是“听说”的存储方式。MongoDB和Tokyo Tyrant都是其中的典型代表,那么现在就来比较一下它们对于基本CRU操作的性能。阅读全文

为什么JVM上没有C#语言?浅谈Type Erasure特性

2010-02-22 23:50 by Jeffrey Zhao, 14968 阅读, 收藏, 编辑
摘要: JVM上目前已经有许多语言了:JRuby,Jython,也有一些特定于JVM平台的语言,如Scala和Groovy等。但是,为什么JVM上没有C#语言呢?按理说,这门和Java十分相似,却又强大许多的语言更容易被Java程序员接受才对。有人说,Sun和微软是对头,怎么可能将C#移植到JVM平台上呢?嗯,有道理,但是为什么社区里也没有人这么做呢(要知道JVM上其他语言都是由社区发起的)?其实在我看来,这是受到了技术方面的限制。例如:Type Erasure。阅读全文

哥谈的是语言,不是寂寞

2010-02-20 21:48 by Jeffrey Zhao, 14040 阅读, 收藏, 编辑
摘要: 经常看到一些文章在谈论语言,例如“哪个语言更有前途”,“语言选择是否关键”。我是个语言粉丝,但是看到这些文章总有一些奇怪的感觉。因为在我看来,这些文章谈的东西都不是我眼中的语言——可能与国内技术环境有关,语言本身被淡化了,例如,谈语言的时候涉及更多的却是“平台”方面的内容。那么我现在便来描述一下我眼中的“语言”该如何谈论吧——下次在我猛砍Java语言时也好有个参考。阅读全文

浅谈字节序(Byte Order)及其相关操作

2010-02-10 23:05 by Jeffrey Zhao, 18597 阅读, 收藏, 编辑
摘要: 最近在为Tokyo Tyrant写一个.NET客户端类库。Tokyo Tyrant公开了一个基于TCP协议的二进制协议,于是我们的工作其实也只是按照协议发送和读取一些二进制数据流而已,并不麻烦。不过在其中涉及到了“字节序”的概念,这本是计算机体系结构/操作系统等课程的基础,不过我还是打算在这里进行简单说明,并且对.NET中部分类库在此类数据流处理时的注意事项进行些许记录与总结。阅读全文

总结:史上第一混乱、程序员的爱情、Nobody & Sorry Sorry

2010-02-07 21:19 by Jeffrey Zhao, 12872 阅读, 收藏, 编辑
摘要: 星期六是我的休息日,这天一般我不安排自己做什么和工作有关的事情,一般就是去看看电影,出去逛逛,或者在家上上网吹吹牛。昨天总结了一部分由推特上的讨论,现在继续剩下的一部分。不过,这次的内容可能就要和技术或产业略远一些了,其中大部分是我自己的一些体会和感想。现在我打算谈三个东西,一是《史上第一混乱》这部话剧,《程序员的爱情》这本小说,以及Nobody和Sorry Sorry(您不知道这是啥?你成奥特曼啦!)。阅读全文

总结:0 bug事件、交大ACM夺冠

2010-02-07 03:51 by Jeffrey Zhao, 17455 阅读, 收藏, 编辑
摘要: 如果您还没有上推特(或是还没有想到办法上),那您失去的不光是一个风靡世界的网络应用,您同时还失去了一个优秀的信息获取平台及讨论环境。目前国内大部分靠谱的技术专家都在推特上有帐号,您几乎不会错失任何有价值的信息,更可以参与一些有价值讨论。周六是休息日,因此也在推特上和大家聊得不亦乐乎。不过推特的一个缺陷可能便是难以留住有价值的信息,它们会随着时间推移渐渐消失,因此还是及时记录一下吧。阅读全文

李笑来激起千层浪,赵姐夫力拒众强敌

2010-02-03 00:49 by Jeffrey Zhao, 21034 阅读, 收藏, 编辑
摘要: 昨天晚上,李笑来(@xiaolai)老师的无心之语却引起了推特上一次前后长达1个多小时的讨论——当时他似乎只是随手发了一句“Apple告诉我们的铁律是:表面功夫一定要做足”便不见了踪影,但是这句话立即引起了众果粉的共鸣。此后,我(@jeffz_cn)的一句评论又引起了众人对微软开发平台的批判之声。在这次讨论中,几乎只有我孤军奋战为.NET平台进行辩解。因此事后有人给出一副对联为此次争论作出总结:李笑来激起千层浪,赵姐夫力拒众强敌。阅读全文

从今日起正式加入水果党

2010-02-02 00:08 by Jeffrey Zhao, 10581 阅读, 收藏, 编辑
摘要: 想来我现在的笔记本也用了将近3年,虽然至今没有出现过任何问题,但更新换代似乎也不是件让人无法接受的事情——再加上老爸正好也需要一台笔记本,于是我想,不如就乘此机会升一下级吧。不过其实我本没有打算那么着急,只是两天前忽然出现了一个千载难逢的机会,一台十分便宜的MBP放在我面前,于是我当机立断,即刻入手。因此我在此庄严宣布:从今日起,我正式加入水果党。阅读全文

光有逻辑也是万万不能的

2010-02-01 00:14 by Jeffrey Zhao, 11349 阅读, 收藏, 编辑
摘要: 之前我多次强调“逻辑”在讨论问题时的重要性,我也多次表示说,如果大家都运用合适的逻辑思维来讨论问题,那么论坛上8成吵架可以避免。现在我也想再次探讨一下这个话题,只不过这次我想反过来说:光有逻辑也是万万不能的。除了“逻辑”这个东西之外,讨论问题时还有很多其他东西值得注意。阅读全文

数组排序方法的性能比较(5):对象大小与排序性能

2010-01-29 00:09 by Jeffrey Zhao, 7830 阅读, 收藏, 编辑
摘要: 在我公开测试结果之后,有朋友也进行了其他测试。在测试中我使用的是int数组,经过分析之后我们了解到Array.Sort对于int数组有特殊的优化。于是,某些朋友使用了一些引用类型的数组进行排序,得到Array.Sort方法的性能落后于LINQ排序——虽然由于测试方式的问题,这个结果和结论都不太妥当。不过在讨论的过程中,我们都意识到了一个问题:在其他条件不变的情况下,引用类型的字段越多,Array.Sort方法所需时间就越久。这次我们就来讨论一下这个问题。阅读全文

数组排序方法的性能比较(4):LINQ方式的Array排序

2010-01-28 00:06 by Jeffrey Zhao, 7961 阅读, 收藏, 编辑
摘要: 经过前两篇文章的分析,我们已经了解了Array.Sort与LINQ排序两种实现方式的差别:前者直接比较两个元素的大小,而后者先选出每个元素的“排序依据”再进行比较。因此,虽然后者需要相对较多的“周边工作”,但由于每次比较时都可以仅仅使用高效的基础类型(如int),因此从整体来看,两者的性能高低难以辨别。不过,既然我们已经了解LINQ排序“高效”的原因,又能否将其利用在数组排序上呢?程序是人写的,此类问题大都有肯定的答案。那么我们现在就来实现一下。阅读全文

数组排序方法的性能比较(3):LINQ排序实现分析

2010-01-27 00:02 by Jeffrey Zhao, 13978 阅读, 收藏, 编辑
摘要: 上次我们分析了Array.Sort方法的实现方式,并了解到类库会为一些特例而使用高性能的排序方式——int数组便是这样一例,因此从测试结果上来看其性能特别高。不过从数据上看,即便是在普通的情况下,Array.Sort的性能也比LINQ排序要高。不过也有朋友从测试中得出的结论正好相反,这又是为什么呢?那么现在,我们再来分析一下LINQ排序的实现方式吧,希望这样可以了解到两者性能差别的秘密。阅读全文

人肉反编译使用yield关键字的方法

2010-01-26 00:06 by Jeffrey Zhao, 10890 阅读, 收藏, 编辑
摘要: 我认为这是一个真命题:“没有用.NET Reflector反编译并阅读过代码的程序员不是专业的.NET程序员”。.NET Reflector强大的地方就在于可以把IL代码反编译成可读性颇高的高级语言代码,并且能够支持相当多的“模式”,根据这些模式它可以在一定程度上把某些语法糖给还原,甚至可以支持简单的Lambda表达式和LINQ。只可惜,.NET Reflector还是无法做到极致,某些情况下生成的代码还是无法还原到易于理解——yield关键字便是这样一个典型的情况。不过还行,对于不复杂的逻辑,我们可以通过人肉来“整理”个大概。阅读全文

昨日搬至办公室的书籍

2010-01-25 12:00 by Jeffrey Zhao, 9321 阅读, 收藏, 编辑
摘要: 由于家里地方小,总有一部分书籍需要跟着我辗转至各公司。其中一些公司只能让我放抽屉(地方小)甚至地板上,而有一些公司就能让我把书都摞桌子上。昨天下午我特地来了一次办公室搬运书籍。灭霍霍,可真是一个体力活。阅读全文

土人眼中的差距:That’s Why I Chose Yale

2010-01-24 22:10 by Jeffrey Zhao, 10559 阅读, 收藏, 编辑
摘要: 上周五中午我看了一个视频:That's Why I Chose Yale(我选择耶鲁大学的原因),是由耶鲁大学的学生自导自演自己拍摄、剪辑的短片。这部短片直接就把我看哭了——好吧,还差一点点,但是其中的震撼是难以描绘的,建议您一定要自己体会一下。震撼源于各方面的差距,同样是大学,同样是大学生,为什么差距就那么大呢?而且,这几乎已经是我无法去弥补的差距了,因此遗憾,因此震撼。阅读全文

数组排序方法的性能比较(2):Array.Sort<T>实现分析

2010-01-22 00:06 by Jeffrey Zhao, 11490 阅读, 收藏, 编辑
摘要: 昨天我们比较了Array.Sort方法与LINQ排序的性能,知道了LINQ排序的性能以较大幅度落后于Array.Sort方法。而对于Array.Sort来说,性能最高的是其中使用Comparer.Default作为比较器的重载方法。在前文的末尾我们做出了推测:由于排序算法已经近乎一个标准了(快速排序),因此从算法角度来说,Array.Sort方法和LINQ排序上不应该有那么大的差距,因此造成两者性能差异的原因,应该是具体实现方式上的问题。阅读全文

数组排序方法的性能比较(1):注意事项及试验

2010-01-21 00:11 by Jeffrey Zhao, 10066 阅读, 收藏, 编辑
摘要: 昨天有朋友写了一篇文章,其中比较了List的Sort方法与LINQ中排序方法的性能,而最终得到的结果是“LINQ排序方法性能高于List.Sort方法”。这个结果不禁让我很疑惑。因为List.Sort方法是改变容器内部元素的顺序,而LINQ排序后得到的是一个新的序列。假如两个排序方法的算法完全一致,LINQ排序也比对方多出元素复制的开销,为什么性能反而会高?如果LINQ排序的算法/实现更为优秀,那为什么.NET Fx不将List.Sort也一并优化一下呢?于是今天我也对这个问题进行了简单的试验。阅读全文

今日入职盛大创新院

2010-01-19 19:07 by Jeffrey Zhao, 17641 阅读, 收藏, 编辑
摘要: 在去年年底的总结中,我谈到放弃所谓的创业,想要加入一家国内的大公司安心发展技术,正所谓“打怪升级”。不过,其实在写完文章不久之后(大约数个小时),我就收到了盛大创新院给我的offer。在家休息了整整两周时间后,今天我终于入职了,因此我现在终于有了个颇为响亮的头衔。好吧,当然这不是关键,当然这终究让我梦想中“搞研究”的心理小小地满足了一把。阅读全文

浅谈代码的执行效率(4):汇编优化

2010-01-14 00:08 by Jeffrey Zhao, 11364 阅读, 收藏, 编辑
摘要: 终于谈到这个话题了,首先声明我不是汇编优化的高手,甚至于我知道的所有关于汇编优化的内容,仅仅来自于学校的课程、书本及当年做过的一些简单练习。换句话说,我了解的东西只能算是一些原则,甚至也有一些“陈旧”了——不过我想既然是一些原则性的东西,还是能够用它来做一定程度的判断。至少我认为,我在博客园里看到的许多关于“汇编优化”也好,“内嵌汇编”也罢的说法,经常是有些问题的。阅读全文

京沪两地Scrum实战营(免费,上海1月23日,北京1月30日)

2010-01-13 18:26 by Jeffrey Zhao, 4753 阅读, 收藏, 编辑
摘要: 种种迹象表明,Scrum已经在很多公司得到实施。同时,不争的事实是很多开发人员和团队在实施过程中也遇到了各种各样的问题,包括对Scrum方法本身的认识、辅助实施工具的使用等等。有关Scrum应用和实施的各种问题也在InfoQ网站和其他网站上被广泛讨论和争论。等等这些,组成了我们要举办这次Scrum实战营的基础。我们希望通过这次活动帮助正在进行敏捷实施、Scrum实施的团队更加清晰地理解Scrum,并将其他人的有效经验借鉴到自己的团队中来。本次活动由InfoQ中文站、雅各布森软件(北京)有限公司、微软中国有限公司共同举办,我们期待您的参与! 阅读全文

浅谈代码的执行效率(3):缓存与局部性

2010-01-12 00:03 by Jeffrey Zhao, 10433 阅读, 收藏, 编辑
摘要: 在前两篇文章里,我们讨论了程序性能的两个方面,一是算法(广义的算法,即解决问题的方法),二是编译器。通过这两个方面,我想表达的意思是,一段程序的执行效率,是很难从表面现象得出结论的,至少从一些简单的层面,如代码的长度是几乎难以说明任何问题——因此一定要进行Profiling才能做到有效的优化。而现在,我们假设两段程序算法基本相同,编译器也只是进行简单的“翻译”,那么……我们能从“表面”看出性能高下吗?阅读全文

按月统计博客园单个用户的发文数量

2010-01-11 00:07 by Jeffrey Zhao, 7245 阅读, 收藏, 编辑
摘要: 这几天在家闲着,便试着写一些小程序。之前有朋友问到“F#能不能写Web”,于是我也就打算这么一试。虽然我能肯定,用F#写Web应用程序不会是问题,不过倒真还没有做过这方面的尝试。我想,如果用F#写Web应用程序,那么它很重要的一点,应该是利用其在异步编程方面的强大特性。最后我决定,使用F#编写一个按月统计博客园单个用户发文数量的简单服务。尝试的结果是——还有些问题没有解决。不管怎么样,我先把其主体逻辑描述一下吧。阅读全文

浅谈代码的执行效率(2):编译器的威力

2010-01-08 00:06 by Jeffrey Zhao, 10472 阅读, 收藏, 编辑
摘要: 在上一篇文章中,我主要表达了这样一个观点:影响程序效率的关键之一是算法,而算法的选择与优化,和是否多一个赋值少一个判断的关系不大。关于算法的选择,我谈到其理论上的复杂度,并不直接反映出效率。因为在实际运用时,数据的规模,形式等等都会涉及到算法的实际效用。一个时间复杂度低的算法并不代表任何情况下的效率都高。这是“实际”和“理论”的区别之一。现在我打算来谈一下另一个比较“实际”的东西:编译器对于程序效率的影响。阅读全文

浅谈代码的执行效率(1):算法是关键

2010-01-07 17:14 by Jeffrey Zhao, 12449 阅读, 收藏, 编辑
摘要: 前一段时间在博客园里看到这样一篇文章,那位兄弟谈到程序效率的关键是“简短”。他说,“程序越简短,其可执行代码就越少,就越有效率”,而在编写程序的时候,“要尽量改进我们的算法,而改进算法中最重要的一条,就是减少语句”。这句话从表面上似乎正确,但我认为性能这问题不能用“简短”这种方式去思考,否则会进入一些误区。我整理了一下思路,希望可以从几个方面把详细谈一下这个问题。首先我想说的是:“简短”不是关键,“算法”更加重要。阅读全文

AV不识爱卖克,便看三弟也枉然

2010-01-07 10:39 by Jeffrey Zhao, 7169 阅读, 收藏, 编辑
摘要: 阿凡达,已然无人不知无人不晓。江湖流传:“AV不识爱卖克,就看三弟也枉然”。此处AV自然指的就是Avatar,这句话意思是说,如果你没有看iMax的阿凡达,就算是看了3D版也等于没看过。因此,对于全国只有11块的iMax屏幕,大家自然就是疯抢了。而上海这边,只有位于人民广场的和平影都有这条件,试想全上海有这想法的人都涌到同一个地方,抢这个每日一千多(350 * 4场)人次的机会……是什么景象。阅读全文

一次批量修改博客文章的经验(下):操作过程

2010-01-05 19:40 by Jeffrey Zhao, 4962 阅读, 收藏, 编辑
摘要: 上一篇文章中我们进行了一些预备工作,主要是了解了该如何使用MetaWeblog API读取和修改博客园的文章——包括同步和异步两种调用方式。此外,由于F#在异步调用方面的优势,我决定使用F#来完成批量修改文章任务。这个任务并不困难,但很“危险”,一旦出错可能之前的文章就无法恢复了。因此,我把这个任务拆成多个步骤,每个步骤都会将数据保存在硬盘上。由此,即便出错,还是有挽回的余地。阅读全文

一次批量修改博客文章的经验(上):准备工作

2010-01-04 18:57 by Jeffrey Zhao, 6134 阅读, 收藏, 编辑
摘要: 这几天赋闲在家,除了看书和还债(如RSS订阅),终于把一直以来想做却拖着的事情完成了:批量去除博客文章段首的空格。这个过程并不难,只需要按部就班地去做就行了,一切资料都可以在互联网上搜索到。不过我还是打算记录一下,也是为了今后再做类似工作时有个参考,少走一些弯路。阅读全文

F#中的XML序列化

2010-01-03 21:24 by Jeffrey Zhao, 7038 阅读, 收藏, 编辑
摘要: 这两天在用F#写一小段代码,需要把一些对象存到外部文件中去。这个功能很容易,因为.NET本身就内置了序列化功能。方便起见,我打算将这个对象序列化成XML而不是二进制数据流。这意味着我需要使用XmlSerializer而不是BinaryFormatter。这本应没有问题,但是在使用时候还是发生了一些小插曲。阅读全文

2009年末,多少进行一些总结和展望吧

2009-12-31 00:11 by Jeffrey Zhao, 12417 阅读, 收藏, 编辑
摘要: 时间就这样悄无声息地到了2009年的最后一天,回首我这过去的一整年,可以用一句废话来总结,那就是“既有遗憾,也有收获”。不管怎么样,多少也应该总结一下吧——尤其是此时此刻,对我来说可谓是一个新的起点。自然,在技术博客上,终究还是围绕着“事业”谈谈吧。阅读全文

使用Fiddler辅助观看InfoQ的视频

2009-12-29 12:04 by Jeffrey Zhao, 9065 阅读, 收藏, 编辑
摘要: InfoQ是一个好地方,而我认为其中最有价值的资源,便是其中的演讲视频。InfoQ在这方面有个特点:在演讲视频下方提供了清晰的幻灯片,而在播放的同时,还会根据进度进行切换。这观看体验自然比单纯的演讲录像要高出许多。可惜的是,时不时有朋友会向我反馈说,InfoQ实在是太慢,几乎无法流畅地观看视频。由于一时半会儿InfoQ也不会在中国放CDN,因此视频加载速度这问题……几乎无法解决。还好,如果我们退而求其次,至少可以使用Fiddler等工具来“缓解”这个问题。阅读全文

计算机(及其他)书籍赠送

2009-12-28 14:45 by Jeffrey Zhao, 13583 阅读, 收藏, 编辑
摘要: 由于即将转移工作阵地,因此要把所有的书都整理清点一遍。整理过程中发现有些书……还是不要让它占用宝贵的存储资源比较好,于是打算处理掉。其中一部分书是别人送的,另一部分是有年头的,还有一部分是一时兴起买的。它们大都价值不大,因此我是“赠送”而不是卖掉。当然还有一些书也并非如此不堪,只不过我不需要而已——这类书也麻烦兄弟们写写书评罢。:)阅读全文

五十种语言的“圣诞快乐”(下):F#实现

2009-12-28 11:18 by Jeffrey Zhao, 6658 阅读, 收藏, 编辑
摘要: 不知道大家的圣诞节过的如何?有没有玩点啥有趣的东西?上次的文章中我们主要分析了使用Google Translate进行文字翻译的方式,并使用C#写了一个简单的的翻译程序,效果良好。不过,在平时开发过程中,对于此类问题我常用F#来解决这样的问题。那么使用F#来实现此类任务有什么优势吗?不错,我们现在便来看看这个问题。阅读全文

推荐内容索引

2009-12-27 17:30 by Jeffrey Zhao, 10906 阅读, 收藏, 编辑
摘要: 写了不少文章,其中有不少比较用心的系列。积累了那么久,我在博客上也已经讨论过了各种问题。许多人提问的时候,我会说我写过某某文章,可以搜一下,但得到的反馈经常是找不到。其中一个原因是那些弟兄还不太会用搜索引擎——或是懒,但也有可能是以前的文章的确是“沉没”了。无论是博客园还是独立博客,对于内容的组织和管理还做得不够好,所以在这方面有所突破之前,还是通过手动整理的方式来保留重点内容吧。阅读全文

五十种语言的“圣诞快乐”(上):分析与实现

2009-12-25 11:17 by Jeffrey Zhao, 6778 阅读, 收藏, 编辑
摘要: 您知道“圣诞快乐”在不同语言中的写法吗?Google Translate知道。不过Google Translate好像并不希望我们可以直接获得这些内容——但这并不能阻止我们这些光荣的程序员来获得这些信息。阅读全文
使用Live Messenger联系我