Hello World
Spiga

如何生成一段Typoglycemia文本(解答)

2012-11-11 23:40 by 老赵, 3848 visits
摘要:关于“生成Tygolycemia文本”这个问题,已经有许多同学给了答案。不过,似乎大部分同学都只是以“完成”作为目标,并没有在解法的效率和内存占用上做过多考虑。其实对于这种非常简单的问题,给出一个解法并没有太大意义,而是要从中获取一些经验,否则就算反复解决这类简单的问题,得到的进步依然十分有限。事实上,这样一个高效的实现也可以十分清晰而简单,可以说并没有因为追求效率而引入任何复杂度。 阅读全文

如何生成一段Typoglycemia文本?

2012-11-05 23:39 by 老赵, 5551 visits
摘要:Typoglycemia是个新词,描述的是人们识别一段文本时的一个有趣的现象:只要每个单词的首尾字母正确,中间的字母顺序完全打乱也没有关系,照样可以正常理解。要不您来试下,如何从一段正确的文本生成一段Typoglycemia文本呢?其实这题还有后续,那就是把目标反一反:从一个前后确定中间乱序的单词,找到其原始的,正确的单词。自然,我们会得到一个长长的单词列表,十万个单词吧,并保证没有两个单词仅仅是中间几个字符的顺序不同。那么,您会如何设计一个数据结构,让我们可以快速的从一个乱序后的单词找到其正确形式呢? 阅读全文

如何让您的事件支持逆变

2012-11-04 18:56 by 老赵, 4549 visits
摘要:在.NET里定义一个事件会需要一个委托类型,一般来说我们会使用.NET里自带的EventHandler类型,但它的定义其实有稍许缺陷。例如,如果您在自己的项目中编写了这样的代码,Resharper这样的工具便会提醒您“TEventArgs可以设为逆变”。让一个委托类型支持逆变只需要加上in关键字,但如果我们还是让C#编译器帮我们生成事件,则会由于Delegate.Combine方法并不支持逆变而导致失败。我们可以构造一个MulticastDelegateManager来解决这个问题,要不您也来试试看?不过请不要仅仅给出“思路”,千万要写下代码来,否则您的思路不说也罢。 阅读全文

为List<T>内部添加一个“删除多个元素”的方法

2012-11-03 00:06 by 老赵, 9147 visits
摘要:不久前我在微博上提出一个问题:众所周知,.NET中自带的List<T>集合类型没有“删除多个元素”的方法,那么假如我们是.NET类库中List<T>的实现者,我们该如何为添加这么一个方法?请注意这里我们是“内部实现者”,因此肯定就是要提供一个高效的,并且尽可能通用的实现。其实这道题目没有标准答案,但是很容易判断出某一个实现好不好,对不对,有哪些缺陷等等。这题的确十分简单,但是会有不少细节方面值得考虑,所以我反复强调,光有思路是不够的,一定要写出代码来。 阅读全文

图灵访谈之三十六:以“玩”之名——赵劼(老赵)专访

2012-10-31 23:02 by 老赵, 8222 visits
摘要:最近一个多月工作很忙,再加上之前参加许多活动,搞得身心俱疲,于是这段时间一直在休整,以看书和思考为主,连Wind.js也碰的不多,更别说博客了。接下来又要开始努力了,包括写博客,于是就从转帖这个访谈开始吧,也可以顺便继续修订一下。这是两个月前在图灵公司接受的采访,从一大早到下午,原本还担心无甚可讲,但最后只感觉时间不太够用。这篇采访中所有的内容都是我的真实想法,但后果就是又有更多人往我一举一动上贴“微软”标签了,很无趣,所以这年头说真话还不如跟着分析师评论员们说套话来的好。不过想贴标签就贴罢,爱咋咋滴,就像访谈里说的,大家都是聪明人,爱帖标签的人就算没标签也可以找出其他说法来。 阅读全文

讨论:一则并行聚合计算方案的设计

2012-09-05 23:31 by 老赵, 6913 visits
摘要:最近的工作让我想到了一个对集合的元素进行并行聚合的案例,尽管这个需求还不存在,但最近却一直在我的脑海里挥之不去,尚未得出令人满意的结果。今天下班前我将这个问题辛苦地缩减为140字内的描述发到了微博上,得到了许多同学的回复,但可能是由于描述过于简单,得到的建议似乎都不能满足我的需求。于是在此我通过博客详细描述下这个问题的需求,还有我之前做过的尝试,这样讨论起来也可以更加有针对性一些。 阅读全文

我看面试时出(纯)算法题

2012-08-22 19:55 by 老赵, 14332 visits
摘要:今天早上一边出门一边在平板上读了左耳朵耗子的新文章《为什么我反对纯算法面试题》,略有想法。正逢外面暴雨如注,我就又回屋打开笔记本发了一些回复,特此整理一下。为了避免有人扭曲我的看法,我先声明我并不是反对这篇文章,相反我是基本同意其中的观点,只不过会加以一些补充,把其中一些我认为有些过头的地方按一按。您也可以认为我的观点是提交一些补丁,发了一些Pull Request(当然不是这种Pull Request)就行了。我当时吐的第一个槽,是说文章太鄙视搞学术研究的人,说他们是书呆子,不关心业务需求,认为那是应试教育不会思考的产物。这个么其实不是重点,只不过触到了我的学术研究情结罢了,接下来的才是我真正想说的。 阅读全文

由eval生成的代码效率真的很差吗?

2012-08-15 21:29 by 老赵, 16276 visits
摘要:昨晚跟一位Node.js专家讲解了我的Wind.js类库。之前那位仁兄对Jscex(Wind.js的前身)的看法是“就是不喜欢”,也在微博上对Jscex冷嘲热讽,于是我私信他说建议看一下文档了解一下Jscex。昨天我们的争论主要围绕在eval的使用上,他认为更好的做法是像CoffeeScript那样使用一个额外的进程监听改变,这样更方便。我说CoffeeScript这么做是因为它没有像Wind.js那样借助eval实现完全动态的运行时转化,且生产环境中不会出现eval。最后他坚持认为“eval就是有性能问题”,因此开发时也不应该使用,否则Wind.js为什么要提供预编译器?虽然最后不欢而散,不过我忽然也打算验证一下eval生成的代码效率到底会差到什么样的地步,于是便有了这次实验。 阅读全文

我对“语言之争”的看法:别随便拉我入场

2012-08-06 13:11 by 老赵, 13692 visits
摘要:最近又有语言之争了,不过没我什么事情。事情起因可以在酷壳最新一篇文章里看到,简单地说是关于C++的复杂度问题的。我对文章内容其实没有什么看法,但对这句话深有感触:“我对C++的感情有三个过程,先是喜欢地要死,然后是恨地要死,现在的又爱又恨,爱的是这个语言,恨的是很多不合格的人在滥用和凌辱它。”,我以为我想说,这“现在”的状态,就是我对“语言之争”的看法,“语言之争”被太多不合格人凌辱了。 阅读全文

写给《程序员》杂志社:那些你们早该知道的东西

2012-07-30 01:42 by 老赵, 17410 visits
摘要:最近我写了一篇文章投给《程序员》杂志社,是关于Jscex的内容,自然十分用心。我是一个对文章阅读体验有极高要求的人,这次既然涉及到我的文章,我自然会加倍小心,也主动配合编辑的工作,提供了高清截图和矢量PDF文件,但最终的结果还是让我十分愤怒,我的文章被毁了。即便编辑对此表示歉意,但于事无补。同时我发现《程序员》杂志社从编辑到排版人员,居然会不了解一些已经被广为接受的知识,甚至可以说是“常识”。为了让今后的文章可以“免遭毒手”,我当时立刻表示要为《程序员》杂志社单独写一篇文章补补课。我不知道国内的媒体在经历那么多年发展之后,为什么连一些基本的东西都做不好。从现在开始,我会努力盯住我所看得到的地方。 阅读全文

专访Jscex作者老赵(上):缘由、思路及发展

2012-07-28 22:01 by 老赵, 5591 visits
摘要:Jscex是很有特点的一个JavaScript异步编程类库,最近作者不但发布了其眼中的里程碑版(v0.6.5),还在“我们的开源项目”系列活动和阿里技术嘉年华上连续露脸,获得广泛关注。InfoQ专诚对Jscex的作者老赵做了正式的书面采访。在采访的上篇,老赵着重阐述对于Jscex类库设计的思考和心得。注:本文首发于InfoQ,出于阅读体验等方面考虑,现在重新发于博客。 阅读全文

Jscex与Promise/A那些事

2012-06-25 19:13 by 老赵, 5897 visits
摘要:任何异步编程的类库要做的第一件事往往便是统一异步编程的模型,例如Jscex的异步模块自带一个类似于.NET中的异步任务模型。围绕统一的模型,开发人员便可以尽情地提供各种扩展,例如Jscex异步增强模块中的whenAll或whenAny一样。换句话说,假如要混用两种异步编程模型,往往需要将其中一种适配至另外一种,因此异步增强模块中也提供了fromCallback及fromStandard辅助,能够轻易地将最简单的(也是Node.js里使用的)两种异步函数接口绑定为异步任务。那么Promise/A呢?它也是种目前运用十分广泛的异步编程模型,Jscex对它有什么特别的支持吗?当然有,但方式有所不同,更为直接。 阅读全文

使用Node.js编写Shell脚本,暨Jscex 0.6.5版本发布

2012-06-19 00:12 by 老赵, 5918 visits
摘要:昨天不得不花时间做了点保护博客阅读体验的事情,但其实这篇才是我真正想写的。上个星期在香港出差,晚上的活动大都是喝酒,回到酒店便借着些许酒劲改进Jscex。如今虽然Jscex的开发工作并没有详细的时间计划,但我正在使用GitHub的Issues页面记录需要制作的任务点,因此每天都是朝着目标逐步前进的。按照计划,Jscex的0.6.5的主要目标是对Jscex的模块机制进行改进,统一辅助方法,并使用Node.js重新编写发布脚本。这些工作的目的都是为接下来的0.7.0版本作准备,它将会是Jscex在项目功能与质量,以及专业性上有重大突破的版本。 阅读全文

两年多来第二次更新博客功能

2012-06-18 00:08 by 老赵, 6020 visits
摘要:话说两年多前,我从博客园搬到了这个独立博客,用的是自己写的最简单粗糙的博客程序。这个博客系统十分简单粗糙,连文章编辑都是在文本框里直接显示HTML,甚至没有文章删除的功能——因为我不需要。这就是这个博客系统目的,只为我一个人服务,我够用即可,但也必须能让我够用。自己写的博客系统胜在高度的订制性,我可以把握页面任何一寸角落。直到现在,我的博客程序只增加过两次功能,其他都是对于样式方面的小修小补,可见我这人是多么的不思进取。从某个角度说,这两次更新的目的是相同的,都是为了抵御垃圾回复。这少数的令人恶心的人和事,就能不成比例地占用我的精力。 阅读全文

Jscex单元测试:喝着咖啡品着茶

2012-06-13 00:47 by 老赵, 8647 visits
摘要:这段时间在香港出差,跟高帅富们一起工作。高帅富的办公室免费供应咖啡,放在壶里随你倒。茶叶也一样,立顿普洱茉莉自取。于是乎我每天也会喝一两杯提提神,尤其是午饭后,感觉还不错。技术人员似乎都挺热衷于这些饮料,也喜欢拿饮料来为项目取名,这方面最让人想到的例子估计就是Java了。这几天我为Jscex整理代码,准备发布其0.6.5版本,并为0.7.0做准备。这方面的主要工作之一便是为Jscex补充尽可能完整的单元测试。写完单元测试之后,我会感到自己是一个非常专业的程序员,突然就有了强烈的码农自豪感和自尊心。 阅读全文

Jscex预编译器及其DocPad插件

2012-06-04 22:34 by 老赵, 2788 visits
摘要:需求本身会是最好的动力。上个周末除了忙于构建Jscex主站以外,我还重新整理了Jscex的预编译器——或者说是AOT编译器。Jscex自带一个JIT编译器,配合eval可以在开发时避免额外的编译过程,这也可以说是Jscex的亮点之一。不过对于线上环境,一般都还是建议进行预编译,也就是将Jscex方法定义直接替换为目标代码。这么做的好处主要是为了降低部署时的脚本体积(摆脱对编译器的依赖所有代码加起来不到4KB),或是让异常情况下的错误定位变得容易(主要面向Node.js生产环境)。此外,为了便于编写文档,我还为DocPad开发了一个插件,用于对Jscex脚本进行预编译。 阅读全文

Jscex疯狂周末

2012-06-03 23:39 by 老赵, 4367 visits
摘要:这是个Jscex疯狂周末。从周五下班开始直到现在,我可谓一心扑在Jscex上——当然,早茶还是要的,健身房还是去的,买菜做饭拖地也是必不可少,但剩余时间基本都贡献给Jscex了。这段时间里,我研究了一些静态站点生成机制,并最后决定使用DocPad编写Jscex的文档站。然后便是捣鼓各种页面,重新编写快速入门示例等等。自然,还要它部署到GitHub Pages上,并启用jscex.info域名,还因为GoDaddy的域名服务器总是被墙,又把DNS解析交给了DNSPod。现在Jscex主站看上去是不是像样多了? 阅读全文

C#的设计缺陷(2):不能以void作为泛型参数

2012-05-28 12:27 by 老赵, 8198 visits
摘要:上一篇文章里我谈了C#中“显示实现接口事件”的限制(不过似乎有点打歪了),这一篇我们换个话题,再来谈泛型方面的限制。相对于Java的假泛型(编译型泛型,类型擦除)来说,真泛型是.NET的一个亮点。Anders Heisenberg多次提到.NET的真泛型有利于编程语言的进一步发展,可以带来更丰富的编程模型。不过.NET支持的泛型是一方面,具体到语言本身则又涉及到编译器的实现,而编译器的实现又收到运行时的限制等等,所以要谈语言的设计缺陷的“原因”就会变得很复杂。不过这里我们就把C#作为一个“成品”来对待,谈下它不允许以void作为泛型参数的“后果”,“原因”则略为一提,不做深究。 阅读全文

C#的设计缺陷(1):显式实现接口内的事件

2012-05-20 21:07 by 老赵, 8279 visits
摘要:其实使用C#这么多年,我时不时会遇到一些令人不爽的设计缺陷。这些缺陷大都是些限制,虽说无伤大雅,也很容易避免,但一旦遇到这些情况,总会令人心生不快,毕竟都是些无谓的限制。而且令人遗憾的是,虽说去除这些限制也不会带来什么问题,但我认为C#设计团队也基本不会去修复这些问题了,毕竟它们大都是些细枝末节。作为一名用C#的纯种码农,我突然一时兴起也要把这些设计缺陷记录下,也方便和大伙一起讨论下。那么这次就先从实现接口内的事件说起,当我们需要显式实现一个接口内的事件时,会发现我们必须提供add和remove访问器,这还会稍许影响到事件常用的使用模式。 阅读全文

编写一个“绑定友好”的WPF控件

2012-05-13 23:35 by 老赵, 11390 visits
摘要:最近在搞WPF开发,这对我来说是个陌生的领域。话说回来,可能是缺少耐心的缘故,我现在学习新事物的方式主要是“看一些入门文档”,“看一些示例”,然后“猜测”其实现并摸索着使用。在很多时候这种做法问题不大,但一旦有地方猜错了,但在一段时间里似乎和实践还挺吻合的,则一旦遇到问题就会卡死。上周五我就被一个WPF绑定的问题搞得焦头烂额,虽说基本搞定,但还是想验证下是否会有更好的做法,特此记录一下,欢迎大家指正。 阅读全文
< Prev 1 2 3 4 5 6 7 8 9 ... 31 Next >
使用Live Messenger联系我