Browsed by
月度归档: 2010年7月

五种应该避免的代码注释

五种应该避免的代码注释

在酷壳,有很多文章都提到了代码注释,如:《十条不错的编程观点》、《优质代码的十诫》、《整洁代码的4个提示》、《惹恼程序员的十件事》等等。今天,某国外的程序员在这里列举五种应该避免的程序注释,我觉得比较有道理,但我觉得有少数几个观点也并不绝对。所以,我把原文的这五种应该避免的程序注释罗列在下面,并放上原作者和我的个人观点作为比较。希望对大家有用。

一、自恋型注释

(注:原文为Proud,我觉得“自恋”更好一点)

public class Program
{
    static void Main(string[] args)
    {
        string message = "Hello World!";  // 07/24/2010 Bob
        Console.WriteLine(message); // 07/24/2010 Bob
        message = "I am so proud of this code!"; // 07/24/2010 Bob
        Console.WriteLine(message); // 07/24/2010 Bob
    }
}

原文:这样的程序员对于自己的代码改动非常骄傲和自恋,所以,他觉得需在在这些自己的代码上标上自己的名字。其实,一个版本控制工具(如:CVS或Subversion)可以完整地记录下所有的关于代码的改动的和作者相关的一切信息,只不过不是那么明显罢了。

陈皓:我同意原文的观点。在我的团队里也有这样的事情发生。有段时间我认真思考过这样的事情,是否应该把这样的事情在代码中铲除出去。后来,我觉得,允许这样的行为并不一定是坏事,因为两点:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (27 人打了分,平均分: 4.26 )
Loading...
HTML5 和 Flash 之争

HTML5 和 Flash 之争

文章来源

二者之间的竞争会演变成为一场“战争”吗?(现在甚至出现了可以把Flash转成Javascript/HTML5的工具)

首先需要弄清楚二者之间最主要的区别,HTML 是一种语言(超文本标记语言 – HyperText Markup Language),而 Flash 是 Adobe(其收购了Macromedia)公司的一个浏览器插件(Plugin)。HTML5 目前还是 W3.org 规范中一个草案,这意味着其还没有最终定案,希望到 2012 年这项工作能够完成。

以下是二者各自的一些特点:

HTML5

这个新的技术更为易学和易用,比较 .FLA 和 .SWF 文件更容易编辑。并且基本上过去所有由 Flash 才能制作的动画效果都能够使用 JS + HTML5 + CSS 3 来完成,不过工作量可能会更大一些,不仅文件尺寸会增大,性能方面也会有影响。

以前为 Web 表单设定风格我们一定需要使用到 JavaScript, 但是 HTML5 中的 contenteditable 属性让我们可以做得更多。一些新的输入类型(Types of Inputs)也被加入到 HTML5 中,如:电子邮件,数字,值范围等等。

用户不仅仅需要一个支持 HTML5 的浏览器,还需要 CCS 3 和新的 JavaScript 引擎的支持。

免费(不包括第三方字体和音频视频等等)

更好地移动设备支持(HTML5 正在被运用于 iPhone,iPod,iPad 和 Android 应用的开发)

拖拽,事实上这不是 HTML5 的一部分,但是在新版本的 GMail 中,从桌面拖拽文件到浏览器能够用 HTML5 很好地实现。对于 Flash 我不知道这是否可以实现?

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (12 人打了分,平均分: 3.50 )
Loading...
计算机编程简史图

计算机编程简史图

这个图片太经典了,本来想翻译的,后来觉得这么经典的图片可能早已被人翻译了,简单的Google一下,果然有人翻译了。那我就把英文版和中文版都转过来吧。我们可以看到,其中很大一部分人都和Unix有着不解之缘(参见《Unix传奇上篇Unix传奇下篇》)

什么也不说了,直接上图(图片比较大,单击图片看大图)


计算机编程简史图(英文版)

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (19 人打了分,平均分: 3.89 )
Loading...
苹果开发工具Xcode 4 第二预览版

苹果开发工具Xcode 4 第二预览版

今天,苹果公司向开发者发布Xcode 4 Preview 2,这是一个IDE用来开发在Mac,iPhone,iPad上应用程序的工具。在这个第二预览版中,主要有以下新的功能:

  • 这个版本不像以往的版本有太多的窗口,其把以前那些窗口督统一起来,只有一个窗口。
  • 集成了Interface Builder(以前这个东东和Xcode是两个东西)
  • Xcode Assistant 可以让你的设计和代码同时呈现。
  • LLVM Compiler 2.0。LLVM是下一代的编译器,其完全支持C,C++和Objective C,而且编译的速度和编译成的执行速度都快于GCC。同时也引入了LLDB做为新的调试器。
  • 多版本编译。这个功能可以让你在IDE中编译两个版本的代码,而且可以和Subversion或Git集成。

你可以访问 What’s New 来看看具体的细节。

苹果开发工具Xcode 4 Preview 2
好烂啊有点差凑合看看还不错很精彩 (9 人打了分,平均分: 3.11 )
Loading...
检查素数的正则表达式

检查素数的正则表达式

一般来说,我们会使用正规表达式来做字符串匹配,今天在网上浏览的时候,看到了有人用正则表达式来检查一个数字是否为素数(质数),让我非常感兴趣,这个正则表达式如入所示:

检查素数与否的正则表达式

要使用这个正规则表达式,你需要把自然数转成多个1的字符串,如:2 要写成 “11”, 3 要写成 “111”, 17 要写成“11111111111111111”,这种工作使用一些脚本语言可以轻松的完成。

一开始我对这个表达式持怀疑态度,但仔细研究了一下这个表达式,发现是非常合理的,下面,让我带你来细细剖析一下是这个表达式的工作原理。

首先,我们看到这个表达式中有“|”,也就是说这个表达式可以分成两个部分:/^1?$/ 和 /^(11+?)\1+$/

  • 第一部分:/^1?$/, 这个部分相信不用我多说了,其表示匹配“空串”以及字串中只有一个“1”的字符串。
  • 第二部分:/^(11+?)\1+$/,这个部分是整个表达式的关键部分。其可以分成两个部分,(11+?)\1+$,前半部很简单了,匹配以“11”开头的并重复0或n个1的字符串,后面的部分意思是把前半部分作为一个字串去匹配还剩下的字符串1次或多次(这句话的意思是——剩余的字串的1的个数要是前面字串1个数的整数倍)。

可见这个正规则表达式是取非素数,要得到素数还得要对整个表达式求反。通过上面的分析,我们知道,第二部分是最重要的,对于第二部分,举几个例子,

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (43 人打了分,平均分: 4.51 )
Loading...
Kent Beck 谈单元测试和持续部署

Kent Beck 谈单元测试和持续部署

文章来源

2010年7月2日,Roy Osherove 和 Kent Beck 在 blog.typemock.com 进行了一次对话,话题涉及单元测试(Unit Testing),JUnit Max(Kent 开发的一个单元测试的 Eclipse Plugin,不免费),和面向初创企业的精益方法(Lean Startups)。

单元测试和 JUnit Max
作为软件开发方法学的大师、极限编程XP的创始人、敏捷宣言的创始人之一,Kent Beck 一直在努力最大化地利用单元测试的价值,他说一些程序员仍然认为单元测试并不是他们的工作,但是单元测试确实能够提高软件的质量。目前他正在开发 JUnit Max,这是一个 Eclipse plugin,每当程序员保存一个 Java 源文件的时候,JUnit Max 就会运行测试并报告反馈信息。测试中的错误将会如同编译错误一样被报告给程序员。JUnit Max 的核心思想是测试错误应该和编译错误一样被 IDE 报告给程序员,程序员不需要额外的菜单选项或者运行其他的工具来运行测试。特别是那些经常失败的测试,对于程序员来说是非常有价值的反馈信息。在测试驱动开发(Test Driven Development – TDD)中,我们重复着这样一个循环:“编写一个‘失败’的测试(Failing Test)” – “编码实现功能以便让测试通过”,随着开发的深入,测试越来越丰富,测试能够反馈给程序员的信息也越来越多,它们可以帮助程序员找出那些需要改进的代码。JUnit Max 能够缩短这个循环的周期,因为它更为频繁地运行测试和提供反馈。Roy 问道:“当你一个人编码的时候,你是否严格地遵循 TDD,即一定要先写测试,然后写实现代码。我个人发现这并不是一件容易做到的事情,特别是当一个人编码的时候。” Kent 回答:“视情况而定,有时候并不需要死板地遵循 TDD,比如当我在做一些探索性或者说实验性的编码时,并不需要写测试,因为我只是想尝试一下某些功能和特性。”

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (11 人打了分,平均分: 3.73 )
Loading...
在Javascript里写Python

在Javascript里写Python

以前,本站介绍过去一种写HTML和CSS的新方法,以一种杂交式的代码,昨天给大家介绍了.NET代码和Python及Ruby代码的互相转换工具,但是这个世界可能比我们想像的还疯狂。IronPython 是一个在.NET平台上运行Python的东西,就像那些在JVM上运行其它语言的东东一样。当然,IronPython最邪恶的事情并不是在.NET上运行Python,而是在Javascript里写Python的语法。这个畸形混血儿的网址在这里(请注意翻墙)。

使用这个玩意很简单,下面,让我们看看这个混血儿长啥样?

首先,你需要链接一个js文件:

<script src="http://gestalt.ironpython.net/dlr-latest.js" type="text/javascript"></script>

然后,让我们看看如何写一个按钮事件:

<input id="button" type="button" value="Say, Hello!" />
<script type="text/python">
  def button_onclick(s, e):
      window.Alert("Hello from Python!")
  document.button.events.onclick += button_onclick
</script>

你对此事怎么看?欢迎留下你的看法。

好烂啊有点差凑合看看还不错很精彩 (10 人打了分,平均分: 3.20 )
Loading...
.NET代码转换器

.NET代码转换器

想把.NET的代码(C#和VB.NET)互转吗?或是转成Python或Ruby吗?在 http://www.developerfusion.com/ 站点上有这样的在线工具。点击下面的链接你可以使用这些工具。当然,这些工具也有很多BUG

老实说,我并不太清楚这些工具有什么用,看似很useless。难道是为了用来学习新的语言?就像Google的Translator的一样?就像一个并不懂中文的老外可以用Google Translator在其Facebook中整点中文耍耍酷一样,难道说,一个C#的程序员可以用这样的工具和一个Python的程序员也耍耍酷?各位看客觉得这个东西有意义吗?

不过,有一点我可以确定,如果有工具把Unix/Linux下的C源码和Windows下的C源码相互自动转换,估计这会是相当划时代的,因为,这应该会让那些什么Wine或Cygwin之类的东西都统统会成为历史了。不过,这样的东西在实现上又将会有多么大的难度(OS系统API的相互转换),这个事会有可行性吗?

好烂啊有点差凑合看看还不错很精彩 (12 人打了分,平均分: 3.58 )
Loading...
浏览器正则表达式检查插件

浏览器正则表达式检查插件

以前本站介绍过一个在线的《正则表达式生成器》,下面是两个在浏览器中检查正则表达式的插件,Firefox的和Chrome的,希望对你有用。

1)Firefox:Regular Expressions Tester

Firefox正规则表达式检查插件Regular Expressions Tester

2)Chrome:Regular Expression Checker

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (10 人打了分,平均分: 3.50 )
Loading...
五大基于JVM的脚本语言

五大基于JVM的脚本语言

还记得以前本站的一篇文章《如何在Google App Engine上运行PHP》吗,其实那是借用 Quercus, 一个 100% 的用Java 实现的一个 PHP 引擎。今天,这样的东西太多了,能运行在Java的虚拟机JVM上的程序意味着有天然的跨平台性,现在JVM并不单单只能运行Java程序,在JVM上出现了若干使用Java虚拟机运行的脚本程序,比如什么PHP, Python, Ruby等等,这里有一篇文章评论了在JVM上的可以运行的排名前五脚本语言。他们分别是:

  1. Groovy。构建在强大的Java语言之上 并添加了从Python,Ruby和Smalltalk等语言中学到的诸多特征,为Java开发者提供了现代最流行的编程语言特性,而且学习成本很低(几乎为零),在开发Web,GUI,数据库或控制台程序时, 通过减少框架性代码 大大提高了开发者的效率。支持单元测试和模拟(对象),可以简化测试。无缝集成 所有已经存在的 Java对象和类库。直接编译成Java字节码,这样可以在任何使用Java的地方 使用Groovy。
  2. JRuby。一个纯Java实现的Ruby解释器。通过JRuby,你可以在JVM上直接运行Ruby程序,调用Java的类库。很多Java编写的Ruby IDE都是使用JRuby来解释语法的。
  3. Scala。一种多范式的编程语言,设计意图是要整合面向对象编程和函数式编程的各种特性。Scala编程语言近来抓住了很多开发者的眼球。它看起来像是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格。Scala的名称表明,它还是一种高度可伸缩的语言。Scala的设计始终贯穿着一个理念:创造一种更好地支持组件的语言。
  4. Fantom 。Fantom 前身是 (Fan) 是一个基于 Java 和 .NET 平台的编程脚本引擎,用来在运行时产生 JVM 和 .NET 平台的字节码,该语言是面向对象的,跟 Groovy 和 JRuby 有点类似,可通过特定的接口来集成 Java 的类库。
  5. Jython。Jython由于继承了Java和Python二者的特性而显得很独特。其是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。

下面是一张表格比较了这五大JVM脚本语言:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (15 人打了分,平均分: 3.33 )
Loading...