月度归档:2013年04月

程序员成熟的标志

http://www.cnblogs.com/n216/archive/2011/05/16/2047327.html

程序员在经历了若干年编程工作之后,很想知道自己水平到底如何?自己是否已经成为成熟的程序员?虽然程序员会对自己有一个自我评价,但是,自己的评价和社会的评价、专业的评价会有差异,所以程序员自己并不能肯定这个评价。现实中,除了各种证书之外,很少有人会专门给出一个程序员的成熟度的评价。人们往往是偶发性地就事论事地对程序员的工作作出好与不好,行与不行的评论。因此,程序员对此感到很茫然,不知道要从那些方面去评价自己的能力。

一个程序员到底成熟不成熟,我想从以下几个方面谈谈自己的看法。

1、技术标志

如果程序员不会编程序那决不是程序员,程序员至少要掌握一门程序设计语言,要能够用这种语言去编写程序去解决他想解决的问题。但是,成熟的程序员往往掌握不止一种程序语言,三到四种语言的掌握是必须的,一种二种语言的精通也是必须的。

除了从掌握程序设计语言个数之外,我们还可以从其他几个方面去看看程序员在技术上水平。例如,函数编写能力(命名、格式、大小、分类、参数、复用等),面向过程的能力,面向对象的能力,数据库技术能力,效率处理能力,安全处理能力,网络处理能力,软件构架能力,人机交互能力,通用软件能力,软件文档能力等等。尤其是面向对象技术的掌握和运用,以及面向服务的技术都是成熟程序员所必需掌握的。

    2、时间标志

虽然程序员的天资、素质、基础知识各不相同,所经历的工作内容以及环境也不相同,但是,时间也是程序员成熟程度的标志之一。一般程序员需要经过三到五年的时间才能日趋成熟。其中入门需要一年,成长需要两年。这是我经过长期观察得到平均数据。我并不认为成熟时间越短程序员就越聪明,就越了不起。享受每个阶段充分的时间,会让自己成长更加充实、更加成熟。当然,也有超期而不成熟的情况,这也是很正常的。

    3、项目标志

程序员的社会性是程序员成熟的标志之一。没有参加过项目的程序员,程序编得再好,只能是纯程序类的程序员,是一个孤独的高手,是一种个人型的程序员,远没有成熟。项目作为社会性活动,体现了项目的社会价值。所以项目能力也是程序员成熟的重要标志之一:项目能力包括参加项目的个数、项目的大小、在项目中承担的角色等等。就项目承担的角色而言,主持开发(项目经理)3个以上项目是必须的,这是一个必要条件。一个程序员如果没有主持过开发,无论参加过多少项目的开发,无论是在程序编写或项目设计上发挥了多大的作用,是很难被称之为成熟的,因为项目的组织、协调和管理是反映一个程序员成熟程度的又一个标志。就如同一个程序员能参与过10个以上大大小小的项目或能参加或能主持两个以上大型项目的开发,其成熟程度是可以信赖的。若低于此数,则说明程序员离成熟还有相当的空间。“我们在项目中成长”可见项目对于程序员的意义是多么的巨大。

另外,一般程序员只是为一个企业客户进行开发一个或多个项目,或同行业的企开发项目,如果程序员能够如果程序员能够开发过多个行业的项目,其成熟度要比一般人要高一些。

    4、思维标志

幼稚和成熟在思维方式上还是有很明显的区别的。就程序员而言,不成熟的程序员逻辑性不强,程序编得没有条理,即使程序员自己进行了解释也没人能看懂。而成熟的程序员应该具有很强的逻辑性,程序编得井井有条,不用解释别人也能看得懂。这种逻辑性还体现在软件的构架设计、数据库设计、算法设计等多个方面。程序员通过全集子集概念、时间概念、顺序概念、重点非重点概念等对各种事物进行逻辑分析。例如,以顺序概念为例,不成熟的程序员往往会采用自底向上的思维方式来开发程序。他们先考虑程序的具体实现,然后再考虑功能设计、最后考虑构架设计。而成熟的程序员则采用自顶向下思维方式,先考虑构架设计、再考虑功能设计、最后才考虑编程的具体实现。前者思维方式主要是出于工作惯性,只适合入门阶段,而后者思维方式反映了后者的进步,适用于各种项目开发或大型项目的开发。

除了在思维内容上的逻辑性之外,程序员还应该处理好动脑和动手的关系。重视思维本身就是一种成熟的标志。成熟的程序员的思考时间要大于动手编程时间,想好之后只要一次就编程成功,而不成熟的程序员往往动手编程时间要远大于思考时间,而且是边做边想,通过反复来逼近最终目标。

另外,在思维范围上,成熟的程序员要比普通的程序员有更开放视野。他们更容易去接受新的东西,更容易不受各种约束去考虑问题,更勇于去挑战自己和高手。

 5、与人交往

很多人认为程序员是和计算机打交道的行业。这只是这个职业的特点。但是,只要是工作必然就是一种社会劳动。而社会劳动则必须和人进行交流和沟通。尽管程序员的劳动工具是计算机,但并不意味着程序员只想着这个工具。从这个工具的下游来看,程序员还是要考虑用这个劳动工具生产出来的软件产品是否有人购买,是否有人使用,是否运行正常,从这个工具的上游来看,是谁让程序员了解设计方案的,是谁让程序员编程序的,是谁让程序员程序通过验收的等等。因此程序员在软件制作各个环节都会与其他人打交道。只有和人进行有效的交流和沟通我们的工作才能进行下去才能做的更好。

如果一个程序员还沉浸在个人劳动的意境之中,对外界持有冷漠、无奈、恐惧的心理,内心里不愿意和外界打交道,无论自己感觉自己的技术水平有多高,还是一个不成熟的程序员。而成熟的程序员一定是特别重视与人的交往,无论是上级领导、外部客户、项目经理、团队同伴这些与自身工作密切相关的人还是那些非同单位同行朋友、网友等他们都会认真去听取别人的阐述、要求、意见、建议、反馈等。从中得到更多的工作上的、技术上的、生活上的好的想法,以便自己参考和吸收。与此同时,与人交往也反映你有好的想法和好的技术水平交流出去,而这些想法和技术水平也是你成熟度一种反映。那些没有想法和技术水平的程序员的确是怕和别人交流的。

与人交流的有两个基本能力,一个是理解能力,一个是表达能力。两者缺一不可。例如,有的程序员理解能力差,不能理解项目经理提出的要求,有的程序员表达能力差,无逻辑,无重点,啰里啰唆,让别人不知所云。这都是不成熟的表现。

   6、别人评价

别人的评价尤其是单位同事以及对自己工作情况比较了解的人对自己的评价是有参考价值的。一般而言,评价差的,一定是不行的,是不成熟的。评价好的要看情况而定,单位同事对人的评价会从两个方面来考虑,一个是这个人的为人情况,一个是这个人的工作能力。如果两者都不错,我们有理由认为这个程序员是成熟的。反之,无论是工作能力强,但为人不好,为人很好,工作能力不强,我看都不能算一个成熟的程序员。

所以,程序员要注重别人对自己的评价,在提高自己技术水平的同时,学会做人,做好人,学会与他人分享,这样别人才会给自己更好的评价。

无视别人评价其实,也是一种不成熟的表现。只有自己感觉好,大家感觉好,那才是真的好。

其实,别人的评价如果仅限于自己单位的话,恐怕这种评价的价值会打折扣,如果这个单位技术人员的人数很少,水平普遍很低,即使你鹤立鸡群,大家对你的评价很好,但是,你和其他公司和单位的程序员来比,你真的不一定的成熟。所以,我说别人的评价仅仅是一个参考。

   7、收入标志

收入也是成熟程序员一个参考标志。收入的大小往往是对程序员社会价值的认可度,表明程序员的劳动值这个价钱。一般而言,成熟的程序员能够挣得软件业平均收入的中上水平,或者在一个单位或部门中能够挣得比80%左右员工要高的收入。而刚参加工作不久的程序员收入应该与其相差很大的。另外,单位的项目奖金发放也可以看出程序员在项目中的地位和作用。

现实中,我们知道程序员的收入和其付出是不是正比的,而且,越是能力强的、贡献大的程序员,可能不一定比那些不如其它能力不如他的程序员高出许多。这不是软件行业的通病,几乎所有行业都存在这种情况。通过分析我们认为程序员成熟度应该是和其收入高低挂钩的。如果,我们知道我们能力和贡献大大超出我们的收入,我们就有理由向上级领导提出自己的收入要求。

   8、心理素质

程序员常常面对各种各样的成功和失败,尤其是失败更是多于成功,这也是程序员这个职业特点之一。以编程为例,几乎没有一个人一次就能把程序给编好的,它总是要遇到各种语法错误,总要遇到各种遗漏,一个程序要反复多次修改调试才能完好。有的程序员因找不出来程序的bug,束手无措,哀声叹气,心里极其不爽。以工作为例,有的程序员因工作进度和程序出错常常受到别人的批评和指责,心里极其不满,认为批评人不了解造成这个结果的客观原因,批评错了人。从而对人产生意见,甚至对工作造成了影响。面对失败和挫折,成熟的程序员会坦然面对:编程时出现问题不可怕,有什么问题就解决问题,解决不了的问题可以想其他方法进行解决,不在一棵树上吊死。面对别人的批评和指责,首先从自身查问题,是自己的问题,那就要主动承担责任,并尽快改正。不是自己的问题,应该换位思考,理解批评人的焦急心态,并找机会给予说明。良好的心理素质在面对困难和挫折的时候,就会很坦然,很坚强,很自信。

程序员也会面对成功的。有些程序员因开发了某个项目,因编写了某个程序而感觉良好,在不自觉中表现出我最牛,我最好的样子,面对他人夸夸其谈,而对其他人不屑一顾。而更有甚者并其无成果,表现平平,却依然会摆出一个高手的样子,有的仅仅参与了某个项目,而且不是项目主要开发者,却会贪天之功,归其所有,好像这个项目是他主持开发的。这些其实也是心理素质不成熟的另一种表现。成熟的程序员面对成功并不会感觉到高人一等,该是自己的功劳就是自己的功劳,该是别人的功劳就是别人的功劳,即使自己比别人水平高出许多,他还是在想还有更高的技术顶峰等待攀登,不可自傲,看到别人取得的成绩首先感到去祝贺,然后去学习,而不是心怀嫉妒,从中挑刺,尽量贬低。

良好的心理素质使得程序员更加理性地处理好各种成功和失败带来的各种问题,更有利于程序员超越自我,以平常之心去迎接更大的挑战。

当然一个程序员是否成熟是一个仁者见仁,智者见智的话题。有的人强调程序员的个人能力方面,有的人强调是程序员的社会能力方面。我认为从以上8个方面综合地去评判一个程序员是否成熟应该能说明些问题了。我们标志成熟,一个目的是对程序员前面成长过程给与一个肯定和鼓励,让程序员认清自己的所处的阶段,让自信找出依据。另外一个目的是对程序员未来成长提出更高的要求。走向优秀是程序员面临的更大的挑战。

高效代码审查的十个经验

http://kb.cnblogs.com/page/163000/

  代码审查(Code Review)是软件开发中常用的手段,和QA测试相比,它更容易发现和架构以及时序相关等较难发现的问题,还可以帮助团队成员提高编程技能,统一编程风格等。

  1. 代码审查要求团队有良好的文化

团队需要认识到代码审查是为了提高整个团队的能力,而不是针对个体设置的检查“关卡”。

“A的代码有个bug被B发现,所以A能力不行,B能力更好”,这一类的陷阱很容易被扩散从而影响团队内部的协作,因此需要避免。

另外,代码审查本身可以提高开发者的能力,让其从自身犯过的错误中学习,从他人的思路中学习。如果开发者对这个流程有抵触或者反感,这个目的就达不到。

2. 谨慎的使用审查中问题的发现率作为考评标准

  在代码审查中如果发现问题,对于问题的发现者来说这是好事,应该予以鼓励。但对于被发现者,我们不主张使用这个方式予以惩罚。软件开发中bug在所难免,过度苛求本身有悖常理。更糟的是,如果造成参与者怕承担责任,不愿意在审查中指出问题,代码审查就没有任何的价值和意义。

3. 控制每次审查的代码数量

根据smartbear在思科所作的调查,每次审查200行-400行的代码效果最好。每次试图审查的代码过多,发现问题的能力就会下降,具体的比例关系如下图所示:

  我们在实践中发现,随着开发平台和开发语言的不同,最优的代码审查量有所不同。但是限制每次审查的数量确实非常必要,因为这个过程是高强度的脑力密集型活动。时间一长,代码在审查者眼里只是字母,无任何逻辑联系,自然不会有太多的产出。

4. 带着问题去进行审查

我们在每次代码审查中,要求审查者利用自身的经验先思考可能会碰到的问题,然后通过审查工作验证这些问题是否已经解决。一个窍门是,从用户可见的功能出发,假设一个比较复杂的使用场景,在代码阅读中验证这个使用场景是否能够正确工作。

使用这个技巧,可以让审查者有代入感,真正的沉浸入代码中,提高效率。大家都知道看武侠小说不容易瞌睡,而看专业书容易瞌睡,原因就是武侠小说更容易产生代入感。

有的研究建议每次树立目标,控制单位时间内审核的代码数量。这个方法在我们的实践中显得很机械和流程化,不如上面的方法效果好。

5. 所有的问题和修改,必须由原作者进行确认

如果在审查中发现问题,务必由原作者进行确认。

这样做有两个目的:

(1) 确认问题确实存在,保证问题被解决。

(2) 让原作者了解问题和不足,帮助其成长。

有些时候为了追求效率,有经验的审查者更倾向于直接修改代码乃至重构所有代码,但这样不利于提高团队效率,并且会增加因为重构引入新bug的几率,通常情况下我们不予鼓励。

6. 利用代码审查激活个体“能动性”

即使项目进度比较紧张,无法完全的进行代码审查,至少也要进行部分代码的审查,此时随即抽取一些关键部分是个不错的办法。

背后的逻辑是,软件开发是非常有创造性的工作,开发者都有强烈的自我驱动性和自我实现的要求。让开发者知道他写的任何代码都可能被其他人阅读和审察,可以促使开发者集中注意力,尤其是避免将质量糟糕,乃至有低级错误的代码提交给同伴审查。开源软件也很好的利用了这种心态来提高代码质量。

7. 在非正式,轻松的环境下进行代码审查

如前所述,代码审查是一个脑力密集型的工作。参与者需要在比较轻松的环境下进行该工作。因此,我们认为像某些实践中建议的那样,以会议的形式进行代码审查效果并不好,不仅因为长时间的会议容易让效率低下,更因为会议上可能出现的争议和思考不利于进行如此复杂的工作。

8. 提交代码前自我审查,添加对代码的说明

所有团队成员在提交代码给其他成员审查前,必须先进行一次审查。这次自我修正形式的审查除了检查代码的正确性以外,还可以完成如下的工作:

(1) 对代码添加注释,说明本次修改背后的原因,方便其他人进行审查。

(2) 修正编码风格,尤其是一些关键数据结构和方法的命名,提高代码的可读性。

(3) 从全局审视设计,是否完整的考虑了所有情景。在实现之前做的设计如果存在考虑不周的情况,这个阶段可以很好的进行补救。

我们在实践中发现,即使只有原作者进行代码审查,仍然可以很好的提高代码质量。

9. 实现中记录笔记可以很好的提高问题发现率

成员在编码的时候应做随手记录,包括在代码中用注释的方式表示,或者记录简单的个人文档,这样做有几个好处:

(1) 避免遗漏。在编码时将考虑到的任何问题都记录下来,在审查阶段再次检查这些问题都确认解决。

(2) 根据研究,每个人都习惯犯一些重复性的错误。这类问题在编码是记录下来,可以在审查的时候用作检查的依据。

(3) 在反复记录笔记并在审查中发现类似的问题后,该类问题出现率会显著下降

10. 使用好的工具进行轻量级的代码审查

“工欲善其事,必先利其器”。我们使用的是bitbucket提供的代码托管服务。

每个团队成员独立开发功能,然后利用Pull Request的形式将代码提交给审查者。复审者可以很方便在网页上阅读代码,添加评论等,然后原作者会自动收到邮件提醒,对审阅的意见进行讨论。

即使团队成员分布在天南海北,利用bitbucket提供的工具也能很好的进行代码审查。

什么是整洁的代码(Clean Code)?

http://www.iteye.com/news/26838

什么样的代码才是真正好的、整洁的代码?来看看大牛们怎么说。 

Bjarne Stroustrup,C++之父:

引用
我喜欢优雅、高效的代码:

  • 逻辑应该是清晰的,bug难以隐藏;
  • 依赖最少,易于维护;
  • 错误处理完全根据一个明确的策略;
  • 性能接近最佳化,避免代码混乱和无原则的优化;
  • 整洁的代码只做一件事。

Grady Booch,《面向对象分析与设计》作者:

引用
  • 整洁的代码是简单、直接的;
  • 整洁的代码,读起来像是一篇写得很好的散文;
  • 整洁的代码永远不会掩盖设计者的意图,而是具有少量的抽象和清晰的控制行。

Dave Thomas,OTI公司创始人,Eclipse战略教父:

引用
  • 整洁的代码可以被除了原作者之外的其他开发者阅读和改善;
  • 具备单元测试和验收测试;
  • 有一个有意义的名字;
  • 使用一种方式来做一件事情;
  • 最少的依赖,并明确定义;
  • 提供了一个清晰的、最小的API;
  • 应该根据语言特性,在代码中单独显示必要的信息,而不是所有的信息。

Michael Feathers,《修改代码的艺术》作者:

引用
  • 整洁的代码看起来总是像很在乎代码质量的人写的;
  • 没有明显的需要改善的地方;
  • 代码的作者似乎考虑到了所有的事情。

Ward Cunningham,Wiki和Fit创始人,极限编程联合创始人,Smalltalk和面向对象的思想领袖:

引用
  • 当你读代码时,你发现每个程序都如你期待的那样
  • 你可以称之为漂亮的代码
  • 代码完美展现了该编程语言的设计目的

总之,整洁的代码的特点:

  • 容易与其他人协作(简单、意图明确、良好的抽象、不出意料、合适的名称)
  • 针对现实世界,比如,有一个清晰的错误处理策略
  • 代码作者显然很关心软件和其他开发者(针对双方的可读性和可维护性)
  • 最小化(做一件事,最小的依赖)
  • 以最合适的方式解决问题

编写超级可读代码的15个最佳实践

http://blog.csdn.net/hfahe/article/details/6303585

译自:http://net.tutsplus.com/tutorials/html-css-techniques/top-15-best-practices-for-writing-super-readable-code/

译者:蒋宇捷(转载请标明出处-http://blog.csdn.net/hfahe)

 

       一月两次,我们重温Nettuts历史上读者最喜欢的文章。

代码可读性是一个计算机编程世界的普遍主题。它是我们作为开发者第一件学习的事情。这篇文章将阐述编写可读性代码十五个最重要的最佳实践。


1 – 注释和文档

集成开发环境IDE在过去的短短几年里走过了很长的路。它使得注释代码比以前更加有用。依照特定标准书写的注释允许IDE和其他工具通过不同的方式来使用它们。

考虑如下示例:

 

我在函数定义中添加的注释可以在调用它的地方看到,即便是在其他文件中。

这里是我另外一个从第三方库中调用函数的例子:

 

在这些特殊的例子中,使用的注释(或者文档)类型基于PHPDoc,IDE是Aptana


2 – 一致的排版

我假定你已经知道了你必须要缩进你的代码。然而,保持排版样式一致仍然是一个好主意。

这里有不止一种方式来进行代码排版。

第一种:

 

[c-sharp] view plaincopy
  1. function foo() {
  2.     if ($maybe) {
  3.         do_it_now();
  4.         again();
  5.     } else {
  6.         abort_mission();
  7.     }
  8.     finalize();
  9. }

 

第二种:

 

[c-sharp] view plaincopy

  1. function foo()
  2. {
  3.     if ($maybe)
  4.     {
  5.         do_it_now();
  6.         again();
  7.     }
  8.     else
  9.     {
  10.         abort_mission();
  11.     }
  12.     finalize();
  13. }

 

第三种:

 

[c-sharp] view plaincopy

  1. function foo()
  2. {   if ($maybe)
  3.     {   do_it_now();
  4.         again();
  5.     }
  6.     else
  7.     {   abort_mission();
  8.     }
  9.     finalize();
  10. }

 

我曾经使用第二种样式但是最近换为第一种。但是这仅仅只代表了一种偏爱。这里并没有每个人必须要遵守的“最好的”样式。事实上,最佳的样式,就是一致的样式。如果你是一个小组的一部分或者你在为一个项目贡献代码,你必须依照这个项目之前使用的样式。

排版的样式总不是完全和另外一个不同。有时,它们混合了多种不同的规则。例如,按照PEAR编码标准,前括弧“{”和控制结构在同一行上,但是在功能定义后放在第二行上。

PEAR样式:

 

[c-sharp] view plaincopy

  1. function foo()
  2. {                     // placed on the next line
  3.     if ($maybe) {     // placed on the same line
  4.         do_it_now();
  5.         again();
  6.     } else {
  7.         abort_mission();
  8.     }
  9.     finalize();
  10. }

 

同时注意它们使用4个空格而不是Tab来缩进。

这里有一个维基百科的文章,里面有许多不同排版样式的例子。


3 – 避免显而易见的注释

为代码添加注释是效果显著的;但是,它可能太过或者只是多余的文本。像如下例子:

 

[c-sharp] view plaincopy

  1. // get the country code
  2. $country_code = get_country_code($_SERVER[‘REMOTE_ADDR’]);
  3. // if country code is US
  4. if ($country_code == ‘US’) {
  5.     // display the form input for state
  6.     echo form_input_state();
  7. }

 

如果注释内容都是显而易见的,它们并没有提高工作效率。如果你必须要注释这些代码,你可以简单的把它们合并在一行:

 

[c-sharp] view plaincopy

  1. // display state selection for US users
  2. $country_code = get_country_code($_SERVER[‘REMOTE_ADDR’]);
  3. if ($country_code == ‘US’) {
  4.     echo form_input_state();
  5. }

 


4 – 代码分组

确定的任务多半需要多行代码。使用一些空白将这些任务的代码分隔为几段是一个好主意。

这是一个简单的示例:

 

[c-sharp] view plaincopy

  1. // get list of forums
  2. $forums = array();
  3. $r = mysql_query(“SELECT id, name, description FROM forums”);
  4. while ($d = mysql_fetch_assoc($r)) {
  5.     $forums []= $d;
  6. }
  7. // load the templates
  8. load_template(‘header’);
  9. load_template(‘forum_list’,$forums);
  10. load_template(‘footer’);

 

在每一段之前添加注释也增强了视觉上的分隔。


5 – 命名的一致性

PHP有些时候在遵守命名一致性方面有很大问题:

  • strops()和str_split()
  • imagetypes()和image_type_to_extension()

首先,这些命名必须有单词的分界线。有两种流行的选择:

  • 骆驼命名法:除了第一个单词外,每个单词的第一个字符大写。
  • 下划线命名法: 单词间采用下划线,例如mysql_real_escape_string()。

像我之前提到的一样,采用不同的命名选择会创建和排版样式类似的情形。如果一个已有的项目遵照一个确定的习惯,你必须遵守它。同时,某些语言平台倾向于使用特定的命名规则。例如Java里,大多数代码使用骆驼命名法;在PHP里大多采用下划线命名法。

它们也可以混用。一些开发者喜欢在程序函数和类名上使用下划线命名,但是在类方法名上使用骆驼命名。

 

[c-sharp] view plaincopy

  1. class Foo_Bar {
  2.     public function someDummyMethod() {
  3.     }
  4. }
  5. function procedural_function_name() {
  6. }

 

所以,没有明显的“最好的”样式,只需要保持一致。


6 – DRY原则

DRY即不要重复你自己。也被称为DIE:重复是恶魔。

这个原则规定:

      “在一个系统里每一个知识的片段必须有一个单一、明确、权威的表现。”

大多数应用程序(或者通常的计算机)的目的是让重复的任务自动化。这个原则在所有的代码,即使Web程序中也应该保持。代码的相同片段不应该多次重复。

例如,大多数Web程序由许多页面组成。这些页面很可能包含相同的元素。页头和页脚经常符合这个条件。复制和粘贴这些页头和页尾到每一个页面中不是一个好主意。这是Jeffrey Way解释如何在CodeIgniter里创建模版的链接

 

[c-sharp] view plaincopy

  1. $this->load->view(‘includes/header’);
  2. $this->load->view($main_content);
  3. $this->load->view(‘includes/footer’);

 


7 – 避免过深的嵌套

太多层的嵌套会造成代码阅读和跟踪困难。

 

[c-sharp] view plaincopy

  1. function do_stuff() {
  2. // …
  3.     if (is_writable($folder)) {
  4.         if ($fp = fopen($file_path,’w’)) {
  5.             if ($stuff = get_some_stuff()) {
  6.                 if (fwrite($fp,$stuff)) {
  7.                     // …
  8.                 } else {
  9.                     return false;
  10.                 }
  11.             } else {
  12.                 return false;
  13.             }
  14.         } else {
  15.             return false;
  16.         }
  17.     } else {
  18.         return false;
  19.     }
  20. }

 

为了可读性,通常需要修改代码来减少嵌套的层数。

 

[c-sharp] view plaincopy

  1. function do_stuff() {
  2. // …
  3.     if (!is_writable($folder)) {
  4.         return false;
  5.     }
  6.     if (!$fp = fopen($file_path,’w’)) {
  7.         return false;
  8.     }
  9.     if (!$stuff = get_some_stuff()) {
  10.         return false;
  11.     }
  12.     if (fwrite($fp,$stuff)) {
  13.         // …
  14.     } else {
  15.         return false;
  16.     }
  17. }

 


8 – 减少行的长度

我们的眼睛对于阅读高和窄的文本列更感觉舒适。这就是为什么报纸文章看起来像如下样子的原因:

 

避免在一行上编写过长的代码是一个最佳实践。

 

[c-sharp] view plaincopy
  1. // bad
  2. $my_email->set_from(‘test@email.com’)->add_to(‘programming@gmail.com’)->set_subject(‘Methods Chained’)->set_body(‘Some long message’)->send();
  3. // good
  4. $my_email
  5.     ->set_from(‘test@email.com’)
  6.     ->add_to(‘programming@gmail.com’)
  7.     ->set_subject(‘Methods Chained’)
  8.     ->set_body(‘Some long message’)
  9.     ->send();
  10. // bad
  11. $query = “SELECT id, username, first_name, last_name, status FROM users LEFT JOIN user_posts USING(users.id, user_posts.user_id) WHERE post_id = ‘123’”;
  12. // good
  13. $query = “SELECT id, username, first_name, last_name, status
  14.     FROM users
  15.     LEFT JOIN user_posts USING(users.id, user_posts.user_id)
  16.     WHERE post_id = ‘123’”;

 

同时,如果任何人想要在例如Vim这样的终端窗口中阅读代码,限制每一行的长度在80个字符以内是一个好主意。


 

9 – 代码结构

理论上,你可以将整个应用代码写在一个文件里。但是对于阅读和维护来说是一个噩梦。

在我的第一个编程项目中,我知道创建“包含文件”的含义。但是,我并没有好好进行组织。我创建了一个“inc”文件夹,放置了两个文件:db.php、functions.php。当程序变大时,functions文件也变得越来越大并难以维护。

最好的方法之一是采用框架或者模仿它们的文件夹结构。下面是CodeIgniter的文件结构:

 


10 – 统一的临时变量名

通常,变量名应该是描述性的并且包含一个或者更多的单词。但是,这对临时变量来说并不是必须的。它们可以短到只有一个单独字符。

最佳实践是:对于有同样职责临时变量采用统一的命名。这里有一些我倾向于在代码里使用的例子:

 

[c-sharp] view plaincopy
  1. // $i for loop counters
  2. for ($i = 0; $i < 100; $i++) {
  3.     // $j for the nested loop counters
  4.     for ($j = 0; $j < 100; $j++) {
  5.     }
  6. }
  7. // $ret for return variables
  8. function foo() {
  9.     $ret[‘bar’] = get_bar();
  10.     $ret[‘stuff’] = get_stuff();
  11.     return $ret;
  12. }
  13. // $k and $v in foreach
  14. foreach ($some_array as $k => $v) {
  15. }
  16. // $q, $r and $d for mysql
  17. $q = “SELECT * FROM table”;
  18. $r = mysql_query($q);
  19. while ($d = mysql_fetch_assocr($r)) {
  20. }
  21. // $fp for file pointers
  22. $fp = fopen(‘file.txt’,’w’);

 


 

11 – SQL关键词大写

数据库交互对于大多数Web应用来说是很大一个组成部分。如果你正在编写SQL查询,尽量保持它们可读。

即使SQL关键词和函数名是大小写无关的,大写来将它们从表名和列名中区分出来是一个通用的实践。

 

[c-sharp] view plaincopy

  1. SELECT id, username FROM user;
  2. UPDATE user SET last_login = NOW()
  3. WHERE id = ‘123’
  4. SELECT id, username FROM user u
  5. LEFT JOIN user_address ua ON(u.id = ua.user_id)
  6. WHERE ua.state = ‘NY’
  7. GROUP BY u.id
  8. ORDER BY u.username
  9. LIMIT 0,20

 


 

12 – 代码和数据分离

这是另外一个对于所有环境下的绝大多数编程语言都适用的原则。在Web开发中,数据通常意味着HTML输出。

当PHP许多年前第一次发布时,它最开始被看作是一个模版引擎。在巨大的HTML文件里插入一些PHP代码行是非常普通的。但是,这些年来,事情发生了改变:网站变得越来越动态化和功能化。代码已经是Web程序的一个很大的部分,将它们和HTML合并在一起并不是一个好的实践。

你可以在你的程序中应用这个原则,或者你可以使用一个第三方工具(模版引擎、框架或者CMS系统)或者依照它们的习惯。

流行的PHP框架:

流行的模版引擎:

流行的CMS系统:

  • Joomla
  • Drupal


 

13 – 模版内的交替格式

你可以选择不使用一个奇特的模版引擎,取而代之的是在模版文件里使用纯内联的PHP代码。这不是必须要违反“数据和代码分离“,只是内联代码是直接和输出相关的,并且可读。在这种情况下你可以考虑使用交替格式来控制结构。

这是一个示例:

 

[c-sharp] view plaincopy

  1. <div class=”user_controls”>
  2.     <?php if ($user = Current_User::user()): ?>
  3.         Hello, <em><?php echo $user->username; ?></em> <br/>
  4.         <?php echo anchor(‘logout’, ‘Logout’); ?>
  5.     <?php else: ?>
  6.         <?php echo anchor(‘login’,’Login’); ?> |
  7.         <?php echo anchor(‘signup’, ‘Register’); ?>
  8.     <?php endif; ?>
  9. </div>
  10. <h1>My Message Board</h1>
  11. <?php foreach($categories as $category): ?>
  12.     <div class=”category”>
  13.         <h2><?php echo $category->title; ?></h2>
  14.         <?php foreach($category->Forums as $forum): ?>
  15.             <div class=”forum”>
  16.                 <h3>
  17.                     <?php echo anchor(‘forums/’.$forum->id, $forum->title) ?>
  18.                     (<?php echo $forum->Threads->count(); ?> threads)
  19.                 </h3>
  20.                 <div class=”description”>
  21.                     <?php echo $forum->description; ?>
  22.                 </div>
  23.             </div>
  24.         <?php endforeach; ?>
  25.     </div>
  26. <?php endforeach; ?>

 

这让你避免了许多大括号。同时代码看起来和HTML的结构和排版相似。


 

14 – 面向对象 vs 面向程序

面向对象编程可以帮助你创建结构化代码。但是这不代表你完全排除程序化编程。事实上创建两者混合的风格是非常棒的。

描述数据,通常是数据库里的数据,必须使用对象。

 

[c-sharp] view plaincopy

  1. class User {
  2.     public $username;
  3.     public $first_name;
  4.     public $last_name;
  5.     public $email;
  6.     public function __construct() {
  7.         // …
  8.     }
  9.     public function create() {
  10.         // …
  11.     }
  12.     public function save() {
  13.         // …
  14.     }
  15.     public function delete() {
  16.         // …
  17.     }
  18. }

 

程序化方法常用于可以独立执行的特定任务。

 

[c-sharp] view plaincopy

  1. function capitalize($string) {
  2.     $ret = strtoupper($string[0]);
  3.     $ret .= strtolower(substr($string,1));
  4.     return $ret;
  5. }

 


 

15 – 阅读开源代码

开源项目是许多开发者一起构建的。这些项目必须保持高度的代码可读性,以便他们可以尽可能高效的协同工作。

因此,通读这些项目的源代码来观察这些开发者是如何工作的是非常棒的方法。

 


16 – 代码重构

当你“重构“,你在不改变功能的情况下调整代码。你可以把它看作是“清理”,为了改进代码质量和可读性。

这并不包括bug的修复或者添加新功能。你可以重构你之前编写的代码,当它们在你头脑你还保持新鲜的时候,以便于你两个月以后有可能回顾代码时更加可读和可重用。就像那句格言所说的一样:“尽早重构,经常重构“。

你可以在重构期间应用以上任何关于代码可读性的“最佳实践“。我希望你喜欢这篇文章!我遗忘了什么?请通过回复告知我。

2012年度最佳Web前端开发工具和框架

http://www.csdn.net/article/2013-01-02/2813378-Web-Tool

摘要:技术的快速发展让很多人学习起来无所适从,幸运的是,很多优秀的 Web 开发人员和设计人员在努力寻找各种有特色的解决方案。 因此,我们有了很多优秀的小工具和库,每一个都是用来解决特定的问题或维护一组特定的项目。

2012年,Web 开发领域继续在快速的发展,HTML5 仍然在展示其跨平台的优越性,CSS3 被人们更多的应用到实际项目中,响应式设计(Responsive Design)技巧也被人越来越多的人熟知和使用。

这篇文章收集了2012年度新发布的最具有代表性 Web 前端开发工具和框架,这是一个非常值得收藏的工具列表,从功能全面的 IDE 到美观、充满异国情调的小框架,小工具等等。他们能够帮助你降低 Web 开发过程中的复杂度,节省时间和精力。

01.Foundation 3

响应式设计(Responsive Design)似乎瞬间就发展起来了,各个网页设计的论坛或者社区都会讨论这个话题,大家都想知道如何实现响应式设计,有什么框架或好的解决方案。

Foundation 3,由 ZURB 公司开发,号称世界上最先进的响应式前端框架。利用灵活的网格系统可以快速设计出页面布局。更妙的是,网格可以是你所需要的任何尺寸,它很容易适应各种尺寸的屏幕。

Foundation 3 makes great claims and even lives up to some of them

02.Proto.io

Proto.io是一个新的界面原型设计工具,专门针对移动应用程序。基于 Web 的在线环境,可以让你制作流行的 iPhone,iPad,Android 手机或平板电脑,以及任何带有屏幕界面的设备的原型项目。

在设计了一些界面后,你通常会期望能够把页面交互性的链接起来,Proto.io 做到了这一点。它也支持所有你可能想到的触摸手势,以及幻灯片、翻转和淡入淡出动画,使用简单,而且可以免费使用。

Thanks to Proto.io that game is going to be a smash, probably

03.Fontello

为什么这么难找到一组涵盖所有的基础功能的外观一致的图标?

不用再困惑了,Fontello不仅拥有所有你需要的图标,而且你可以挑选并选择你所需要的字形,并编译成自己需要的一套。 当然,您也可以从GitHub下载整个的图标集。该项目是开源的,糕富帅们捐几刀吧,不胜感激。

Fontello allows you to pick and choose your icon sets from its collections

04.Bugherd

与普遍的看法相反,推出一个新的网站对于开发团队来说工作还远远没有结束。

BugHerd提供了一个整洁,组织良好的方式来处理反馈,Bug 修复和功能要求。不需要繁杂的电子邮件反馈方式,只需要在网站中包含一个简单的 JavaScript 文件,该网站的访问者就可以通过反馈按钮提交意见和建议。BugHerd 提供了一个友好,直观的界面来管理整个事情。

Adding tasks is super-easy with BugHerd

05.Sencha Touch 2

毫无疑问,移动触屏设备的流行给Web开发带来了巨大的影响。

Sencha Touch是一个基于 HTML5 的移动应用开发框架,致力于吸引HTML5开发者使用Sencha Touch构建在iPhone、Android和BlackBerry等设备上运行的移动Web应用,这些应用效果看起来如同本地应用。改进的API,完善的文档和教程资料以及可靠的本地集成让 Sencha Touch 2成为强有力的移动框架竞争者。

06.Dreamweaver CS6

Dreamweaver是经典的网页制作软件,最新发布的Dreamweaver CS6新增了HTML5和CSS3编码支持;jQuery移动和Adobe PhoneGap框架的扩展支持可协助您为各种屏幕、手机和平板电脑建立项目;集成了Adobe Business Catalyst、FTPS、FTPeS 支持、Adobe Creative Suite、Adobe BrowserLab等众多功能。

Even with all the bells and whistles Dreamweaver CS6 has a certain poise

07. Cloud9 IDE

Cloud 9是基于NodeJS构建的在线集成开发环境,语法高亮支持 C#, C++, Python, Perl, Ruby, Scala 等等众多常用开发语言。

内置的Vim模式非常好用,支持流行的版本控制系统,像Git,Mercurial和SVN,另外它还有非常强大的插件系统,可以拓展其功能,例如借助CSSLint和JSBeautify,Cloud9就可以变成一款非常实用的代码美化工具。

Cloud9 gives you and your cohorts with a unified, code anywhere environment

08.Adobe Edge Inspect

Edge Inspect是一款对移动开发者非常有用的工具,其前身是Adobe Shadow,用于帮助设计师和开发者同时在多个移动设备上预览应用设计,发现和解决跨平台问题。

只需要把你的设备(Android和iOS)和你的电脑连接起来,这时候你的网站就会在各个设备上同步显示,让检查和调试变得更有效,并可以让设计师同时看到每个版本在所有目标设备上的显示情况。

Edge Inspect just takes a couple of clicks to set up once you have all the downloads - browser, desktop and mobile

09.Adobe Brackets

你可能会觉得现在代码编辑器已经是琳琅满目了,而且这些编辑器都很相似,没有什么可创新的了。Brackets让我们知道,其实在编辑器领域还是有很多功能可以去探索的。Brackets是Adobe的开源HTML、CSS和JavaScript集成开发环境。Brackets提供Windows和OS X平台支持。

Brackets的核心目标是减少在开发过程中那些效率低下的重复性工作,例如浏览器刷新,修改元素的样式,搜索功能等等,Brackets值得你试试。

HTML/CSS/JS Brackets makes them feel newly detailed and responsive

10.Modernizr 2.6

Modernizr是一个开源的JavaScript库,用于检测用户浏览器的HTML5和CSS3特性。它使得那些基于用户浏览器的不同(指对新标准支持性的差异)而开发不同级别体验的设计师的工作变得更为简单,让Web开发人员可以在现代浏览器中充分利用HTML5和CSS3的那些先进的特性进行开发,同时又不会牺牲其它不支持这些新技术的浏览器的控制。

Front end development tool with a serious pedigree

11.Sublime Text 2

如果你想体验流畅编写代码的快感,赶紧试试Sublime Text 2 吧!

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,多重选择,快捷命令等。还可自定义键绑定,菜单和工具栏。Sublime Text的主要功能包括:拼写检查,书签,完整的Python API,Goto功能,即时项目切换,多选择,多窗口等等。

Sublime Text是一款跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。Sublime Text 2是收费软件,但目前可以无限期试用。

12.PhoneGap 2.0

PhoneGap是一个免费开源的开发框架,让Web开发人员能够使用熟悉的HTML,CSS和JavaScript构建跨平台的移动本地应用。

通过PhoneGap框架提供的JavaScript API能够以非常简单的方式调用移动设备的核心功能,包括地理位置,摄像头,加速器,通讯录,多媒体,文件和网络等功能。

借助PhoneGap,你完全可以使用熟悉的Web开发技术写出移动Native App,并发布到Apple Store,Google Play等各平台应用商店中。编写好的代码可以上传到云端服务器,使用云端编译功能编译成各种平台下的应用,支持iOS,Android,Palm WebOS,Symbian,Blackberry,Windows Phone和Bada七大平台。

HTML5 + CSS3 + Javascript = native mobile apps

13.Emmet

Emmet项目的前身是前端开发人员熟知的Zen Coding,一种提供快速编写HTML/CSS代码的方法。和一般的编辑器中使用的“代码片段”概念不同,Emmet使用动态的类似CSS表达式的语法来生成代码,这意味着你不需要自己去编辑并创建固定的代码片段,大大的提高了代码编写效率。

Emmet结合优秀的编辑器使用,可以让你代码飞起来!支持的编辑器包括:

14.Yeoman

Yeoman提供了一套强大的工具、库和工作流,可以帮助开发人员快速构建出漂亮的、引人注目的Web应用。Yeoman的主要特色:

  • 闪电般搭建出框架(使用能够自定义的模板(例如:HTML5 Boilerplate、Twitter Bootstrap 等)、AMD(通过 RequireJS)以及其他工具轻松地创建新项目的框架。);
  • 自动编译 CoffeeScrip & Compass——在代码改动的时候,Yeoman 的 LiveReload 监视进程会自动编译源文件并刷新浏览器,而不需要你手动执行;
  • 自动校验脚本——脚本会自动运行 jshint 校验,以确保他们遵循语言的最佳实践;
  • 内建预览服务器——不需要启动自己的 HTTP 服务器,内置的服务器用一条命令就可以启动;
  • 高效的图像优化——Yeoman 使用 OptPNG 和 JPEGTran 对所有图像做了优化,提供页面加载速度;
  • 生成 AppCache 清单——Yeoman 会为你生成应用程序缓存的清单,你只需要构建项目就好;
  • 杀手级的构建过程——Yeoman 为你自动化完成了大部分的工作,帮助你节省大量时间和精力;
  • 集成包管理——你可以通过命令行轻松地查找新的包,安装并保持更新,而不需要你打开浏览器;
  • 支持ES6模块语法——可以使用最新的ECMAScript 6模块语法来编写模块,不过还是一种实验性的特性,它会被转换成ES5;
  • PhantomJS单元测试——使用PhantomJS轻松运行单元测试。创建新的应用程序的时候,它还会为你自动创建测试框架;

 

Yeoman provides a friendly interface to the most up to date development techniques

15.TypeCast

TypeCast让你可以从Fonts.com、TypeKit、FontDeck和Google这些字体供应和商选择字体,而且能非常方便的比较这些字体使用效果。如果你想获得用户对这些字体效果的反馈,只需要发布一个URL就可以了。这样,无需实际购买的字体,直到你已经决定在最终的解决方案。

由于网页字体的巨大飞跃,排版正在成为网页设计师工作中一项越来越重要的内容。但是,实际的情况是数以千计的字体让设计师需要花大量的时间和精力去选择,而 TypeCast 正是为了解决这个问题的。

Typesetting the web as it should be done

16.Gridset

Gridset让你可以非常轻松的添加列,定义比例和设置间隔,而不用考虑背后的数学计算。

网格系统正逐渐成为网页设计的焦点,和印刷排版有点类似,但是要复杂很多。网页的网格系统需要更加灵活,更加响应性。但是网格系统的计划和规划是件困难的事情,Gridset可以让你轻松的使用网格系统。

17.Microsoft WebMatrix 2

WebMatrix是一个全新的Web开发平台,区别于现有的开发平台,WebMatrix的特点是一站式和简化的开发过程,提供一种简单、一体化的建站方案。

它提供了网站所需的所有工具:Web Server、数据库、Web框架和开发环境。其主要组件包括了轻量级Web serve IIS Developer Express;轻量级基于文件的数据库SQL Server Compact Edition;轻量级开发环境ASP.NET “Razor”。

WebMatrix has excellent manners, helping when needed, or just staying out of the way

18.Trello

Trello是由著名的软件工程师Joel Spolsky开发的一个团队协作平台,在今年的TechCrunch Disrupt大会上正式发布。运行和管理一家公司,最困难的事情莫过于追踪大家的工作状况,因此他开发了Trello 来解决这个难题。任何行业中的任何人都可以使用Trello团队工作系统。

其他的项目管理系统都是以开发者为中心的,过于复杂,对普通用户缺乏吸引力,Trello则为各种流程设计,既可以当做公司的协作工具,也可以当做个人的列表管理工具。

Make sense of the big picture with Trello's boards

19.Firefox 18

Firefox拥有众多强大的开发工具插件,成为Web开发人员必备可少的调试工具,从Firefox 18开始,Mozilla将正式开启开发长达1年之久的的新一代JavaScript引擎——IonMonkey,不仅能大幅提高Firefox的JavaScript性能,还能提高浏览器的安全性及其他性能。

最新版本增加对于OSX 10.7+ 超高分屏和和WebRTC的支持;使用了新的HTML拉伸算法,提高了图片质量;实现了CSS3 Flexbox;实现 W3C 标准的触摸实现,替代了MozTouch实现;实现新的DOM属性Window.devicePixelRatio;通过智能化处理签名扩展的认证来提高启动速度。

Firefox makes sense of the tangled web

20.Photon

Photon是一个非常有趣的项目,为立体空间中的DOM元素添加光照效果的JavaScript库,结和CSS3变换(Transform)实现。

作者Tom Giannattasio提供了三个例子,包括一个非常好的纸鹤的效果展示,你可以移动鼠标进行旋转,下面提供的Photon效果切换按钮可以让你体验两种状态下的差异。

来自:梦想天空的博客

20款非常实用的Web工具和资源列表

http://www.csdn.net/article/2013-04-22/2814991-20-useful-tools-and-resources-for-Web-designers

摘要:对Web工程师而言,掌握一些优秀的工具不仅可以让开发工作事半功倍,而且还能增强自身实力,触类旁通。本文整理和收集了20款非常实用的资源列表,它们能够帮助你降低Web开发过程中的复杂度,节省时间和精力。

1.Niice

Niice本质上是一个设计搜索引擎,其结果来源于Designspiration 、Behance、Dribbble。搜索示例:black and white script lettering

2.Pixel Dropr

Pixel Dropr是PhotoShop的一款插件,由UI Parade公司设计开发,是一个集成了图标、插图、照片、按钮等设计元素的工具面板,用户可以轻松地将设计元素从Pixel Dropr的面板上拖拽到任何PSD文件中。

3.Designer News

Designer News是一款强调设计的新兴工具。

4.Firefox’s Font Inspector

Font Inspector是Firefox在DevTools里新添的一款typography-centri工具,点击查看更多详细介绍。

5.Cloud Comp

Cloud Comp是由Cloud APP提供的一款轻量级工具,设计师可以使用它与客户共享APP和网站排版。点击查看更多详细介绍。


6.Sidebar.io

Sidebar是一个网站,在它的页面上每天都会提供5个最好的设计链接给大家。

7.BLOKK

BLOKK是一款由破折号组成的字体,可用于快速建立原型图与线框,点击查看更多详情。

8.What’s My Browser Size?

顾名思义,What’s My Browser Size?是一款显示当前浏览器窗口尺寸的Web应用。

9.Intuitive Color Picker

Intuitive Color Picker是一款取色器。同类型的应用有0 to 255Colllor

10.Timehub

11.Helvetica vs Arial

字体排版在Web设计中扮演着非常重要的角色,许多设计师对一些相似的字体很难知道它们的区别,比如 Helvetica和Arial。该资源将不仅能很好地测试你们的技能,并有助于区分这两种字体。

12.HEX to RGB Converter

这是一个非常小的网站,把HEX转换成RGB代码。推荐尝试Colorrrs

13. PlaceIt

PlaceIt是一个简单的拖放工具,可以让你在几秒钟内生成非常逼真的产品截图。

14.Heyoffline.js

这是一个JavaScript插件,当网络设备下滑时,会通知用户保存信息,以免数据丢失。另外推荐Garic.js插件,用于存储本地表单数据。

15.Keynote/PowerPoint for UX Tests

Keynote是Google Ventures团队的首选工具,用于构建功能模型,并且非常实用。

16.Alfred Workflows

如果你是Alfred用户,可以查看这款CSS颜色转换流程。

17.PLTTS

PLTTS(读作Pallets),是一款为项目确定颜色的工具。

18.Chardin.js

Chardin.js是一个jQuery插件,可以为Web应用程序提供简单的叠加式说明(overlay-style instructions),点击查看特效。

19.Mincss

Mincss是一款垃圾清除器,通过查找和删除选择器可以清除CSS中的“垃圾”

20.CSSCSS 

CSSCSS与Mincss类似,通过解析CSS文件来解释一些规则和重复使用的声明。

英文来自:TNW

常用前端开发工具合集

最流行的前端开发工具

2.HttpWatch http://www.httpwatch.com/
集成在IE和Firefox上的监听HTTP和HTTPS的工具

3.Fiddler http://www.fiddler2.com/fiddler2/
Fiddler是一个记录你电脑和网络之间所有HTTP(S)请求的网络调试代理

4.HttpFox https://addons.mozilla.org/eu/firefox/addon/6647?lang=en-US
和HTTPWatch很类似的一个工具

5.Yslow http://developer.yahoo.com/yslow/
Firebug的一个扩展,可以根据高性能网站的一些准则来分析网页并且提出建议来提高网站的性能

6.Css Usage https://addons.mozilla.org/zh-CN/firefox/addon/10704
Firebug的一个扩展,可以用来察看哪些CSS被用到了

7.VIM http://www.vim.org/
一个高级的文本编辑工具,是在UNIX系统上面VI编辑器的升级版本

8.Editplus http://www.editplus.com/
Windows系统上的一个好用的文本编辑器

9.DNS Flusher https://addons.mozilla.org/en-US/firefox/addon/7408
Firefox上的一个附加组件,当HOST文件改变时可以很快地更新页面而不需要重启浏览器

10.PageSpeed http://code.google.com/intl/zh-CN/speed/page-speed/
Page Speed 是开源 Firefox/Firebug 插件。网站管理员和网络开发人员可以使用 Page Speed 来评估他们网页的性能,并获得有关如何改进性能的建议

11.Dust-me Selectors https://addons.mozilla.org/zh-CN/firefox/addon/5392
Firefox上的一个附加组件,可以找出没有用到的CSS选择符

12.Myspace Performance Tracker http://msfast.myspace.com/
Myspace的性能分析工具, 可以分析到页面渲染的各个阶段的时间、CPU和内存的消耗情况,只使用于IE中

13.YUI Compressor http://developer.yahoo.com/yui/compressor/
用java写的一个代码压缩工具,使用方法: java -jar yuicompressor-x.y.z.jar [options] [input file]

14.JS Beautifier http://jsbeautifier.org/
在线JS格式化工具

15.JSLint http://jslint.com/
在线JS校验工具,使用请注意“JSLint will hurt your feelings.”

16.JSCompress http://jscompress.com/
在线JS压缩工具

17.JSMin http://www.crockford.com/javascript/jsmin.html
JS压缩工具

18.HTML2Javascript http://accessify.com/tools-and-wizards/developer-tools/html-javascript-convertor/
HTML到JavaScript转换器获得置标并将它转换成一系列可以在JavaScript块中使用的document.write()申明

19.Web Developer https://addons.mozilla.org/da/firefox/addon/60?lang=zh-CN
Firefox的一个附加组件,给Firefox增加了一个菜单以及工具栏,里面包含了很多开发工具

20.JS Regexp Generator http://www.jslab.dk/tools.regex.php
一个制作正则表达式的在线工具

21.Opera Dragonfly http://www.opera.com/dragonfly/
Opera Dragonfly 是Opera浏览器的跨设备,跨平台调试环境—调试 JavaScript, 检查编辑CSS和DOM, 并且查看移动设备或计算机上的错误

22.IE Web Developer http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&displaylang=en
微软的浏览器开发者工具条为网页的快速创建,理解和故障诊断提供了各种的工具

23.DynaTrace http://ajax.dynatrace.com/pages/
一个页面性能分析工具,是针对浏览器 IE 6 ~ 8 的。它可以用来分析页面渲染时间、DOM方法执行时间,甚至可以看到 JS 代码的解析时间。多谢“有米啦”同学的推荐,好友卓群的 博客以前也介绍过

24.IE Tester http://www.my-debugbar.com/wiki/IETester/HomePage
IETester是一个免费的浏览器,它同时包括了IE 5.5、IE 6、IE 7、IE 8的所有内核,多版本IE测试好工具,DIV测试,CSS兼容和各个版本浏览器兼容检测工具

25.Companion JS http://www.my-debugbar.com/wiki/CompanionJS/HomePage
IE下的js调试工具,需要结合Microsoft Script Debugger使用,通过安装这个工具,但页面出现错误时会在左上角弹出一个小错误提示,点击会在IE下面显示出一个错误控制台,就如FF下的 firebug控制台一样,错误信息提示很详细

26.Live Http Header https://addons.mozilla.org/zh-CN/firefox/addon/3829
live HTTP headers是firefox的一个插件,可以查看到http头,非常方便

27.Closure Compiler http://code.google.com/intl/zh-CN/closure/compiler/
Google的JavaScript编译工具

Eminem – Not Afraid

I’m not afraid to take a stand 我不惧怕 表明想法

Everybody come take my hand 众人信念 与我并肩
We’ll walk this road together, through the storm 我们会齐心前进,逆风雨
Whatever weather, cold or warm 不论天气,寒或暑
Just let you know that, you’re not alone 只要你知,你并不孤独
Hola if you feel that you’ve been down the same road 你也在和我们一起走这条路

You can try and read my lyrics off of this paper before I lay ’em 你可以在我写成这词之前 念念纸上的字
But you won’t take this thing out these words before I say ’em 但你不会在我唱出这词之前 明白字里的意
Cause ain’t no way I’m let you stop me from causing mayhem 因为我决不会让你阻止我 犯蓄意伤害罪
When I say ’em or do something I do it, I don’t give a damn 我说的词 我做的事 我妄为恣意
What you think, I’m doing this for me, so fuck the world 我管你怎么想,我为自己活,操这个世界
Feed it beans, it’s gassed up, if a thing’s stopping me 真傻蛋,阻止我的事,都只会让我更出色
I’mma be what I set out to be, without a doubt undoubtedly 我做到了我想做的事,无疑地毋庸置疑
And all those who look down on me I’m tearing down your balcony 那些蔑视我的人 我这就出手反击
No if ands or buts don’t try to ask him why or how can he 没”且”没”或” 不要问他成功的方式原因
From Infinite down to the last Relapse album he’s still shit and 从最初的Infinite到最新的Relapse 他都是一坨屎
Whether he’s on salary, paid hourly 别管他是否还有薪水,是不是还按小时给
Until he bows out or he shit’s his bowels out of him 直到他辞退 或是鼓起狗屎勇气
Whichever comes first, for better or worse 不管先迈哪一步 是好还是赖
He’s married to the game, like a fuck you for christmas 他已是这个游戏的人,要操你们作为圣诞礼
His gift is a curse, forget the earth he’s got the urge 他的天赋是个诅咒,不在乎世界催促
To pull his dick from the dirt and fuck the universe 他要在操完大地之后 操整个宇宙

I’m not afraid to take a stand 我不惧怕 表明想法
Everybody come take my hand 众人信念 与我并肩
We’ll walk this road together, through the storm 我们会齐心前进,逆风雨
Whatever weather, cold or warm 不论天气,寒或暑
Just let you know that, you’re not alone 只要你知,你并不孤独
Holla if you feel that you’ve been down the same road 你也在和我们一起走这条路

Ok quit playin’ with the scissors and shit, and cut the crap OK不再玩花样,废话再不讲
I shouldn’t have to rhyme these words in the rhythm for you to know it’s a rap 我之前本不该 押韵半天 显示我是在说唱
You said you was king, you lied through your teeth 你说你是王,你彻彻底底在撒谎
For that fuck your feelings, instead of getting crowned you’re getting capped 为此 我操你的感情,你不配加冕 只配扣个帽子
And to the fans, I’ll never let you down again, I’m back 还有我的粉丝,我不会再让你们失望,我回来了
I promise to never go back on that promise, in fact 我发誓不会再违背誓言, 实际上
Let’s be honest, that last Relapse CD was “ehhhh” 我坦言,这张RelapseCD 换来哗然一片
Perhaps I ran them accents into the ground  也许我的重音 有些过
Relax, I ain’t going back to that now 放松,我并不想打退堂鼓
All I’m tryna say is get back, click-clack BLAOW 我想说 我回来了,一切都已算好
Cause I ain’t playin’ around 因为我不会再胡搞
There’s a game called circle and I don’t know how 有种游戏叫圈子 我不懂怎么搞
I’m way too up to back down  我爬的太高 不能往回跳
But I think I’m still tryna figure this crap out 但我仍然试图理清这堆 乱七八糟
Thought I had it mapped out but I guess I didn’t 我以为我早已筹划好 可并非如我所料
This fucking black cloud’s still follow’s me around 这片操蛋的乌云 仍笼于我周遭
But it’s time to exercise these demons  现在是时候 来看看这些恶魔
These motherfuckers are doing jumping jacks now! 这些混蛋们正操纵傀儡来整我!

I’m not afraid to take a stand 我不惧怕 表明想法
Everybody come take my hand 众人信念 与我并肩
We’ll walk this road together, through the storm 我们会齐心前进,逆风雨
Whatever weather, cold or warm 不论天气,寒或暑
Just let you know that, you’re not alone 只要你知,你并不孤独
Holla if you feel that you’ve been down the same road 你也在和我们一起走这条路

And I just can’t keep living this way 我只是不能再这么活
So starting today, I’m breaking out of this cage 就从今开始,我要摆脱枷锁
I’m standing up, Imma face my demons 我站起来,我面对恶魔
I’m manning up, Imma hold my ground 我直起身,我坚持立场
I’ve had enough, now I’m so fed up 我受够了,我厌倦了
Time to put my life back together right now 轮到我重新来过 立刻

It was my decision to get clean, I did it for me 我决定理清一切,就为自己
Admittedly i probably did it subliminally for you 无可否认 也许我潜意识里也是为了你
So I could come back a brand new me, you helped see me through 所以我会是一个崭新的自己,你们陪我度过
And don’t even realise what you did, believe me you 甚至也不知道你们做了什么,相信我
I been through the ringer, but they can do little to the middle finger 我中过圈套,但是面对我竖起的中指他们什么也做不了
I think I got a tear in my eye, I feel like the king of 也许我眼里有泪,我感觉自己像王
My world, haters can make like bees with no stingers, and drop dead 在自己的世界里 仇恨者像是没有刺的蜂 最后死掉
No more beef flingers, no more drama from now on, I promise 不再有痛苦,不再有悲剧,我发誓
To focus soley on handling my responsibility’s as a father 我会尽我全力 承担责任做好一个 父亲
So I solemnly swear to always treat this roof like my daughters and raise it 我信誓旦旦,像保护女儿一样保护这个家
You couldn’t lift a single shingle lonely 严丝合缝 谁也不能入侵
Cause the way I feel, I’m strong enough to go to the club 我感觉 我能涉足圈子 我足够强大
Put a corner par and lift the whole liquor counter up 不会被围困 就是烈性酒也能一口闷下
Cause I’m raising the bar, I shoot for the moon 因为我提高了门槛 追求完美
But I’m too busy gazing at stars, I feel amazing and 我忙着尽善尽美,我惊异,而且

I’m not afraid to take a stand 我不惧怕 表明想法
Everybody come take my hand 众人信念 与我并肩
We’ll walk this road together, through the storm 我们会齐心前进,逆风雨
Whatever weather, cold or warm 不论天气,寒或暑
Just let you know that, you’re not alone 只要你知,你并不孤独
Holla if you feel that you’ve been down the same road 你也在和我们一起走这条路

2013考驾照

1、题目里有“口”的选50米,有“站”的选30米,叫“口五站三’ 剩下的全选150米,没有150的选最大。判断题全对。
2、有关公里的题目:城市街道选50公里,其余有30的全选30。 高速最高70,高速最低60。判断题全对。
3、吊销机动车证的为二年,撤消机动车证的为三年,以醉酒吊销五年,因逃跑而吊销是终身,叫“吊二撤三醉五逃终身”。
4、伤员急救知识:选择题:A、B、C、“选字最多的”。
判断题:只有“远心端”和“软质担架”是错的,其余都是对的。
5、危险知识:题目里找“不需要” “不受” “可以” “三层” “坚固无损” 是错的,其余都是对的。
6、 扣分题:扣1分: “未带证件”判断题:有
“灯光” 和 ”倒车“ 是对的,其余全错。扣2分: 匝道超车(高速),未达20%,打手机,违反标志,超4小时,没有划中心线,实习期,交叉路口 。判断题:
”未与前保持安全距离“ 是对的。其余全错。扣3分: 灯光、信号灯、号牌、高速、挂车,判断题全错。扣6分:
饮酒、超过50%、超过30%,学习驾车(高速),不按规定停车(高速)。判断题全对。扣12分:醉酒、扣证驾车、逃逸、借证驾车,超过三个月未缴罚款,
驾不符合车型的,强行通过。判断题全对。
7、罚款题:有 ”2000“ 选 ”2000“ ,没 ”2000“ 选 ”500“ ,没有 ”2000以上” 的和没有
”1000“的罚款。其它全选最大题。考罚款金额的判断题全选正确。
8、有关天数的题目:只要记住一个调解的选10天,其余有15天选15天,没有15天的选3或90。
9、有关高度的:出现 ”集装箱“
选最大,其余选小。
10、关于作用的
”变、离、柴、行“ 4个字后有作用全错,其余有作用全对。
学车顺口溜只要牢记考试准能过

今日早报
朋友刚学车时,也和其他学员一样分不清动作要领和先后顺序,一上车不是忘了这动作就是忘了那动作,有时一紧张,脑子还会暂时“空白”。一次看书,看到一篇顺口溜觉得挺不错的,就根据动作要领,写下了这首学车顺口溜。
上车喊报告!

拉门出左脚,坐好叫考官,面带梨涡笑。
关门深呼吸,坐姿要摆好。
查看空挡位,点火要轻柔。

方向别忘了,挂挡要干脆,手刹要放掉。
起步问考官,多看后视镜,喇叭来欢叫。
离合器放松,做好半连动,出发要稳当,别让考官晃!

换挡要及时,加挡要迅速,遇人要刹车,可别过了头。
转弯要减速,立即减下挡,多看多停顿,安全放心中。

肩膀要放松,双手放到位,神态要自然,莫因考官慌。
自己有信心,艰辛都不怕,胆大又心细,礼貌别忘了。

只要牢记着,考试准能过!
驾照考试秘笈小路考:驾校大路,小路考试(9九选六)考试技巧,注意事项和秘笈
步程序
1,调整座位
2,检视左右反光镜和倒车镜,检视手制动拉杆和排档杆位置
3,挂上保险带
4,左手握把,右手放电门开关位置
5,左脚踩下离合器踏板–分离离合器
6,右脚轻踏脚制动踏板
7,将排挡放入空挡位置
8,打开启动电门,检视仪表盘
9,确认无异常后,右手持排档放入起步挡位
10,左手打开向左方向灯
11,眼睛观察车四周状况,左右反光镜状况
12,三联动起步
注明:三联动–指油门,离合器,手刹车的配合动作
具体操作为:离合器放接触点,油门略微轻加,同时轻放手制动拉杆

附:交通标志大全

图解警告标志

图解禁令标志

图解指示标志

图解道路交通标线

新增