随笔分类 -  Programming

Programming techniques.
摘要:服务端 客户端 阅读全文
posted @ 2017-09-07 10:21 刘俊峰 阅读(466) 评论(0) 推荐(0) 编辑
摘要:做了两件事情:第一件是从Wikipedia网站上搜集各种编程语言的资料,第二件是把编程语言之间相互影响的关系用图的形式画出来,从而得到了一张编程语言的发展脉络图。 阅读全文
posted @ 2014-10-05 19:52 刘俊峰 阅读(3494) 评论(8) 推荐(5) 编辑
摘要:想到一种从两个维度对编程语言进行分类的方法。横向的维度是从语言设计的角度,考虑设计思想、语法语义、实现方式,按照语言特性的先进程度分为原始、过渡、现代三类。纵向的维度则从抽象层次和问题领域的角度分类。 阅读全文
posted @ 2014-08-21 13:40 刘俊峰 阅读(1277) 评论(1) 推荐(4) 编辑
摘要:2013年11月,Dart语言1.0稳定版SDK发布,普天同庆。从此,网页编程不再纠结了。在我看来,Dart语法简直就是C#的升级版,太像了。之所以喜欢Ruby的一个重要理由是支持mixin功能,而Dart也引入了mixin特性。最棒的是Google提供了集成开发环境——Dart Editor和Dartium,有非常强大的编辑和调试功能,既能编写网页程序,也能编写服务器端程序。把网站上的主要文档看完一遍后,再把SDK下载解压,就能用Dart编程了。第一个程序写什么呢?做了一个黑白棋游戏。直接上代码: Reversi 黑白棋 2 2... 阅读全文
posted @ 2014-01-20 23:06 刘俊峰 阅读(1528) 评论(0) 推荐(0) 编辑
摘要:首先说一下做这个软件的动机和用途。平时喜欢在cnBeta网站看新闻,但是有时候太忙了,不可能每天都去看,一般两三天或者四五天去一次,快速扫一下重要的新闻,遇到特别好的文章就收藏起来。唯一不爽的就是超过一天的新闻评论不显示了,所以一边学Ruby一边做了这个软件。上一篇博客中使用的方法是在在浏览器中使用远程的代理服务器,然后就可以看到过期的评论。但是网页打开速度比较慢,图片加载慢,视频看不了。现在又用了一个新的方法,而且效果不错,代理服务器还是在本机运行,网页文本从远程服务器获取,其他的图片、视频等则不经过远程代理,从而达到了一个较好的使用体验。代理服务器做成了比较通用的结构,可以挂载对多个网站的 阅读全文
posted @ 2012-11-04 15:30 刘俊峰 阅读(4084) 评论(1) 推荐(0) 编辑
摘要:安装完Ruby之后,doc目录里自带了一本书《THE BOOK OF RUBY》,粗看还可以,细看就一般了,而且是基于ruby 1.8的。Ruby 1.9改了很多地方,跟1.8不完全兼容了,改掉了一些缺点,很不错。最近在上一篇博客的基础上又做了以下改进:1.个别网页中有编码错误的字符,不能正确解析,用下面的代码加以修正。1if not text.valid_encoding?2 puts "warnig: text contains invalid chars"3 text.encode!("utf-8", :invalid => :replace 阅读全文
posted @ 2012-10-26 11:19 刘俊峰 阅读(1632) 评论(0) 推荐(0) 编辑
摘要:10月12日突然对Ruby产生兴趣了,于是就找了本书《Programming Ruby 1.9》来看,结果被它迷上了。长期以来我一直认为我知道的各种编程语言都不够好,一直想自己设计一门语言。看了Ruby之后,发现的它的语法和语义正是我想要的,尤其是它的Mix in机制,是我寻找了好久的一个功能,Ruby有了,而且实现的很好,这一点很令人兴奋。唯一不同的是我想设计的是静态类型的语言,而Ruby是动态类型的,一旦引入类型的声明,语法就会很复杂,比如Scala,各有优劣,Scala也是个不错的语言。上次学Lua的时候,两天学会,然后两天做了一个练习《绘制任意二元不等式的图像表示》。Ruyb比Lua复 阅读全文
posted @ 2012-10-21 21:11 刘俊峰 阅读(2407) 评论(5) 推荐(2) 编辑
摘要:生命体大部分生命体都是由细胞构成,基因(DNA)存在于细胞核中的多个染色体上。细胞根据基因生成对应的蛋白质,通过各种蛋白质(各种酶)指导生命体工作。病毒本身没有细胞,其组成就是RNA(或DNA)链,必须侵入其他的细胞才能繁殖。基因对于细胞来说就是以四进制为基础编就的一段程序,人类和其它生命只不过是运行着程序的机器罢了。染色体上并不全是有效基因,有很多是无意义的字符,并且基因因为不同的原因在染色体上不断的重复。有时候会发现有意义的基因经常被其它信息所打断。科学家发现在人体基因里竟然有病毒的基因代码,不过它们都被甲基化了(仅头几个字符被甲基化),不能再被激活了。在《基因组:人种自传23章》中把基因 阅读全文
posted @ 2012-07-22 11:03 刘俊峰 阅读(981) 评论(1) 推荐(0) 编辑
摘要:运行以下程序,就能看出问题所在:using System;using System.Collections.Generic;namespace NumberGenerator{ public interface INumberGenerator { IEnumerable<int> GetNumbers(int max); } public class Odd : INumberGenerator { public IEnumerable<int> GetNumbers(int max) { for ... 阅读全文
posted @ 2012-06-05 10:24 刘俊峰 阅读(431) 评论(2) 推荐(0) 编辑
摘要:Unobtrusive Javascript有三层含义:一是在HTML代码中不会随意的插入Javsscript代码,只在标签中加一些额外的属性值,然后被引用的脚本文件识别和处理;二是通过脚本文件所增加的功能是一种渐进式的增强,当客户端不支持或禁用了Javsscript时网页所提供的功能仍然能够实现,只是用户体验会降低;三是能够兼容不同的浏览器。启用Unobtrusive Javascript的步骤:1.在web.config文件中加入<configuration> <appSettings> <add key="ClientValidationEnabl 阅读全文
posted @ 2012-03-31 12:10 刘俊峰 阅读(16159) 评论(1) 推荐(6) 编辑
摘要:花了两个多星期的时间,从头到尾看了一遍,看此书如沐甘霖,绝对是一本好书。第4章讲的非常精辟,先介绍了架构模式的演化历史,从Smart UI, Model-View, Three-Tier到MVC;并比较了与Model-View-Presenter和Model-View-View Model的区别。然后介绍了领域驱动(Domain-Driven Development)、依赖注入(Dependency Injection)和单元测试(Unit Testing),再后面的章节中贯彻了这三种思想并用在了实例中。第6章介绍的Nject和Moq工具以前也没用过,再不用的话就会感觉很落后。第11至20章是本书的核心内容,详细讲解了ASP.NET MVC 3 Framework,尤其是15至19章能学到很多新知识。 阅读全文
posted @ 2012-03-17 12:35 刘俊峰 阅读(2218) 评论(10) 推荐(3) 编辑
摘要:软件开发的七个步骤:功能设计 结构设计 代码编写 功能测试 性能测试 部署维护 用户体验。关于软件开发流程,英语中对应的单词比较多,叫法不统一。我感觉在中文中采用这个七个词更合适一些。箭头首尾相接,组成一个循环,表示这七个步骤不是一次性完成的,而是多次进行的。先设计核心的和主要的功能,然后就实现和测试,给用户使用,收集反馈意见,然后再增加和完善一些功能,重复整个流程。循环多次后,整个软件的质量以螺旋上升的方式得到改进。在功能设计阶段,做需求分析和用户界面的设计,确定软件功能的范围和程度。在结构设计阶段,考虑所使用的软硬件平台和开发工具,功能模块的划分,接口层次的划分;再详细一点的话可以包括定义 阅读全文
posted @ 2012-02-29 16:36 刘俊峰 阅读(5352) 评论(0) 推荐(1) 编辑
摘要:最近用C#做了一个Lua的解释器,发到了CodeProject上面,有源代码,并且在CodeProject这周的Newsletter中排在Most popular new articles第一个。Lua的简单主要是因为动态类型,不需要声明和定义类型;Lua的强大主要是因为支持函数式的编程;高效则是因为语法简单,解释器的实现非常小巧。运行高效,各种解释型语言中Lua的性能最高;编程高效,用很短的代码就能表达相对较多的语义。所以Lua非常适合作为第一门编程语言来学习,建议所有的中学生学习Lua编程语言,最好是学校有这样的课程。Lua和C语言是协同工作的,基础的功能用C来实现,然后在Lua中调用,用 阅读全文
posted @ 2011-07-27 15:33 刘俊峰 阅读(700) 评论(3) 推荐(0) 编辑
摘要:上次介绍了用Lua做的个绘制二元等式或不等式的图像的软件,今天增加了输出图片的功能,下载地址还是原来的。下面介绍几个使用技巧,这也正是这个软件的有趣之处。1. 求余和周期函数利用求余可以将一个图形变为一系列的图形,举几个例子:对直线的截距求余,y=x+d → (y-x)%d=0,例如:(y-x)%20 == 0对直线的倾角求余,y=tgθx → atan(y/x)%θ=0,例如:abs(atan(y/x)%0.2)<0.005对圆的半径求余,sqrt(x^2+y^2)=r → sqrt(x^2+y^2)%r=0, 例如:abs(sqrt(x^2+y^2)%10)<0.1求余是一个周 阅读全文
posted @ 2011-07-17 14:19 刘俊峰 阅读(2159) 评论(0) 推荐(1) 编辑
摘要:关于内存的使用,栈(stack)和堆(heap)是非常重要的两个概念,网上讲解的资料也比较多,大家也应该知道栈和堆分别的用途是什么,接下来说一下我对栈与堆的本质区别的理解。每个程序在运行时系统都会分配一块叫做栈的连续的内存区域,大小一般为1M或2M,是编译程序时指定的常数。堆则是系统中所有空闲的内存区域,因此是不连续的,而且有可能是虚拟内存。函数的调用和返回是通过栈来实现的,不细说了。程序中用到的变量(对象)所占据的内存空间既可以从栈上分配,也可以从堆中分配,区别如下:1. 内存指针的性质不同栈上面只能分配长度较小、大小固定的数据,变量的内存地址相对于栈指针的偏移量在编译时就可以确定,因而可. 阅读全文
posted @ 2011-06-07 19:33 刘俊峰 阅读(691) 评论(2) 推荐(0) 编辑
摘要:应老婆的要求,用javascript做了一个鼠标滑上去后图片放大浮出的效果,大家指正一下。1<script>23functionGetAbsPosition(obj)4{5varcurleft=0,curtop=0;6do{7curleft+=obj.offsetLeft;8curtop+=obj.offsetTop;9}while(obj=obj.offsetParent);10return[curleft,curtop];11}1213functionShowFloatingImage(image,width,height)14{15varid="trailimage 阅读全文
posted @ 2011-05-27 23:59 刘俊峰 阅读(6413) 评论(6) 推荐(0) 编辑
摘要:编程中常用的动词 FIRST 原则:专注(Focused,单一职责)、独立(Independent)、可复用(Reusable)、简洁(Small)和可测试(Testable)。 Write it the right way first time, and make sure you only mo 阅读全文
posted @ 2011-05-24 15:38 刘俊峰 阅读(868) 评论(1) 推荐(2) 编辑
摘要:收集整理了一下敏捷开发的12条准则。 阅读全文
posted @ 2011-01-27 17:14 刘俊峰 阅读(1322) 评论(0) 推荐(0) 编辑
摘要:编程行业“满足我们内心深处的创造渴望和愉悦所有人的共有情感”,提供了五种乐趣:创建事物的快乐 开发对其他人有用的东西的乐趣 将可以活动、相互啮合的零部件组装成类似迷宫的东西,这个过程所体现出令人神魂颠倒的魅力 面对不重复的任务,不间断学习的乐趣 工作在如此易于驾驭的介质上的乐趣——纯粹的思维活动,其存在、移动和运转方式完全不同于实际物体同样,这个行业... 阅读全文
posted @ 2010-11-26 16:15 刘俊峰 阅读(285) 评论(0) 推荐(0) 编辑
摘要:先看一个例子,然后再提出这个问题。[代码]hashSet的节点和要判断的节点指向的是同一个实例,Contains方法会一直返回True吗?运行这段代码就会发现在节点的Name变了之后,hashSet里就不再包含这个节点了,这看上去有点奇怪。原因是向HashSet里加入元素时会先计算一下哈希值,并保存起来,判断是否包含时先看哈希值是否相等,若想等再调用Equals方法判断。所以问题就是既希望哈希值是... 阅读全文
posted @ 2010-11-19 16:01 刘俊峰 阅读(500) 评论(1) 推荐(0) 编辑

点击右上角即可分享
微信分享提示